@steerprotocol/strategy-utils 3.0.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +2 -0
- package/CHANGELOG.md +13 -0
- package/assembly/utils/index.ts +1 -0
- package/assembly/utils/triggers.ts +56 -87
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## [1.2.0-alpha.3](https://github.com/SteerProtocol/strategy-utils-assemblyscript/compare/v1.2.0-alpha.2...v1.2.0-alpha.3) (2023-08-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* :art: Move Config to all RJFS for EDT ([eb63008](https://github.com/SteerProtocol/strategy-utils-assemblyscript/commit/eb63008fbd9ca9ed3dee9ab81336cce89de5c482))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* :ambulance: Object validation ([74b7a05](https://github.com/SteerProtocol/strategy-utils-assemblyscript/commit/74b7a059f79ea02202e10339c87ebefc5778ffcf))
|
|
12
|
+
* remove type for trigger ([f8c4987](https://github.com/SteerProtocol/strategy-utils-assemblyscript/commit/f8c49877779b82c5265c30c79962947eaa014886))
|
|
13
|
+
|
|
1
14
|
## [1.2.0-alpha.2](https://github.com/SteerProtocol/strategy-utils-assemblyscript/compare/v1.2.0-alpha.1...v1.2.0-alpha.2) (2023-08-17)
|
|
2
15
|
|
|
3
16
|
|
package/assembly/utils/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { JSON } from "json-as";
|
|
2
|
+
// import { Position } from "@steerprotocol/strategy-utils/assembly";
|
|
2
3
|
import { Position } from "./types";
|
|
3
4
|
|
|
4
5
|
// NOTE: Trigger functions return true when action should be taken, if false then the strategy can return 'continue' to skip exeuction
|
|
@@ -160,10 +161,12 @@ export class TriggerConfigHelper {
|
|
|
160
161
|
}
|
|
161
162
|
}
|
|
162
163
|
|
|
163
|
-
export function getTriggerExpectedDataTypes(triggerStyle:
|
|
164
|
+
export function getTriggerExpectedDataTypes(triggerStyle: string): string[] {
|
|
165
|
+
// get tirggerStyle
|
|
166
|
+
const style = getTriggerStyle(triggerStyle)
|
|
164
167
|
// currently we use only this list
|
|
165
168
|
const typicalTypes = ["Liquidity Manager Positions", "V3 Pool Current Tick", "Time Since Last Execution"]
|
|
166
|
-
switch (
|
|
169
|
+
switch (style) {
|
|
167
170
|
case TriggerStyle.DistanceFromCenterOfPositions:
|
|
168
171
|
return typicalTypes;
|
|
169
172
|
case TriggerStyle.PercentageChangeFromPositionRange:
|
|
@@ -183,35 +186,6 @@ export function getTriggerExpectedDataTypes(triggerStyle: TriggerStyle): string[
|
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
188
|
|
|
186
|
-
|
|
187
|
-
export function getExpectedDataTypes(strategyDataConnectors: string[], triggerStyle: string): string {
|
|
188
|
-
const style = getTriggerStyle(triggerStyle)
|
|
189
|
-
const triggerDatas = getTriggerExpectedDataTypes(style)
|
|
190
|
-
const dataList = strategyDataConnectors.concat(triggerDatas)
|
|
191
|
-
let completeList = '['
|
|
192
|
-
for (let i: i32 = 0; i < dataList.length; i++) {
|
|
193
|
-
completeList += (' \"' + dataList[i] + '\"')
|
|
194
|
-
if (i != dataList.length-1) completeList += ','
|
|
195
|
-
}
|
|
196
|
-
completeList += ']'
|
|
197
|
-
return completeList
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// no AS func overloading yet :(
|
|
201
|
-
// export function shouldTriggerExecution_1(triggerStyle: TriggerStyle, triggerOptions: TriggerConfigHelper, dataConnector1: string) : boolean {
|
|
202
|
-
// // parse options
|
|
203
|
-
// switch (triggerStyle) {
|
|
204
|
-
// case TriggerStyle.SpecificPrice:
|
|
205
|
-
// // parse current tick from dc1
|
|
206
|
-
// const currentTick = parseInt(dataConnector1)
|
|
207
|
-
// if (!currentTick) return true
|
|
208
|
-
// // tick and over
|
|
209
|
-
// return triggerFromSpecifiedPrice(triggerOptions.tickPriceTrigger, currentTick, triggerOptions.triggerWhenOver)
|
|
210
|
-
// default:
|
|
211
|
-
// return true
|
|
212
|
-
// }
|
|
213
|
-
// }
|
|
214
|
-
|
|
215
189
|
// currently implemented as :: ulm positions [0], current tick [1], time since last execution [2]
|
|
216
190
|
// as more types are added this logic path with be redone
|
|
217
191
|
export function shouldTriggerExecution(
|
|
@@ -296,59 +270,78 @@ function getTriggerName(trigger: TriggerStyle): string {
|
|
|
296
270
|
}
|
|
297
271
|
}
|
|
298
272
|
|
|
273
|
+
function expectedDataTypesHelper(strategyDataConnectors: string[], triggerStyle: string): string[] {
|
|
274
|
+
// const style = getTriggerStyle(triggerStyle)
|
|
275
|
+
return strategyDataConnectors.concat(getTriggerExpectedDataTypes(triggerStyle))
|
|
276
|
+
// return `"expectedDataTypes": {
|
|
277
|
+
// "hidden": true,
|
|
278
|
+
// "type": "string",
|
|
279
|
+
// "default": "${(fullDataTypes).toString()}",
|
|
280
|
+
// "const": "${(fullDataTypes).toString()}"
|
|
281
|
+
// }`
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
@serializable
|
|
285
|
+
export class TriggerInfo {
|
|
286
|
+
name: string = '';
|
|
287
|
+
expectedDataTypes: string[] = [];
|
|
288
|
+
constructor (_name: string, _expectedDataTypes: string[]) {
|
|
289
|
+
this.name = _name
|
|
290
|
+
this.expectedDataTypes = _expectedDataTypes
|
|
291
|
+
}
|
|
292
|
+
}
|
|
299
293
|
|
|
300
|
-
export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
301
|
-
const triggerList = [
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
294
|
+
export function triggerPropertyHelper(strategyDataTypes: string[], omit: TriggerStyle[] = []): string {
|
|
295
|
+
// const triggerList = [
|
|
296
|
+
// TriggerStyle.DistanceFromCenterOfPositions,
|
|
297
|
+
// TriggerStyle.None,
|
|
298
|
+
// TriggerStyle.PercentageChangeFromPositionRange,
|
|
299
|
+
// TriggerStyle.PositionsInactive,
|
|
300
|
+
// TriggerStyle.PricePastPositions,
|
|
301
|
+
// ];
|
|
302
|
+
|
|
303
|
+
const triggersObjects: TriggerInfo[] = [
|
|
304
|
+
new TriggerInfo('Current Price set distance from center of positions', expectedDataTypesHelper(strategyDataTypes, 'Current Price set distance from center of positions')),
|
|
305
|
+
new TriggerInfo('Price leaves active range', expectedDataTypesHelper(strategyDataTypes, 'Price leaves active range')),
|
|
306
|
+
new TriggerInfo('Price moves percentage of active range away', expectedDataTypesHelper(strategyDataTypes, 'Price moves percentage of active range away')),
|
|
307
|
+
new TriggerInfo('Price moves one way past positions', expectedDataTypesHelper(strategyDataTypes, 'Price moves one way past positions')),
|
|
308
|
+
new TriggerInfo('None', expectedDataTypesHelper(strategyDataTypes, 'None')),
|
|
307
309
|
];
|
|
308
310
|
|
|
309
|
-
const
|
|
311
|
+
const triggerStrings = [
|
|
310
312
|
'Current Price set distance from center of positions',
|
|
311
313
|
'Price leaves active range',
|
|
312
314
|
'Price moves percentage of active range away',
|
|
313
315
|
'Price moves one way past positions',
|
|
314
316
|
'None'
|
|
315
|
-
]
|
|
316
|
-
|
|
317
|
+
]
|
|
317
318
|
|
|
318
319
|
return `"triggerStyle": {
|
|
319
|
-
"
|
|
320
|
+
"enumNames": ${JSON.stringify(triggerStrings)},
|
|
321
|
+
"enum": ${JSON.stringify(triggersObjects)},
|
|
320
322
|
"title": "Logic to trigger new positions",
|
|
321
|
-
"
|
|
322
|
-
"default": "None"
|
|
323
|
+
"default": ${JSON.stringify(new TriggerInfo('None', expectedDataTypesHelper(strategyDataTypes, 'None')))}
|
|
323
324
|
}`;
|
|
324
325
|
}
|
|
325
326
|
|
|
326
|
-
export function allOfTrigger(
|
|
327
|
+
export function allOfTrigger(strategyDataTypes: string[]): string {
|
|
327
328
|
return `{
|
|
328
329
|
"if": {
|
|
329
330
|
"properties": {
|
|
330
331
|
"triggerStyle": {
|
|
331
|
-
"const":
|
|
332
|
+
"const": ${JSON.stringify(new TriggerInfo('None', expectedDataTypesHelper(strategyDataTypes, 'None')))}
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
335
|
},
|
|
335
336
|
"then": {
|
|
336
|
-
"
|
|
337
|
-
"expectedDataTypes": {
|
|
338
|
-
"const": ${getExpectedDataTypes(strategyDataConnectors, "None")},
|
|
339
|
-
"default": ${getExpectedDataTypes(strategyDataConnectors, "None")},
|
|
340
|
-
"hidden": true,
|
|
341
|
-
"type": "string"
|
|
342
|
-
}
|
|
343
|
-
},
|
|
344
|
-
"required": ["expectedDataTypes"]
|
|
337
|
+
"required": []
|
|
345
338
|
}
|
|
346
339
|
},
|
|
347
340
|
{
|
|
348
341
|
"if": {
|
|
349
342
|
"properties": {
|
|
350
343
|
"triggerStyle": {
|
|
351
|
-
"const":
|
|
344
|
+
"const": ${JSON.stringify(new TriggerInfo('Current Price set distance from center of positions', expectedDataTypesHelper(strategyDataTypes, 'Current Price set distance from center of positions')))}
|
|
352
345
|
}
|
|
353
346
|
}
|
|
354
347
|
},
|
|
@@ -360,12 +353,6 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
360
353
|
"description": "The number of ticks (basis points) from center price of positions to trigger setting new positions",
|
|
361
354
|
"detailedDescription": "The static number of ticks from the center of the active range to trigger: if our position goes from 0-100, and we have a tick distance of 75, we will go out 75 ticks both ways from the center of our positions (50). This means we will skip execution only if the current tick is between -25 and 125. Future positions will determine where the center of the trigger range is located."
|
|
362
355
|
},
|
|
363
|
-
"expectedDataTypes": {
|
|
364
|
-
"const": ${getExpectedDataTypes(strategyDataConnectors, "Current Price set distance from center of positions")},
|
|
365
|
-
"default": ${getExpectedDataTypes(strategyDataConnectors, "Current Price set distance from center of positions")},
|
|
366
|
-
"hidden": true,
|
|
367
|
-
"type": "string"
|
|
368
|
-
},
|
|
369
356
|
"elapsedTendTime": {
|
|
370
357
|
"type": "number",
|
|
371
358
|
"title": "Max time between tends",
|
|
@@ -373,25 +360,19 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
373
360
|
"default": 1209600
|
|
374
361
|
}
|
|
375
362
|
},
|
|
376
|
-
"required": ["tickDistanceFromCenter", "
|
|
363
|
+
"required": ["tickDistanceFromCenter", "elapsedTendTime"]
|
|
377
364
|
}
|
|
378
365
|
},
|
|
379
366
|
{
|
|
380
367
|
"if": {
|
|
381
368
|
"properties": {
|
|
382
369
|
"triggerStyle": {
|
|
383
|
-
"const":
|
|
370
|
+
"const": ${JSON.stringify(new TriggerInfo('Price leaves active range', expectedDataTypesHelper(strategyDataTypes, 'Price leaves active range')),)}
|
|
384
371
|
}
|
|
385
372
|
}
|
|
386
373
|
},
|
|
387
374
|
"then": {
|
|
388
375
|
"properties": {
|
|
389
|
-
"expectedDataTypes": {
|
|
390
|
-
"const": ${getExpectedDataTypes(strategyDataConnectors, "Price leaves active range")},
|
|
391
|
-
"default": ${getExpectedDataTypes(strategyDataConnectors, "Price leaves active range")},
|
|
392
|
-
"hidden": true,
|
|
393
|
-
"type": "string"
|
|
394
|
-
},
|
|
395
376
|
"elapsedTendTime": {
|
|
396
377
|
"type": "number",
|
|
397
378
|
"title": "Max time between tends",
|
|
@@ -399,14 +380,14 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
399
380
|
"default": 1209600
|
|
400
381
|
}
|
|
401
382
|
},
|
|
402
|
-
"required": ["
|
|
383
|
+
"required": ["elapsedTendTime"]
|
|
403
384
|
}
|
|
404
385
|
},
|
|
405
386
|
{
|
|
406
387
|
"if": {
|
|
407
388
|
"properties": {
|
|
408
389
|
"triggerStyle": {
|
|
409
|
-
"const":
|
|
390
|
+
"const": ${JSON.stringify(new TriggerInfo('Price moves percentage of active range away', expectedDataTypesHelper(strategyDataTypes, 'Price moves percentage of active range away')))}
|
|
410
391
|
}
|
|
411
392
|
}
|
|
412
393
|
},
|
|
@@ -418,12 +399,6 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
418
399
|
"description": "The percentage of the range away to trigger new positions, 100% or 1 would be at the bounds of the range",
|
|
419
400
|
"detailedDescription": "If you have a simple position ranging from ticks 0 - 100, and you set this value to 1, the trigger range will be the outer bounds. Using 0.5 would make the trigger range 25-75, 2 would make the range -50 - 150."
|
|
420
401
|
},
|
|
421
|
-
"expectedDataTypes": {
|
|
422
|
-
"const": ${getExpectedDataTypes(strategyDataConnectors, "Price moves percentage of active range away")},
|
|
423
|
-
"default": ${getExpectedDataTypes(strategyDataConnectors, "Price moves percentage of active range away")},
|
|
424
|
-
"hidden": true,
|
|
425
|
-
"type": "string"
|
|
426
|
-
},
|
|
427
402
|
"elapsedTendTime": {
|
|
428
403
|
"type": "number",
|
|
429
404
|
"title": "Max time between tends",
|
|
@@ -431,14 +406,14 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
431
406
|
"default": 1209600
|
|
432
407
|
}
|
|
433
408
|
},
|
|
434
|
-
"required": ["percentageOfPositionRangeToTrigger", "
|
|
409
|
+
"required": ["percentageOfPositionRangeToTrigger", "elapsedTendTime"]
|
|
435
410
|
}
|
|
436
411
|
},
|
|
437
412
|
{
|
|
438
413
|
"if": {
|
|
439
414
|
"properties": {
|
|
440
415
|
"triggerStyle": {
|
|
441
|
-
"const":
|
|
416
|
+
"const": ${JSON.stringify(new TriggerInfo('Price moves one way past positions', expectedDataTypesHelper(strategyDataTypes, 'Price moves one way past positions')))}
|
|
442
417
|
}
|
|
443
418
|
}
|
|
444
419
|
},
|
|
@@ -450,12 +425,6 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
450
425
|
"description": "True for if the strategy should set new positions when the price (tick) is higher than the current positions, false for lower",
|
|
451
426
|
"detailedDescription": "If our current position ranges from ticks 0 - 100, true will make our bundle execute only when the current tick is higher. Any other case (current tick less than 100) will result in a continue recommendation."
|
|
452
427
|
},
|
|
453
|
-
"expectedDataTypes": {
|
|
454
|
-
"const": ${getExpectedDataTypes(strategyDataConnectors, "Price moves one way past positions")},
|
|
455
|
-
"default": ${getExpectedDataTypes(strategyDataConnectors, "Price moves one way past positions")},
|
|
456
|
-
"hidden": true,
|
|
457
|
-
"type": "string"
|
|
458
|
-
},
|
|
459
428
|
"elapsedTendTime": {
|
|
460
429
|
"type": "number",
|
|
461
430
|
"title": "Max time between tends",
|
|
@@ -463,7 +432,7 @@ export function triggerPropertyHelper(omit: TriggerStyle[] = []): string {
|
|
|
463
432
|
"default": 1209600
|
|
464
433
|
}
|
|
465
434
|
},
|
|
466
|
-
"required": ["triggerWhenOver", "
|
|
435
|
+
"required": ["triggerWhenOver", "elapsedTendTime"]
|
|
467
436
|
}
|
|
468
437
|
}`;
|
|
469
438
|
}
|