@pendle/sdk-boros 1.0.11-strategies → 1.0.11-strategies-2
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/dist/entities/Calculator/index.d.ts +1 -0
- package/dist/entities/Calculator/index.js +1 -0
- package/dist/entities/Calculator/index.js.map +1 -1
- package/dist/entities/Calculator/marginCalculator.js +33 -36
- package/dist/entities/Calculator/marginCalculator.js.map +1 -1
- package/dist/entities/Calculator/strategyApr.js +19 -16
- package/dist/entities/Calculator/strategyApr.js.map +1 -1
- package/dist/entities/Calculator/strategyExecution.js +41 -34
- package/dist/entities/Calculator/strategyExecution.js.map +1 -1
- package/dist/entities/Calculator/strategyFinder.d.ts +3 -1
- package/dist/entities/Calculator/strategyFinder.js +72 -33
- package/dist/entities/Calculator/strategyFinder.js.map +1 -1
- package/dist/entities/Calculator/strategyUtils.d.ts +17 -0
- package/dist/entities/Calculator/strategyUtils.js +59 -0
- package/dist/entities/Calculator/strategyUtils.js.map +1 -0
- package/dist/entities/Calculator/types.d.ts +1 -16
- package/package.json +1 -1
|
@@ -20,4 +20,5 @@ __exportStar(require("./strategyExecution"), exports);
|
|
|
20
20
|
__exportStar(require("./strategyApr"), exports);
|
|
21
21
|
__exportStar(require("./exchangeFees"), exports);
|
|
22
22
|
__exportStar(require("./marginCalculator"), exports);
|
|
23
|
+
__exportStar(require("./strategyUtils"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/entities/Calculator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,sDAAoC;AACpC,gDAA8B;AAC9B,iDAA+B;AAC/B,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/entities/Calculator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,sDAAoC;AACpC,gDAA8B;AAC9B,iDAA+B;AAC/B,qDAAmC;AACnC,kDAAgC"}
|
|
@@ -5,50 +5,47 @@ exports.getMarginRequiredFor1YUFixedX18 = getMarginRequiredFor1YUFixedX18;
|
|
|
5
5
|
exports.getStrategyBorosMargin = getStrategyBorosMargin;
|
|
6
6
|
exports.getStrategyMarginRequirements = getStrategyMarginRequirements;
|
|
7
7
|
const boros_offchain_math_1 = require("@pendle/boros-offchain-math");
|
|
8
|
-
const
|
|
8
|
+
const market_1 = require("../market/market");
|
|
9
9
|
const DEFAULT_MIN_MARGIN_INDEX_RATE = boros_offchain_math_1.FixedX18.fromNumber(0.1);
|
|
10
|
-
|
|
10
|
+
const DEFAULT_MIN_MARGIN_INDEX_DURATION_S = 604800;
|
|
11
|
+
const ONE_YU = 10n ** 18n;
|
|
12
|
+
function extractMarketParams(market, leverage) {
|
|
11
13
|
const effectiveLeverage = leverage ?? market.metadata?.maxLeverage ?? 1;
|
|
12
14
|
const marginFactor = market.config.kIM
|
|
13
15
|
? boros_offchain_math_1.FixedX18.fromRawValue(BigInt(market.config.kIM))
|
|
14
16
|
: boros_offchain_math_1.FixedX18.fromNumber(0.5);
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
(market.imData.maturity - Math.floor(Date.now() / 1000));
|
|
19
|
-
const timeToMaturity_y = Math.max(0, timeToMaturity_s / SECONDS_PER_YEAR);
|
|
20
|
-
const time_y = Math.max(timeToMaturity_y, tThresh_y);
|
|
21
|
-
const time = boros_offchain_math_1.FixedX18.fromNumber(time_y);
|
|
17
|
+
const minMarginIndexDuration_s = market.config.tThresh ?? DEFAULT_MIN_MARGIN_INDEX_DURATION_S;
|
|
18
|
+
const timeToMaturity = market.data?.timeToMaturity ??
|
|
19
|
+
Math.max(0, market.imData.maturity - Math.floor(Date.now() / 1000));
|
|
22
20
|
const impliedApr = market.data?.ammImpliedApr ?? market.data?.midApr ?? 0;
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
const orderRate = boros_offchain_math_1.FixedX18.fromNumber(impliedApr);
|
|
22
|
+
const markRate = boros_offchain_math_1.FixedX18.fromNumber(market.data?.markApr ?? impliedApr);
|
|
23
|
+
return {
|
|
24
|
+
marginFactor,
|
|
25
|
+
markRate,
|
|
26
|
+
minMarginIndexRate: (0, boros_offchain_math_1.getRateAtTick)(BigInt(market.imData.iTickThresh), BigInt(market.imData.tickStep)),
|
|
27
|
+
minMarginIndexDuration_s,
|
|
28
|
+
timeToMaturity,
|
|
29
|
+
leverage: effectiveLeverage,
|
|
30
|
+
orderRate,
|
|
31
|
+
isMarketOrder: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function getMarginRequiredFor1YU(market, leverage) {
|
|
35
|
+
const params = extractMarketParams(market, leverage);
|
|
36
|
+
const marginBigInt = market_1.Market.getInitialMarginByOrderSize({
|
|
37
|
+
...params,
|
|
38
|
+
orderSize: ONE_YU,
|
|
39
|
+
}, false);
|
|
40
|
+
return Number(marginBigInt) / 1e18;
|
|
31
41
|
}
|
|
32
42
|
function getMarginRequiredFor1YUFixedX18(market, leverage) {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const timeToMaturity_s = market.data?.timeToMaturity ??
|
|
40
|
-
(market.imData.maturity - Math.floor(Date.now() / 1000));
|
|
41
|
-
const timeToMaturity_y = Math.max(0, timeToMaturity_s / SECONDS_PER_YEAR);
|
|
42
|
-
const time_y = Math.max(timeToMaturity_y, tThresh_y);
|
|
43
|
-
const time = boros_offchain_math_1.FixedX18.fromNumber(time_y);
|
|
44
|
-
const impliedApr = market.data?.ammImpliedApr ?? market.data?.midApr ?? 0;
|
|
45
|
-
const absImpliedApr = boros_offchain_math_1.FixedX18.fromNumber(Math.abs(impliedApr));
|
|
46
|
-
const rate = absImpliedApr.gt(DEFAULT_MIN_MARGIN_INDEX_RATE)
|
|
47
|
-
? absImpliedApr
|
|
48
|
-
: DEFAULT_MIN_MARGIN_INDEX_RATE;
|
|
49
|
-
const contractSuf = rate.mulDown(time).mulDown(marginFactor);
|
|
50
|
-
const offchainSuf = rate.mulDown(time).divDown(boros_offchain_math_1.FixedX18.fromNumber(effectiveLeverage));
|
|
51
|
-
return contractSuf.gt(offchainSuf) ? contractSuf : offchainSuf;
|
|
43
|
+
const params = extractMarketParams(market, leverage);
|
|
44
|
+
const marginBigInt = market_1.Market.getInitialMarginByOrderSize({
|
|
45
|
+
...params,
|
|
46
|
+
orderSize: ONE_YU,
|
|
47
|
+
}, false);
|
|
48
|
+
return boros_offchain_math_1.FixedX18.fromRawValue(marginBigInt);
|
|
52
49
|
}
|
|
53
50
|
function getStrategyBorosMargin(longMarket, shortMarket, leverage) {
|
|
54
51
|
const marginRequired1 = getMarginRequiredFor1YU(longMarket, leverage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marginCalculator.js","sourceRoot":"","sources":["../../../src/entities/Calculator/marginCalculator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"marginCalculator.js","sourceRoot":"","sources":["../../../src/entities/Calculator/marginCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ exports.calculateStrategy = calculateStrategy;
|
|
|
6
6
|
exports.calculateStrategyAprFromStrategy = calculateStrategyAprFromStrategy;
|
|
7
7
|
exports.calculateAprTimesMaxLeverage = calculateAprTimesMaxLeverage;
|
|
8
8
|
const boros_offchain_math_1 = require("@pendle/boros-offchain-math");
|
|
9
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
9
10
|
function calculateStrategyFixedApr(params) {
|
|
10
11
|
const { perpLeverage, daysToMaturity, borosMargin, impliedApr1, impliedApr2, exchangeFee1, exchangeFee2, borosTradeFee, borosSettlementFee, } = params;
|
|
11
12
|
if (daysToMaturity <= 0) {
|
|
@@ -13,11 +14,11 @@ function calculateStrategyFixedApr(params) {
|
|
|
13
14
|
}
|
|
14
15
|
const impliedAprDiff = Math.abs(impliedApr1 - impliedApr2);
|
|
15
16
|
const annualizationFactor = 365 / daysToMaturity;
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const totalFees =
|
|
17
|
+
const annualizedExchangeFees = annualizationFactor * (exchangeFee1 + exchangeFee2);
|
|
18
|
+
const borosFees = 2 * (borosSettlementFee + borosTradeFee);
|
|
19
|
+
const totalFees = annualizedExchangeFees + borosFees;
|
|
19
20
|
const leverageFactor = 1 / (2 / perpLeverage + borosMargin);
|
|
20
|
-
const fixedApr = leverageFactor * (impliedAprDiff -
|
|
21
|
+
const fixedApr = leverageFactor * (impliedAprDiff - totalFees);
|
|
21
22
|
return fixedApr;
|
|
22
23
|
}
|
|
23
24
|
function calculateStrategyFixedAprFixedX18(params) {
|
|
@@ -28,11 +29,10 @@ function calculateStrategyFixedAprFixedX18(params) {
|
|
|
28
29
|
const impliedAprDiff = impliedApr1.sub(impliedApr2).abs();
|
|
29
30
|
const annualizationFactor = boros_offchain_math_1.FixedX18.fromNumber(365 / daysToMaturity);
|
|
30
31
|
const two = boros_offchain_math_1.FixedX18.fromNumber(2);
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const totalFees =
|
|
34
|
-
const
|
|
35
|
-
const netReturn = impliedAprDiff.sub(annualizedFees);
|
|
32
|
+
const annualizedExchangeFees = exchangeFee1.add(exchangeFee2).mulDown(annualizationFactor);
|
|
33
|
+
const borosFees = borosSettlementFee.add(borosTradeFee).mulDown(two);
|
|
34
|
+
const totalFees = annualizedExchangeFees.add(borosFees);
|
|
35
|
+
const netReturn = impliedAprDiff.sub(totalFees);
|
|
36
36
|
const twoOverPerpLev = boros_offchain_math_1.FixedX18.fromNumber(2 / perpLeverage);
|
|
37
37
|
const denominator = twoOverPerpLev.add(borosMargin);
|
|
38
38
|
const leverageFactor = boros_offchain_math_1.FixedX18.ONE.divDown(denominator);
|
|
@@ -65,12 +65,13 @@ function calculateStrategy(input) {
|
|
|
65
65
|
}
|
|
66
66
|
function calculateStrategyAprFromStrategy(params) {
|
|
67
67
|
const { strategy, perpLeverage, borosMargin, exchangeFee1 = 0.0005, exchangeFee2 = 0.0005, borosTradeFee = 0.0005, borosSettlementFee = 0.002, } = params;
|
|
68
|
+
const daysToMaturity = (0, strategyUtils_1.calculateDaysToMaturity)((0, strategyUtils_1.getMaturity)(strategy.longMarket.market));
|
|
68
69
|
return calculateStrategyFixedApr({
|
|
69
70
|
perpLeverage,
|
|
70
|
-
daysToMaturity
|
|
71
|
+
daysToMaturity,
|
|
71
72
|
borosMargin,
|
|
72
|
-
impliedApr1: strategy.longMarket.
|
|
73
|
-
impliedApr2: strategy.shortMarket.
|
|
73
|
+
impliedApr1: (0, strategyUtils_1.getImpliedApr)(strategy.longMarket.market),
|
|
74
|
+
impliedApr2: (0, strategyUtils_1.getImpliedApr)(strategy.shortMarket.market),
|
|
74
75
|
exchangeFee1,
|
|
75
76
|
exchangeFee2,
|
|
76
77
|
borosTradeFee,
|
|
@@ -79,12 +80,14 @@ function calculateStrategyAprFromStrategy(params) {
|
|
|
79
80
|
}
|
|
80
81
|
function calculateAprTimesMaxLeverage(strategy, borosMargin, fees) {
|
|
81
82
|
const { exchangeFee1 = 0.0005, exchangeFee2 = 0.0005, borosTradeFee = 0.0005, borosSettlementFee = 0.002, } = fees ?? {};
|
|
83
|
+
const daysToMaturity = (0, strategyUtils_1.calculateDaysToMaturity)((0, strategyUtils_1.getMaturity)(strategy.longMarket.market));
|
|
84
|
+
const maxPerpLeverage = Math.min((0, strategyUtils_1.getMaxLeverage)(strategy.longMarket.market), (0, strategyUtils_1.getMaxLeverage)(strategy.shortMarket.market));
|
|
82
85
|
return calculateStrategyFixedApr({
|
|
83
|
-
perpLeverage:
|
|
84
|
-
daysToMaturity
|
|
86
|
+
perpLeverage: maxPerpLeverage,
|
|
87
|
+
daysToMaturity,
|
|
85
88
|
borosMargin,
|
|
86
|
-
impliedApr1: strategy.longMarket.
|
|
87
|
-
impliedApr2: strategy.shortMarket.
|
|
89
|
+
impliedApr1: (0, strategyUtils_1.getImpliedApr)(strategy.longMarket.market),
|
|
90
|
+
impliedApr2: (0, strategyUtils_1.getImpliedApr)(strategy.shortMarket.market),
|
|
88
91
|
exchangeFee1,
|
|
89
92
|
exchangeFee2,
|
|
90
93
|
borosTradeFee,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategyApr.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyApr.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"strategyApr.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyApr.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,20 +4,24 @@ exports.generateExecutionPlan = generateExecutionPlan;
|
|
|
4
4
|
exports.getExecutionStepsSummary = getExecutionStepsSummary;
|
|
5
5
|
exports.formatExecutionStepsForUI = formatExecutionStepsForUI;
|
|
6
6
|
exports.calculateCapitalAllocation = calculateCapitalAllocation;
|
|
7
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
7
8
|
function generateExecutionPlan(params) {
|
|
8
9
|
const { strategy, totalCapital, perpLeverage, borosMargin } = params;
|
|
9
10
|
const positionSizePerLeg = totalCapital / (2 / perpLeverage + borosMargin);
|
|
10
11
|
const yuSize = positionSizePerLeg;
|
|
12
|
+
const asset = (0, strategyUtils_1.getAssetSymbol)(strategy.longMarket.market);
|
|
13
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(strategy.longMarket.market);
|
|
14
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(strategy.shortMarket.market);
|
|
11
15
|
const steps = [
|
|
12
16
|
{
|
|
13
17
|
stepNumber: 1,
|
|
14
18
|
action: 'long',
|
|
15
19
|
platform: 'perp',
|
|
16
|
-
exchange:
|
|
17
|
-
description: `Long ${
|
|
20
|
+
exchange: longExchange,
|
|
21
|
+
description: `Long ${asset} on ${longExchange} perpetual`,
|
|
18
22
|
details: {
|
|
19
|
-
asset
|
|
20
|
-
size: `${positionSizePerLeg} ${
|
|
23
|
+
asset,
|
|
24
|
+
size: `${positionSizePerLeg} ${asset}`,
|
|
21
25
|
marketType: 'perpetual',
|
|
22
26
|
},
|
|
23
27
|
},
|
|
@@ -25,11 +29,11 @@ function generateExecutionPlan(params) {
|
|
|
25
29
|
stepNumber: 2,
|
|
26
30
|
action: 'short',
|
|
27
31
|
platform: 'perp',
|
|
28
|
-
exchange:
|
|
29
|
-
description: `Short ${
|
|
32
|
+
exchange: shortExchange,
|
|
33
|
+
description: `Short ${asset} on ${shortExchange} perpetual`,
|
|
30
34
|
details: {
|
|
31
|
-
asset
|
|
32
|
-
size: `${positionSizePerLeg} ${
|
|
35
|
+
asset,
|
|
36
|
+
size: `${positionSizePerLeg} ${asset}`,
|
|
33
37
|
marketType: 'perpetual',
|
|
34
38
|
},
|
|
35
39
|
},
|
|
@@ -37,28 +41,28 @@ function generateExecutionPlan(params) {
|
|
|
37
41
|
stepNumber: 3,
|
|
38
42
|
action: 'long',
|
|
39
43
|
platform: 'boros',
|
|
40
|
-
exchange:
|
|
41
|
-
description: `Long ${
|
|
42
|
-
marketId: strategy.longMarket.
|
|
43
|
-
ammId: strategy.longMarket.
|
|
44
|
+
exchange: longExchange,
|
|
45
|
+
description: `Long ${asset} YU on Boros ${longExchange} market`,
|
|
46
|
+
marketId: (0, strategyUtils_1.getMarketId)(strategy.longMarket.market),
|
|
47
|
+
ammId: (0, strategyUtils_1.getAmmId)(strategy.longMarket.market),
|
|
44
48
|
details: {
|
|
45
|
-
asset
|
|
46
|
-
size: `${yuSize} YU ${
|
|
47
|
-
marketType: `Boros ${
|
|
49
|
+
asset,
|
|
50
|
+
size: `${yuSize} YU ${asset}`,
|
|
51
|
+
marketType: `Boros ${longExchange} market`,
|
|
48
52
|
},
|
|
49
53
|
},
|
|
50
54
|
{
|
|
51
55
|
stepNumber: 4,
|
|
52
56
|
action: 'short',
|
|
53
57
|
platform: 'boros',
|
|
54
|
-
exchange:
|
|
55
|
-
description: `Short ${
|
|
56
|
-
marketId: strategy.shortMarket.
|
|
57
|
-
ammId: strategy.shortMarket.
|
|
58
|
+
exchange: shortExchange,
|
|
59
|
+
description: `Short ${asset} YU on Boros ${shortExchange} market`,
|
|
60
|
+
marketId: (0, strategyUtils_1.getMarketId)(strategy.shortMarket.market),
|
|
61
|
+
ammId: (0, strategyUtils_1.getAmmId)(strategy.shortMarket.market),
|
|
58
62
|
details: {
|
|
59
|
-
asset
|
|
60
|
-
size: `${yuSize} YU ${
|
|
61
|
-
marketType: `Boros ${
|
|
63
|
+
asset,
|
|
64
|
+
size: `${yuSize} YU ${asset}`,
|
|
65
|
+
marketType: `Boros ${shortExchange} market`,
|
|
62
66
|
},
|
|
63
67
|
},
|
|
64
68
|
];
|
|
@@ -79,37 +83,40 @@ function getExecutionStepsSummary(plan) {
|
|
|
79
83
|
function formatExecutionStepsForUI(plan) {
|
|
80
84
|
const { strategy, totalCapitalRequired, perpLeverage, borosMargin } = plan;
|
|
81
85
|
const positionSize = totalCapitalRequired / (2 / perpLeverage + borosMargin);
|
|
86
|
+
const asset = (0, strategyUtils_1.getAssetSymbol)(strategy.longMarket.market);
|
|
87
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(strategy.longMarket.market);
|
|
88
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(strategy.shortMarket.market);
|
|
82
89
|
return [
|
|
83
90
|
{
|
|
84
91
|
action: 'Long',
|
|
85
|
-
size: `${positionSize} ${
|
|
86
|
-
description: `on ${
|
|
92
|
+
size: `${positionSize} ${asset}`,
|
|
93
|
+
description: `on ${longExchange} ${asset} perpetual`,
|
|
87
94
|
platform: 'perp',
|
|
88
|
-
exchange:
|
|
95
|
+
exchange: longExchange,
|
|
89
96
|
clickable: true,
|
|
90
97
|
},
|
|
91
98
|
{
|
|
92
99
|
action: 'Short',
|
|
93
|
-
size: `${positionSize} ${
|
|
94
|
-
description: `on ${
|
|
100
|
+
size: `${positionSize} ${asset}`,
|
|
101
|
+
description: `on ${shortExchange} ${asset} perpetual`,
|
|
95
102
|
platform: 'perp',
|
|
96
|
-
exchange:
|
|
103
|
+
exchange: shortExchange,
|
|
97
104
|
clickable: true,
|
|
98
105
|
},
|
|
99
106
|
{
|
|
100
107
|
action: 'Long',
|
|
101
|
-
size: `${positionSize} YU ${
|
|
102
|
-
description: `on Boros ${
|
|
108
|
+
size: `${positionSize} YU ${asset}`,
|
|
109
|
+
description: `on Boros ${longExchange} ${asset} market`,
|
|
103
110
|
platform: 'boros',
|
|
104
|
-
exchange:
|
|
111
|
+
exchange: longExchange,
|
|
105
112
|
clickable: true,
|
|
106
113
|
},
|
|
107
114
|
{
|
|
108
115
|
action: 'Short',
|
|
109
|
-
size: `${positionSize} YU ${
|
|
110
|
-
description: `on Boros ${
|
|
116
|
+
size: `${positionSize} YU ${asset}`,
|
|
117
|
+
description: `on Boros ${shortExchange} ${asset} market`,
|
|
111
118
|
platform: 'boros',
|
|
112
|
-
exchange:
|
|
119
|
+
exchange: shortExchange,
|
|
113
120
|
clickable: true,
|
|
114
121
|
},
|
|
115
122
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategyExecution.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyExecution.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"strategyExecution.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyExecution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MarketResponse } from '../../backend/secrettune/BorosCoreSDK';
|
|
2
|
+
import type { GetStrategiesParams, GetStrategiesResult, Strategy } from './types';
|
|
2
3
|
export declare function findStrategies(params?: GetStrategiesParams): Promise<GetStrategiesResult>;
|
|
3
4
|
export declare function findStrategiesByAsset(params: GetStrategiesParams & {
|
|
4
5
|
asset: string;
|
|
@@ -9,3 +10,4 @@ export declare function findStrategiesByMaturity(params: GetStrategiesParams & {
|
|
|
9
10
|
export declare function findStrategiesByExchanges(params: GetStrategiesParams & {
|
|
10
11
|
exchanges: [string, string];
|
|
11
12
|
}): Promise<GetStrategiesResult>;
|
|
13
|
+
export declare function getStrategyByMarketIds(marketId1: number, marketId2: number, markets?: MarketResponse[]): Promise<Strategy | null>;
|
|
@@ -4,8 +4,9 @@ exports.findStrategies = findStrategies;
|
|
|
4
4
|
exports.findStrategiesByAsset = findStrategiesByAsset;
|
|
5
5
|
exports.findStrategiesByMaturity = findStrategiesByMaturity;
|
|
6
6
|
exports.findStrategiesByExchanges = findStrategiesByExchanges;
|
|
7
|
+
exports.getStrategyByMarketIds = getStrategyByMarketIds;
|
|
7
8
|
const module_1 = require("../../backend/secrettune/module");
|
|
8
|
-
const
|
|
9
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
9
10
|
async function fetchMarkets() {
|
|
10
11
|
const sdk = (0, module_1.getCoreSdk)();
|
|
11
12
|
const { data } = await sdk.markets.marketsControllerGetMarkets({});
|
|
@@ -15,18 +16,7 @@ function toStrategyMarket(market) {
|
|
|
15
16
|
if (!market.metadata) {
|
|
16
17
|
return null;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
marketId: market.marketId,
|
|
21
|
-
address: market.address,
|
|
22
|
-
exchange: market.metadata.platformName,
|
|
23
|
-
impliedApr,
|
|
24
|
-
maxLeverage: market.metadata.maxLeverage,
|
|
25
|
-
ammId: market.metadata.ammId,
|
|
26
|
-
ammAddress: market.metadata.ammAddress,
|
|
27
|
-
marketName: market.metadata.marketName,
|
|
28
|
-
rawMarket: market,
|
|
29
|
-
};
|
|
19
|
+
return { market };
|
|
30
20
|
}
|
|
31
21
|
function createMarketGroupKey(market) {
|
|
32
22
|
if (!market.metadata?.assetSymbol) {
|
|
@@ -84,12 +74,14 @@ async function findStrategies(params) {
|
|
|
84
74
|
const strategyMarket2 = toStrategyMarket(market2);
|
|
85
75
|
if (!strategyMarket1 || !strategyMarket2)
|
|
86
76
|
continue;
|
|
87
|
-
const
|
|
77
|
+
const impliedApr1 = (0, strategyUtils_1.getImpliedApr)(strategyMarket1.market);
|
|
78
|
+
const impliedApr2 = (0, strategyUtils_1.getImpliedApr)(strategyMarket2.market);
|
|
79
|
+
const impliedAprSpread = Math.abs(impliedApr1 - impliedApr2);
|
|
88
80
|
if (impliedAprSpread < minImpliedAprSpread)
|
|
89
81
|
continue;
|
|
90
82
|
let longMarket;
|
|
91
83
|
let shortMarket;
|
|
92
|
-
if (
|
|
84
|
+
if (impliedApr1 >= impliedApr2) {
|
|
93
85
|
longMarket = strategyMarket1;
|
|
94
86
|
shortMarket = strategyMarket2;
|
|
95
87
|
}
|
|
@@ -97,22 +89,15 @@ async function findStrategies(params) {
|
|
|
97
89
|
longMarket = strategyMarket2;
|
|
98
90
|
shortMarket = strategyMarket1;
|
|
99
91
|
}
|
|
100
|
-
const asset =
|
|
101
|
-
const collateralTokenId =
|
|
102
|
-
const maturity =
|
|
103
|
-
const
|
|
104
|
-
const
|
|
92
|
+
const asset = (0, strategyUtils_1.getAssetSymbol)(longMarket.market);
|
|
93
|
+
const collateralTokenId = (0, strategyUtils_1.getCollateralTokenId)(longMarket.market);
|
|
94
|
+
const maturity = (0, strategyUtils_1.getMaturity)(longMarket.market);
|
|
95
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(longMarket.market);
|
|
96
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(shortMarket.market);
|
|
105
97
|
const strategy = {
|
|
106
|
-
id: createStrategyId(asset, collateralTokenId, maturity,
|
|
107
|
-
asset,
|
|
108
|
-
collateralTokenId,
|
|
109
|
-
maturity,
|
|
110
|
-
timeToMaturity,
|
|
111
|
-
daysToMaturity,
|
|
98
|
+
id: createStrategyId(asset, collateralTokenId, maturity, longExchange, shortExchange),
|
|
112
99
|
longMarket,
|
|
113
100
|
shortMarket,
|
|
114
|
-
impliedAprSpread,
|
|
115
|
-
maxPerpLeverage: Math.min(longMarket.maxLeverage, shortMarket.maxLeverage),
|
|
116
101
|
};
|
|
117
102
|
strategies.push(strategy);
|
|
118
103
|
}
|
|
@@ -120,7 +105,11 @@ async function findStrategies(params) {
|
|
|
120
105
|
}
|
|
121
106
|
}
|
|
122
107
|
}
|
|
123
|
-
strategies.sort((a, b) =>
|
|
108
|
+
strategies.sort((a, b) => {
|
|
109
|
+
const spreadA = Math.abs((0, strategyUtils_1.getImpliedApr)(a.longMarket.market) - (0, strategyUtils_1.getImpliedApr)(a.shortMarket.market));
|
|
110
|
+
const spreadB = Math.abs((0, strategyUtils_1.getImpliedApr)(b.longMarket.market) - (0, strategyUtils_1.getImpliedApr)(b.shortMarket.market));
|
|
111
|
+
return spreadB - spreadA;
|
|
112
|
+
});
|
|
124
113
|
return {
|
|
125
114
|
strategies,
|
|
126
115
|
totalCount: strategies.length,
|
|
@@ -129,7 +118,7 @@ async function findStrategies(params) {
|
|
|
129
118
|
async function findStrategiesByAsset(params) {
|
|
130
119
|
const { asset, ...rest } = params;
|
|
131
120
|
const result = await findStrategies(rest);
|
|
132
|
-
const filtered = result.strategies.filter((s) => s.
|
|
121
|
+
const filtered = result.strategies.filter((s) => (0, strategyUtils_1.getAssetSymbol)(s.longMarket.market).toUpperCase() === asset.toUpperCase());
|
|
133
122
|
return {
|
|
134
123
|
strategies: filtered,
|
|
135
124
|
totalCount: filtered.length,
|
|
@@ -138,7 +127,7 @@ async function findStrategiesByAsset(params) {
|
|
|
138
127
|
async function findStrategiesByMaturity(params) {
|
|
139
128
|
const { maturity, ...rest } = params;
|
|
140
129
|
const result = await findStrategies(rest);
|
|
141
|
-
const filtered = result.strategies.filter((s) => s.
|
|
130
|
+
const filtered = result.strategies.filter((s) => (0, strategyUtils_1.getMaturity)(s.longMarket.market) === maturity);
|
|
142
131
|
return {
|
|
143
132
|
strategies: filtered,
|
|
144
133
|
totalCount: filtered.length,
|
|
@@ -149,8 +138,8 @@ async function findStrategiesByExchanges(params) {
|
|
|
149
138
|
const [exchange1, exchange2] = exchanges.map((e) => e.toLowerCase());
|
|
150
139
|
const result = await findStrategies(rest);
|
|
151
140
|
const filtered = result.strategies.filter((s) => {
|
|
152
|
-
const longExchange = s.longMarket.
|
|
153
|
-
const shortExchange = s.shortMarket.
|
|
141
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(s.longMarket.market).toLowerCase();
|
|
142
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(s.shortMarket.market).toLowerCase();
|
|
154
143
|
return ((longExchange === exchange1 && shortExchange === exchange2) ||
|
|
155
144
|
(longExchange === exchange2 && shortExchange === exchange1));
|
|
156
145
|
});
|
|
@@ -159,4 +148,54 @@ async function findStrategiesByExchanges(params) {
|
|
|
159
148
|
totalCount: filtered.length,
|
|
160
149
|
};
|
|
161
150
|
}
|
|
151
|
+
async function getStrategyByMarketIds(marketId1, marketId2, markets) {
|
|
152
|
+
const allMarkets = markets ?? (await fetchMarkets());
|
|
153
|
+
const market1 = allMarkets.find((m) => m.marketId === marketId1);
|
|
154
|
+
const market2 = allMarkets.find((m) => m.marketId === marketId2);
|
|
155
|
+
if (!market1 || !market2) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
if (!market1.metadata?.assetSymbol || !market2.metadata?.assetSymbol) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
if (!market1.metadata?.platformName || !market2.metadata?.platformName) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
if (market1.metadata.assetSymbol !== market2.metadata.assetSymbol) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
if (market1.tokenId !== market2.tokenId) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
if (market1.imData.maturity !== market2.imData.maturity) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const strategyMarket1 = toStrategyMarket(market1);
|
|
174
|
+
const strategyMarket2 = toStrategyMarket(market2);
|
|
175
|
+
if (!strategyMarket1 || !strategyMarket2) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
let longMarket;
|
|
179
|
+
let shortMarket;
|
|
180
|
+
const impliedApr1 = (0, strategyUtils_1.getImpliedApr)(strategyMarket1.market);
|
|
181
|
+
const impliedApr2 = (0, strategyUtils_1.getImpliedApr)(strategyMarket2.market);
|
|
182
|
+
if (impliedApr1 >= impliedApr2) {
|
|
183
|
+
longMarket = strategyMarket1;
|
|
184
|
+
shortMarket = strategyMarket2;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
longMarket = strategyMarket2;
|
|
188
|
+
shortMarket = strategyMarket1;
|
|
189
|
+
}
|
|
190
|
+
const asset = (0, strategyUtils_1.getAssetSymbol)(longMarket.market);
|
|
191
|
+
const collateralTokenId = (0, strategyUtils_1.getCollateralTokenId)(longMarket.market);
|
|
192
|
+
const maturity = (0, strategyUtils_1.getMaturity)(longMarket.market);
|
|
193
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(longMarket.market);
|
|
194
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(shortMarket.market);
|
|
195
|
+
return {
|
|
196
|
+
id: createStrategyId(asset, collateralTokenId, maturity, longExchange, shortExchange),
|
|
197
|
+
longMarket,
|
|
198
|
+
shortMarket,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
162
201
|
//# sourceMappingURL=strategyFinder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategyFinder.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyFinder.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"strategyFinder.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyFinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MarketResponse } from '../../backend/secrettune/BorosCoreSDK';
|
|
2
|
+
export declare function getMarketId(market: MarketResponse): number;
|
|
3
|
+
export declare function getImpliedApr(market: MarketResponse): number;
|
|
4
|
+
export declare function getMaxLeverage(market: MarketResponse): number;
|
|
5
|
+
export declare function getPlatformName(market: MarketResponse): string;
|
|
6
|
+
export declare function getAssetSymbol(market: MarketResponse): string;
|
|
7
|
+
export declare function getMaturity(market: MarketResponse): number;
|
|
8
|
+
export declare function getCollateralTokenId(market: MarketResponse): number;
|
|
9
|
+
export declare function getAmmId(market: MarketResponse): number | undefined;
|
|
10
|
+
export declare function calculateTimeToMaturity(maturityTime: number, currentTime?: number): number;
|
|
11
|
+
export declare function calculateDaysToMaturity(maturityTime: number, currentTime?: number): number;
|
|
12
|
+
export declare function calculateMaturityInfo(maturityTime: number, currentTime?: number): {
|
|
13
|
+
timeToMaturity: number;
|
|
14
|
+
daysToMaturity: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function calculateImpliedAprSpread(impliedApr1: number, impliedApr2: number): number;
|
|
17
|
+
export declare function calculateMaxPerpLeverage(maxLeverage1: number, maxLeverage2: number): number;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMarketId = getMarketId;
|
|
4
|
+
exports.getImpliedApr = getImpliedApr;
|
|
5
|
+
exports.getMaxLeverage = getMaxLeverage;
|
|
6
|
+
exports.getPlatformName = getPlatformName;
|
|
7
|
+
exports.getAssetSymbol = getAssetSymbol;
|
|
8
|
+
exports.getMaturity = getMaturity;
|
|
9
|
+
exports.getCollateralTokenId = getCollateralTokenId;
|
|
10
|
+
exports.getAmmId = getAmmId;
|
|
11
|
+
exports.calculateTimeToMaturity = calculateTimeToMaturity;
|
|
12
|
+
exports.calculateDaysToMaturity = calculateDaysToMaturity;
|
|
13
|
+
exports.calculateMaturityInfo = calculateMaturityInfo;
|
|
14
|
+
exports.calculateImpliedAprSpread = calculateImpliedAprSpread;
|
|
15
|
+
exports.calculateMaxPerpLeverage = calculateMaxPerpLeverage;
|
|
16
|
+
const SECONDS_PER_DAY = 86400;
|
|
17
|
+
function getMarketId(market) {
|
|
18
|
+
return market.marketId;
|
|
19
|
+
}
|
|
20
|
+
function getImpliedApr(market) {
|
|
21
|
+
return market.data?.ammImpliedApr ?? market.data?.midApr ?? 0;
|
|
22
|
+
}
|
|
23
|
+
function getMaxLeverage(market) {
|
|
24
|
+
return market.metadata?.maxLeverage ?? 0;
|
|
25
|
+
}
|
|
26
|
+
function getPlatformName(market) {
|
|
27
|
+
return market.metadata?.platformName ?? '';
|
|
28
|
+
}
|
|
29
|
+
function getAssetSymbol(market) {
|
|
30
|
+
return market.metadata?.assetSymbol ?? '';
|
|
31
|
+
}
|
|
32
|
+
function getMaturity(market) {
|
|
33
|
+
return market.imData.maturity;
|
|
34
|
+
}
|
|
35
|
+
function getCollateralTokenId(market) {
|
|
36
|
+
return market.tokenId;
|
|
37
|
+
}
|
|
38
|
+
function getAmmId(market) {
|
|
39
|
+
return market.metadata?.ammId;
|
|
40
|
+
}
|
|
41
|
+
function calculateTimeToMaturity(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
42
|
+
return Math.max(0, maturityTime - currentTime);
|
|
43
|
+
}
|
|
44
|
+
function calculateDaysToMaturity(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
45
|
+
const timeToMaturity = calculateTimeToMaturity(maturityTime, currentTime);
|
|
46
|
+
return Math.max(0, Math.ceil(timeToMaturity / SECONDS_PER_DAY));
|
|
47
|
+
}
|
|
48
|
+
function calculateMaturityInfo(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
49
|
+
const timeToMaturity = calculateTimeToMaturity(maturityTime, currentTime);
|
|
50
|
+
const daysToMaturity = Math.max(0, Math.ceil(timeToMaturity / SECONDS_PER_DAY));
|
|
51
|
+
return { timeToMaturity, daysToMaturity };
|
|
52
|
+
}
|
|
53
|
+
function calculateImpliedAprSpread(impliedApr1, impliedApr2) {
|
|
54
|
+
return Math.abs(impliedApr1 - impliedApr2);
|
|
55
|
+
}
|
|
56
|
+
function calculateMaxPerpLeverage(maxLeverage1, maxLeverage2) {
|
|
57
|
+
return Math.min(maxLeverage1, maxLeverage2);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=strategyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyUtils.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyUtils.ts"],"names":[],"mappings":";;AAWA,kCAEC;AAMD,sCAEC;AAKD,wCAEC;AAKD,0CAEC;AAKD,wCAEC;AAKD,kCAEC;AAKD,oDAEC;AAKD,4BAEC;AAaD,0DAKC;AASD,0DAMC;AASD,sDAUC;AASD,8DAKC;AASD,4DAKC;AA7ID,MAAM,eAAe,GAAG,KAAK,CAAC;AAS9B,SAAgB,WAAW,CAAC,MAAsB;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAMD,SAAgB,aAAa,CAAC,MAAsB;IAClD,OAAO,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;AAChE,CAAC;AAKD,SAAgB,cAAc,CAAC,MAAsB;IACnD,OAAO,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC;AAC3C,CAAC;AAKD,SAAgB,eAAe,CAAC,MAAsB;IACpD,OAAO,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;AAC7C,CAAC;AAKD,SAAgB,cAAc,CAAC,MAAsB;IACnD,OAAO,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC;AAC5C,CAAC;AAKD,SAAgB,WAAW,CAAC,MAAsB;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAChC,CAAC;AAKD,SAAgB,oBAAoB,CAAC,MAAsB;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAKD,SAAgB,QAAQ,CAAC,MAAsB;IAC7C,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;AAChC,CAAC;AAaD,SAAgB,uBAAuB,CACrC,YAAoB,EACpB,cAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC;AACjD,CAAC;AASD,SAAgB,uBAAuB,CACrC,YAAoB,EACpB,cAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEnD,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC;AAClE,CAAC;AASD,SAAgB,qBAAqB,CACnC,YAAoB,EACpB,cAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAKnD,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC;IAChF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AASD,SAAgB,yBAAyB,CACvC,WAAmB,EACnB,WAAmB;IAEnB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;AAC7C,CAAC;AASD,SAAgB,wBAAwB,CACtC,YAAoB,EACpB,YAAoB;IAEpB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1,26 +1,11 @@
|
|
|
1
1
|
import type { MarketResponse } from '../../backend/secrettune/BorosCoreSDK';
|
|
2
2
|
export type StrategyMarket = {
|
|
3
|
-
|
|
4
|
-
address: string;
|
|
5
|
-
exchange: string;
|
|
6
|
-
impliedApr: number;
|
|
7
|
-
maxLeverage: number;
|
|
8
|
-
ammId?: number;
|
|
9
|
-
ammAddress?: string;
|
|
10
|
-
marketName?: string;
|
|
11
|
-
rawMarket: MarketResponse;
|
|
3
|
+
market: MarketResponse;
|
|
12
4
|
};
|
|
13
5
|
export type Strategy = {
|
|
14
6
|
id: string;
|
|
15
|
-
asset: string;
|
|
16
|
-
collateralTokenId: number;
|
|
17
|
-
maturity: number;
|
|
18
|
-
timeToMaturity: number;
|
|
19
|
-
daysToMaturity: number;
|
|
20
7
|
longMarket: StrategyMarket;
|
|
21
8
|
shortMarket: StrategyMarket;
|
|
22
|
-
impliedAprSpread: number;
|
|
23
|
-
maxPerpLeverage: number;
|
|
24
9
|
};
|
|
25
10
|
export type StrategyExecutionStep = {
|
|
26
11
|
stepNumber: number;
|