@pendle/sdk-boros 1.1.33 → 1.1.35
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/CHANGELOG.md +13 -0
- package/dist/backend/secrettune/BorosCoreSDK.d.ts +144 -19
- package/dist/backend/secrettune/BorosCoreSDK.js +62 -8
- package/dist/backend/secrettune/BorosCoreSDK.js.map +1 -1
- package/dist/backend/secrettune/BorosSendTxsBotSDK.d.ts +2 -0
- package/dist/backend/secrettune/BorosSendTxsBotSDK.js.map +1 -1
- package/dist/backend/secrettune/PendleV2SDK.d.ts +67 -2
- package/dist/backend/secrettune/PendleV2SDK.js +16 -0
- package/dist/backend/secrettune/PendleV2SDK.js.map +1 -1
- package/dist/entities/Calculator/exchangeFees.d.ts +47 -0
- package/dist/entities/Calculator/exchangeFees.js +93 -0
- package/dist/entities/Calculator/exchangeFees.js.map +1 -0
- package/dist/entities/Calculator/index.d.ts +7 -0
- package/dist/entities/Calculator/index.js +24 -0
- package/dist/entities/Calculator/index.js.map +1 -0
- package/dist/entities/Calculator/marginCalculator.d.ts +13 -0
- package/dist/entities/Calculator/marginCalculator.js +64 -0
- package/dist/entities/Calculator/marginCalculator.js.map +1 -0
- package/dist/entities/Calculator/strategyApr.d.ts +30 -0
- package/dist/entities/Calculator/strategyApr.js +98 -0
- package/dist/entities/Calculator/strategyApr.js.map +1 -0
- package/dist/entities/Calculator/strategyExecution.d.ts +28 -0
- package/dist/entities/Calculator/strategyExecution.js +137 -0
- package/dist/entities/Calculator/strategyExecution.js.map +1 -0
- package/dist/entities/Calculator/strategyFinder.d.ts +13 -0
- package/dist/entities/Calculator/strategyFinder.js +201 -0
- package/dist/entities/Calculator/strategyFinder.js.map +1 -0
- package/dist/entities/Calculator/strategyUtils.d.ts +19 -0
- package/dist/entities/Calculator/strategyUtils.js +72 -0
- package/dist/entities/Calculator/strategyUtils.js.map +1 -0
- package/dist/entities/Calculator/types.d.ts +70 -0
- package/dist/entities/Calculator/types.js +3 -0
- package/dist/entities/Calculator/types.js.map +1 -0
- package/dist/entities/crossChainDeposit/AggregatorHelperErrors.d.ts +3 -3
- package/dist/entities/crossChainDeposit/aggregators/Bungee/index.js +3 -1
- package/dist/entities/crossChainDeposit/aggregators/Bungee/index.js.map +1 -1
- package/dist/entities/crossChainDeposit/aggregators/Bungee/types.d.ts +2 -1
- package/dist/entities/crossChainDeposit/aggregators/Bungee/types.js +3 -2
- package/dist/entities/crossChainDeposit/aggregators/Bungee/types.js.map +1 -1
- package/dist/entities/crossChainDeposit/helpers/autoSlippage.js +13 -5
- package/dist/entities/crossChainDeposit/helpers/autoSlippage.js.map +1 -1
- package/dist/entities/index.d.ts +1 -0
- package/dist/entities/index.js +1 -0
- package/dist/entities/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FixedX18 } from '@pendle/boros-offchain-math';
|
|
2
|
+
import type { Strategy, StrategyCalculatorInput, StrategyCalculatorResult, StrategyFixedAprParams } from './types';
|
|
3
|
+
export declare function calculateStrategyFixedApr(params: StrategyFixedAprParams): number;
|
|
4
|
+
export declare function calculateStrategyFixedAprFixedX18(params: {
|
|
5
|
+
perpLeverage: number;
|
|
6
|
+
daysToMaturity: number;
|
|
7
|
+
borosMargin: FixedX18;
|
|
8
|
+
impliedApr1: FixedX18;
|
|
9
|
+
impliedApr2: FixedX18;
|
|
10
|
+
exchangeFee1: FixedX18;
|
|
11
|
+
exchangeFee2: FixedX18;
|
|
12
|
+
borosTradeFee: FixedX18;
|
|
13
|
+
borosSettlementFee: FixedX18;
|
|
14
|
+
}): FixedX18;
|
|
15
|
+
export declare function calculateStrategy(input: StrategyCalculatorInput): StrategyCalculatorResult;
|
|
16
|
+
export declare function calculateStrategyAprFromStrategy(params: {
|
|
17
|
+
strategy: Strategy;
|
|
18
|
+
perpLeverage: number;
|
|
19
|
+
borosMargin: number;
|
|
20
|
+
exchangeFee1?: number;
|
|
21
|
+
exchangeFee2?: number;
|
|
22
|
+
borosTradeFee?: number;
|
|
23
|
+
borosSettlementFee?: number;
|
|
24
|
+
}): number;
|
|
25
|
+
export declare function calculateAprTimesMaxLeverage(strategy: Strategy, borosMargin: number, fees?: {
|
|
26
|
+
exchangeFee1?: number;
|
|
27
|
+
exchangeFee2?: number;
|
|
28
|
+
borosTradeFee?: number;
|
|
29
|
+
borosSettlementFee?: number;
|
|
30
|
+
}, perpleverage?: number): number;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateStrategyFixedApr = calculateStrategyFixedApr;
|
|
4
|
+
exports.calculateStrategyFixedAprFixedX18 = calculateStrategyFixedAprFixedX18;
|
|
5
|
+
exports.calculateStrategy = calculateStrategy;
|
|
6
|
+
exports.calculateStrategyAprFromStrategy = calculateStrategyAprFromStrategy;
|
|
7
|
+
exports.calculateAprTimesMaxLeverage = calculateAprTimesMaxLeverage;
|
|
8
|
+
const boros_offchain_math_1 = require("@pendle/boros-offchain-math");
|
|
9
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
10
|
+
function calculateStrategyFixedApr(params) {
|
|
11
|
+
const { perpLeverage, daysToMaturity, borosMargin, impliedApr1, impliedApr2, exchangeFee1, exchangeFee2, borosTradeFee, borosSettlementFee, } = params;
|
|
12
|
+
if (daysToMaturity <= 0) {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
const impliedAprDiff = Math.abs(impliedApr1 - impliedApr2);
|
|
16
|
+
const annualizationFactor = 365 / daysToMaturity;
|
|
17
|
+
const annualizedExchangeFees = annualizationFactor * (exchangeFee1 + exchangeFee2);
|
|
18
|
+
const borosFees = 2 * (borosSettlementFee + borosTradeFee);
|
|
19
|
+
const totalFees = annualizedExchangeFees + borosFees;
|
|
20
|
+
const leverageFactor = 1 / (2 / perpLeverage + borosMargin);
|
|
21
|
+
const fixedApr = leverageFactor * (impliedAprDiff - totalFees);
|
|
22
|
+
return fixedApr;
|
|
23
|
+
}
|
|
24
|
+
function calculateStrategyFixedAprFixedX18(params) {
|
|
25
|
+
const { perpLeverage, daysToMaturity, borosMargin, impliedApr1, impliedApr2, exchangeFee1, exchangeFee2, borosTradeFee, borosSettlementFee, } = params;
|
|
26
|
+
if (daysToMaturity <= 0) {
|
|
27
|
+
return boros_offchain_math_1.FixedX18.ZERO;
|
|
28
|
+
}
|
|
29
|
+
const impliedAprDiff = impliedApr1.sub(impliedApr2).abs();
|
|
30
|
+
const annualizationFactor = boros_offchain_math_1.FixedX18.fromNumber(365 / daysToMaturity);
|
|
31
|
+
const two = boros_offchain_math_1.FixedX18.fromNumber(2);
|
|
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
|
+
const twoOverPerpLev = boros_offchain_math_1.FixedX18.fromNumber(2 / perpLeverage);
|
|
37
|
+
const denominator = twoOverPerpLev.add(borosMargin);
|
|
38
|
+
const leverageFactor = boros_offchain_math_1.FixedX18.ONE.divDown(denominator);
|
|
39
|
+
const fixedApr = leverageFactor.mulDown(netReturn);
|
|
40
|
+
return fixedApr;
|
|
41
|
+
}
|
|
42
|
+
function calculateStrategy(input) {
|
|
43
|
+
const { totalCapital, daysToMaturity, perpLeverage, borosMargin, impliedApr1, impliedApr2, exchangeFee1, exchangeFee2, borosTradeFee, borosSettlementFee, } = input;
|
|
44
|
+
const params = {
|
|
45
|
+
perpLeverage,
|
|
46
|
+
daysToMaturity,
|
|
47
|
+
borosMargin: borosMargin / 100,
|
|
48
|
+
impliedApr1: impliedApr1 / 100,
|
|
49
|
+
impliedApr2: impliedApr2 / 100,
|
|
50
|
+
exchangeFee1: exchangeFee1 / 100,
|
|
51
|
+
exchangeFee2: exchangeFee2 / 100,
|
|
52
|
+
borosTradeFee: borosTradeFee / 100,
|
|
53
|
+
borosSettlementFee: borosSettlementFee / 100,
|
|
54
|
+
};
|
|
55
|
+
const fixedApr = calculateStrategyFixedApr(params);
|
|
56
|
+
const roi = fixedApr * (daysToMaturity / 365);
|
|
57
|
+
const estimatedEarnings = totalCapital * roi;
|
|
58
|
+
const estimatedEarningsPerYear = totalCapital * fixedApr;
|
|
59
|
+
return {
|
|
60
|
+
fixedApr,
|
|
61
|
+
fixedAprPercentage: fixedApr * 100,
|
|
62
|
+
estimatedEarnings,
|
|
63
|
+
estimatedEarningsPerYear,
|
|
64
|
+
roi
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function calculateStrategyAprFromStrategy(params) {
|
|
68
|
+
const { strategy, perpLeverage, borosMargin, exchangeFee1 = 0.0005, exchangeFee2 = 0.0005, borosTradeFee = 0.0005, borosSettlementFee = 0.002, } = params;
|
|
69
|
+
const daysToMaturity = (0, strategyUtils_1.calculateDaysToMaturity)((0, strategyUtils_1.getMaturity)(strategy.longMarket.market));
|
|
70
|
+
return calculateStrategyFixedApr({
|
|
71
|
+
perpLeverage,
|
|
72
|
+
daysToMaturity,
|
|
73
|
+
borosMargin,
|
|
74
|
+
impliedApr1: (0, strategyUtils_1.getImpliedApr)(strategy.longMarket.market),
|
|
75
|
+
impliedApr2: (0, strategyUtils_1.getImpliedApr)(strategy.shortMarket.market),
|
|
76
|
+
exchangeFee1,
|
|
77
|
+
exchangeFee2,
|
|
78
|
+
borosTradeFee,
|
|
79
|
+
borosSettlementFee,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function calculateAprTimesMaxLeverage(strategy, borosMargin, fees, perpleverage) {
|
|
83
|
+
const { exchangeFee1 = 0.0005, exchangeFee2 = 0.0005, borosTradeFee = 0.0005, borosSettlementFee = 0.002, } = fees ?? {};
|
|
84
|
+
const daysToMaturity = (0, strategyUtils_1.calculateDaysToMaturity)((0, strategyUtils_1.getMaturity)(strategy.longMarket.market));
|
|
85
|
+
const maxPerpLeverage = perpleverage ?? Math.min((0, strategyUtils_1.getMaxPerpLeverage)(strategy.longMarket.market), (0, strategyUtils_1.getMaxPerpLeverage)(strategy.shortMarket.market));
|
|
86
|
+
return calculateStrategyFixedApr({
|
|
87
|
+
perpLeverage: maxPerpLeverage,
|
|
88
|
+
daysToMaturity,
|
|
89
|
+
borosMargin,
|
|
90
|
+
impliedApr1: (0, strategyUtils_1.getImpliedApr)(strategy.longMarket.market),
|
|
91
|
+
impliedApr2: (0, strategyUtils_1.getImpliedApr)(strategy.shortMarket.market),
|
|
92
|
+
exchangeFee1,
|
|
93
|
+
exchangeFee2,
|
|
94
|
+
borosTradeFee,
|
|
95
|
+
borosSettlementFee,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=strategyApr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyApr.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyApr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Strategy, StrategyExecutionPlan } from './types';
|
|
2
|
+
export type GenerateExecutionPlanParams = {
|
|
3
|
+
strategy: Strategy;
|
|
4
|
+
totalCapital: number;
|
|
5
|
+
perpLeverage: number;
|
|
6
|
+
borosMargin: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function generateExecutionPlan(params: GenerateExecutionPlanParams): StrategyExecutionPlan;
|
|
9
|
+
export declare function getExecutionStepsSummary(plan: StrategyExecutionPlan): string[];
|
|
10
|
+
export declare function formatExecutionStepsForUI(plan: StrategyExecutionPlan): Array<{
|
|
11
|
+
action: 'Long' | 'Short';
|
|
12
|
+
size: string;
|
|
13
|
+
description: string;
|
|
14
|
+
platform: 'perp' | 'boros';
|
|
15
|
+
exchange: string;
|
|
16
|
+
clickable: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function calculateCapitalAllocation(params: {
|
|
19
|
+
totalCapital: number;
|
|
20
|
+
perpLeverage: number;
|
|
21
|
+
liquidationThreshold?: number;
|
|
22
|
+
}): {
|
|
23
|
+
capitalPerPerpLeg: number;
|
|
24
|
+
capitalPerBorosLeg: number;
|
|
25
|
+
totalPerpCapital: number;
|
|
26
|
+
totalBorosCapital: number;
|
|
27
|
+
notionalExposurePerLeg: number;
|
|
28
|
+
};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateExecutionPlan = generateExecutionPlan;
|
|
4
|
+
exports.getExecutionStepsSummary = getExecutionStepsSummary;
|
|
5
|
+
exports.formatExecutionStepsForUI = formatExecutionStepsForUI;
|
|
6
|
+
exports.calculateCapitalAllocation = calculateCapitalAllocation;
|
|
7
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
8
|
+
function generateExecutionPlan(params) {
|
|
9
|
+
const { strategy, totalCapital, perpLeverage, borosMargin } = params;
|
|
10
|
+
const positionSizePerLeg = totalCapital / (2 / perpLeverage + borosMargin);
|
|
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);
|
|
15
|
+
const steps = [
|
|
16
|
+
{
|
|
17
|
+
stepNumber: 1,
|
|
18
|
+
action: 'long',
|
|
19
|
+
platform: 'perp',
|
|
20
|
+
exchange: longExchange,
|
|
21
|
+
description: `Long ${asset} on ${longExchange} perpetual`,
|
|
22
|
+
details: {
|
|
23
|
+
asset,
|
|
24
|
+
size: `${positionSizePerLeg} ${asset}`,
|
|
25
|
+
marketType: 'perpetual',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
stepNumber: 2,
|
|
30
|
+
action: 'short',
|
|
31
|
+
platform: 'perp',
|
|
32
|
+
exchange: shortExchange,
|
|
33
|
+
description: `Short ${asset} on ${shortExchange} perpetual`,
|
|
34
|
+
details: {
|
|
35
|
+
asset,
|
|
36
|
+
size: `${positionSizePerLeg} ${asset}`,
|
|
37
|
+
marketType: 'perpetual',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
stepNumber: 3,
|
|
42
|
+
action: 'long',
|
|
43
|
+
platform: 'boros',
|
|
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),
|
|
48
|
+
details: {
|
|
49
|
+
asset,
|
|
50
|
+
size: `${yuSize} YU ${asset}`,
|
|
51
|
+
marketType: `Boros ${longExchange} market`,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
stepNumber: 4,
|
|
56
|
+
action: 'short',
|
|
57
|
+
platform: 'boros',
|
|
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),
|
|
62
|
+
details: {
|
|
63
|
+
asset,
|
|
64
|
+
size: `${yuSize} YU ${asset}`,
|
|
65
|
+
marketType: `Boros ${shortExchange} market`,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
return {
|
|
70
|
+
strategy,
|
|
71
|
+
steps,
|
|
72
|
+
totalCapitalRequired: totalCapital,
|
|
73
|
+
perpLeverage,
|
|
74
|
+
borosMargin,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function getExecutionStepsSummary(plan) {
|
|
78
|
+
return plan.steps.map((step) => {
|
|
79
|
+
const actionText = step.action === 'long' ? 'Long' : 'Short';
|
|
80
|
+
return `${actionText} ${step.details.size} on ${step.details.marketType}`;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function formatExecutionStepsForUI(plan) {
|
|
84
|
+
const { strategy, totalCapitalRequired, perpLeverage, borosMargin } = plan;
|
|
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);
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
action: 'Long',
|
|
92
|
+
size: `${positionSize} ${asset}`,
|
|
93
|
+
description: `on ${longExchange} ${asset} perpetual`,
|
|
94
|
+
platform: 'perp',
|
|
95
|
+
exchange: longExchange,
|
|
96
|
+
clickable: true,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
action: 'Short',
|
|
100
|
+
size: `${positionSize} ${asset}`,
|
|
101
|
+
description: `on ${shortExchange} ${asset} perpetual`,
|
|
102
|
+
platform: 'perp',
|
|
103
|
+
exchange: shortExchange,
|
|
104
|
+
clickable: true,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
action: 'Long',
|
|
108
|
+
size: `${positionSize} YU ${asset}`,
|
|
109
|
+
description: `on Boros ${longExchange} ${asset} market`,
|
|
110
|
+
platform: 'boros',
|
|
111
|
+
exchange: longExchange,
|
|
112
|
+
clickable: true,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
action: 'Short',
|
|
116
|
+
size: `${positionSize} YU ${asset}`,
|
|
117
|
+
description: `on Boros ${shortExchange} ${asset} market`,
|
|
118
|
+
platform: 'boros',
|
|
119
|
+
exchange: shortExchange,
|
|
120
|
+
clickable: true,
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
}
|
|
124
|
+
function calculateCapitalAllocation(params) {
|
|
125
|
+
const { totalCapital, perpLeverage, liquidationThreshold } = params;
|
|
126
|
+
const capitalPerPerpLeg = totalCapital / 2;
|
|
127
|
+
const notionalExposurePerLeg = capitalPerPerpLeg * perpLeverage;
|
|
128
|
+
const capitalPerBorosLeg = 0;
|
|
129
|
+
return {
|
|
130
|
+
capitalPerPerpLeg,
|
|
131
|
+
capitalPerBorosLeg,
|
|
132
|
+
totalPerpCapital: totalCapital,
|
|
133
|
+
totalBorosCapital: 0,
|
|
134
|
+
notionalExposurePerLeg,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=strategyExecution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyExecution.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyExecution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MarketResponse } from '../../backend/secrettune/BorosCoreSDK';
|
|
2
|
+
import type { GetStrategiesParams, GetStrategiesResult, Strategy } from './types';
|
|
3
|
+
export declare function findStrategies(params?: GetStrategiesParams): Promise<GetStrategiesResult>;
|
|
4
|
+
export declare function findStrategiesByAsset(params: GetStrategiesParams & {
|
|
5
|
+
asset: string;
|
|
6
|
+
}): Promise<GetStrategiesResult>;
|
|
7
|
+
export declare function findStrategiesByMaturity(params: GetStrategiesParams & {
|
|
8
|
+
maturity: number;
|
|
9
|
+
}): Promise<GetStrategiesResult>;
|
|
10
|
+
export declare function findStrategiesByExchanges(params: GetStrategiesParams & {
|
|
11
|
+
exchanges: [string, string];
|
|
12
|
+
}): Promise<GetStrategiesResult>;
|
|
13
|
+
export declare function getStrategyByMarketIds(marketId1: number, marketId2: number, markets?: MarketResponse[]): Promise<Strategy | null>;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findStrategies = findStrategies;
|
|
4
|
+
exports.findStrategiesByAsset = findStrategiesByAsset;
|
|
5
|
+
exports.findStrategiesByMaturity = findStrategiesByMaturity;
|
|
6
|
+
exports.findStrategiesByExchanges = findStrategiesByExchanges;
|
|
7
|
+
exports.getStrategyByMarketIds = getStrategyByMarketIds;
|
|
8
|
+
const module_1 = require("../../backend/secrettune/module");
|
|
9
|
+
const strategyUtils_1 = require("./strategyUtils");
|
|
10
|
+
async function fetchMarkets() {
|
|
11
|
+
const sdk = (0, module_1.getCoreSdk)();
|
|
12
|
+
const { data } = await sdk.markets.marketsControllerGetMarkets({});
|
|
13
|
+
return data.results;
|
|
14
|
+
}
|
|
15
|
+
function toStrategyMarket(market) {
|
|
16
|
+
if (!market.metadata) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return { market };
|
|
20
|
+
}
|
|
21
|
+
function createMarketGroupKey(market) {
|
|
22
|
+
if (!market.metadata?.assetSymbol) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return `${market.metadata.assetSymbol}-${market.tokenId}-${market.imData.maturity}`;
|
|
26
|
+
}
|
|
27
|
+
function createStrategyId(asset, collateralTokenId, maturity, longExchange, shortExchange) {
|
|
28
|
+
return `${asset}-${collateralTokenId}-${maturity}-${longExchange}-${shortExchange}`;
|
|
29
|
+
}
|
|
30
|
+
async function findStrategies(params) {
|
|
31
|
+
const { markets: providedMarkets, minImpliedAprSpread = 0, excludeDevTest = true } = params ?? {};
|
|
32
|
+
const markets = providedMarkets ?? (await fetchMarkets());
|
|
33
|
+
const validMarkets = markets.filter((market) => {
|
|
34
|
+
if (!market.metadata?.assetSymbol)
|
|
35
|
+
return false;
|
|
36
|
+
if (!market.metadata?.platformName)
|
|
37
|
+
return false;
|
|
38
|
+
if (market.state === 'Paused' || market.state === 'Halted')
|
|
39
|
+
return false;
|
|
40
|
+
if (excludeDevTest && market.metadata.isDevTest)
|
|
41
|
+
return false;
|
|
42
|
+
return true;
|
|
43
|
+
});
|
|
44
|
+
const marketGroups = new Map();
|
|
45
|
+
for (const market of validMarkets) {
|
|
46
|
+
const key = createMarketGroupKey(market);
|
|
47
|
+
if (!key)
|
|
48
|
+
continue;
|
|
49
|
+
const group = marketGroups.get(key) ?? [];
|
|
50
|
+
group.push(market);
|
|
51
|
+
marketGroups.set(key, group);
|
|
52
|
+
}
|
|
53
|
+
const strategies = [];
|
|
54
|
+
for (const [, groupMarkets] of marketGroups) {
|
|
55
|
+
if (groupMarkets.length < 2)
|
|
56
|
+
continue;
|
|
57
|
+
const byExchange = new Map();
|
|
58
|
+
for (const market of groupMarkets) {
|
|
59
|
+
const exchange = market.metadata.platformName;
|
|
60
|
+
const exchangeMarkets = byExchange.get(exchange) ?? [];
|
|
61
|
+
exchangeMarkets.push(market);
|
|
62
|
+
byExchange.set(exchange, exchangeMarkets);
|
|
63
|
+
}
|
|
64
|
+
const exchanges = Array.from(byExchange.keys());
|
|
65
|
+
if (exchanges.length < 2)
|
|
66
|
+
continue;
|
|
67
|
+
for (let i = 0; i < exchanges.length; i++) {
|
|
68
|
+
for (let j = i + 1; j < exchanges.length; j++) {
|
|
69
|
+
const exchange1Markets = byExchange.get(exchanges[i]);
|
|
70
|
+
const exchange2Markets = byExchange.get(exchanges[j]);
|
|
71
|
+
for (const market1 of exchange1Markets) {
|
|
72
|
+
for (const market2 of exchange2Markets) {
|
|
73
|
+
const strategyMarket1 = toStrategyMarket(market1);
|
|
74
|
+
const strategyMarket2 = toStrategyMarket(market2);
|
|
75
|
+
if (!strategyMarket1 || !strategyMarket2)
|
|
76
|
+
continue;
|
|
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);
|
|
80
|
+
if (impliedAprSpread < minImpliedAprSpread)
|
|
81
|
+
continue;
|
|
82
|
+
let longMarket;
|
|
83
|
+
let shortMarket;
|
|
84
|
+
if (impliedApr1 <= impliedApr2) {
|
|
85
|
+
longMarket = strategyMarket1;
|
|
86
|
+
shortMarket = strategyMarket2;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
longMarket = strategyMarket2;
|
|
90
|
+
shortMarket = strategyMarket1;
|
|
91
|
+
}
|
|
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);
|
|
97
|
+
const strategy = {
|
|
98
|
+
id: createStrategyId(asset, collateralTokenId, maturity, longExchange, shortExchange),
|
|
99
|
+
longMarket,
|
|
100
|
+
shortMarket,
|
|
101
|
+
};
|
|
102
|
+
strategies.push(strategy);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
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
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
strategies,
|
|
115
|
+
totalCount: strategies.length,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
async function findStrategiesByAsset(params) {
|
|
119
|
+
const { asset, ...rest } = params;
|
|
120
|
+
const result = await findStrategies(rest);
|
|
121
|
+
const filtered = result.strategies.filter((s) => (0, strategyUtils_1.getAssetSymbol)(s.longMarket.market).toUpperCase() === asset.toUpperCase());
|
|
122
|
+
return {
|
|
123
|
+
strategies: filtered,
|
|
124
|
+
totalCount: filtered.length,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async function findStrategiesByMaturity(params) {
|
|
128
|
+
const { maturity, ...rest } = params;
|
|
129
|
+
const result = await findStrategies(rest);
|
|
130
|
+
const filtered = result.strategies.filter((s) => (0, strategyUtils_1.getMaturity)(s.longMarket.market) === maturity);
|
|
131
|
+
return {
|
|
132
|
+
strategies: filtered,
|
|
133
|
+
totalCount: filtered.length,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async function findStrategiesByExchanges(params) {
|
|
137
|
+
const { exchanges, ...rest } = params;
|
|
138
|
+
const [exchange1, exchange2] = exchanges.map((e) => e.toLowerCase());
|
|
139
|
+
const result = await findStrategies(rest);
|
|
140
|
+
const filtered = result.strategies.filter((s) => {
|
|
141
|
+
const longExchange = (0, strategyUtils_1.getPlatformName)(s.longMarket.market).toLowerCase();
|
|
142
|
+
const shortExchange = (0, strategyUtils_1.getPlatformName)(s.shortMarket.market).toLowerCase();
|
|
143
|
+
return ((longExchange === exchange1 && shortExchange === exchange2) ||
|
|
144
|
+
(longExchange === exchange2 && shortExchange === exchange1));
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
strategies: filtered,
|
|
148
|
+
totalCount: filtered.length,
|
|
149
|
+
};
|
|
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
|
+
}
|
|
201
|
+
//# sourceMappingURL=strategyFinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyFinder.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyFinder.ts"],"names":[],"mappings":";;AA8DA,wCAiHC;AAKD,sDAcC;AAKD,4DAYC;AAKD,8DAoBC;AAUD,wDA0EC;AA/TD,4DAA6D;AAE7D,mDAAoH;AAKpH,KAAK,UAAU,YAAY;IACzB,MAAM,GAAG,GAAG,IAAA,mBAAU,GAAE,CAAC;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAKD,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAKD,SAAS,oBAAoB,CAAC,MAAsB;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACtF,CAAC;AAKD,SAAS,gBAAgB,CACvB,KAAa,EACb,iBAAyB,EACzB,QAAgB,EAChB,YAAoB,EACpB,aAAqB;IAErB,OAAO,GAAG,KAAK,IAAI,iBAAiB,IAAI,QAAQ,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;AACtF,CAAC;AAgBM,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,mBAAmB,GAAG,CAAC,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAGlG,MAAM,OAAO,GAAG,eAAe,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAG1D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzE,IAAI,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAGH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEzD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,UAAU,GAAe,EAAE,CAAC;IAGlC,KAAK,MAAM,CAAC,EAAE,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;QAE5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAGtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC,YAAY,CAAC;YAC/C,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAGhD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAGnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC;gBACvD,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC;gBAGvD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;oBACvC,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;wBACvC,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAClD,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAElD,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe;4BAAE,SAAS;wBAEnD,MAAM,WAAW,GAAG,IAAA,6BAAa,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,WAAW,GAAG,IAAA,6BAAa,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;wBAG7D,IAAI,gBAAgB,GAAG,mBAAmB;4BAAE,SAAS;wBAKrD,IAAI,UAA0B,CAAC;wBAC/B,IAAI,WAA2B,CAAC;wBAEhC,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;4BAC/B,UAAU,GAAG,eAAe,CAAC;4BAC7B,WAAW,GAAG,eAAe,CAAC;wBAChC,CAAC;6BAAM,CAAC;4BACN,UAAU,GAAG,eAAe,CAAC;4BAC7B,WAAW,GAAG,eAAe,CAAC;wBAChC,CAAC;wBAED,MAAM,KAAK,GAAG,IAAA,8BAAc,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAChD,MAAM,iBAAiB,GAAG,IAAA,oCAAoB,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAClE,MAAM,QAAQ,GAAG,IAAA,2BAAW,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAChD,MAAM,YAAY,GAAG,IAAA,+BAAe,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBACxD,MAAM,aAAa,GAAG,IAAA,+BAAe,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAE1D,MAAM,QAAQ,GAAa;4BACzB,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC;4BACrF,UAAU;4BACV,WAAW;yBACZ,CAAC;wBAEF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAGD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAA,6BAAa,EAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAA,6BAAa,EAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAA,6BAAa,EAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAA,6BAAa,EAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,OAAO,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,MAAM;KAC9B,CAAC;AACJ,CAAC;AAKM,KAAK,UAAU,qBAAqB,CACzC,MAA+C;IAE/C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8BAAc,EAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CACjF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC;AAKM,KAAK,UAAU,wBAAwB,CAC5C,MAAkD;IAElD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,2BAAW,EAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC;IAEhG,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC;AAKM,KAAK,UAAU,yBAAyB,CAC7C,MAA6D;IAE7D,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,MAAM,YAAY,GAAG,IAAA,+BAAe,EAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACxE,MAAM,aAAa,GAAG,IAAA,+BAAe,EAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1E,OAAO,CACL,CAAC,YAAY,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC;YAC3D,CAAC,YAAY,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC,CAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC;AAUM,KAAK,UAAU,sBAAsB,CAC1C,SAAiB,EACjB,SAAiB,EACjB,OAA0B;IAG1B,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAGrD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAEjE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,UAA0B,CAAC;IAC/B,IAAI,WAA2B,CAAC;IAEhC,MAAM,WAAW,GAAG,IAAA,6BAAa,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAA,6BAAa,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,UAAU,GAAG,eAAe,CAAC;QAC7B,WAAW,GAAG,eAAe,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,eAAe,CAAC;QAC7B,WAAW,GAAG,eAAe,CAAC;IAChC,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,8BAAc,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,IAAA,oCAAoB,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAA,2BAAW,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAA,+BAAe,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,IAAA,+BAAe,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1D,OAAO;QACL,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC;QACrF,UAAU;QACV,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 getMaxPerpLeverage(market: MarketResponse): number;
|
|
6
|
+
export declare function getPlatformName(market: MarketResponse): string;
|
|
7
|
+
export declare function getAssetSymbol(market: MarketResponse): string;
|
|
8
|
+
export declare function getMaturity(market: MarketResponse): number;
|
|
9
|
+
export declare function getCollateralTokenId(market: MarketResponse): number;
|
|
10
|
+
export declare function getAmmId(market: MarketResponse): number | undefined;
|
|
11
|
+
export declare function calculateTimeToMaturity(maturityTime: number, currentTime?: number): number;
|
|
12
|
+
export declare function calculateDaysToMaturity(maturityTime: number, currentTime?: number): number;
|
|
13
|
+
export declare function calculateMaturityInfo(maturityTime: number, currentTime?: number): {
|
|
14
|
+
timeToMaturity: number;
|
|
15
|
+
daysToMaturity: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function calculateImpliedAprSpread(impliedApr1: number, impliedApr2: number): number;
|
|
18
|
+
export declare function calculateMaxPerpLeverage(market1: MarketResponse, market2: MarketResponse): number;
|
|
19
|
+
export declare function aprToApy(apr: number, daysToMaturity: number): number;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMarketId = getMarketId;
|
|
4
|
+
exports.getImpliedApr = getImpliedApr;
|
|
5
|
+
exports.getMaxLeverage = getMaxLeverage;
|
|
6
|
+
exports.getMaxPerpLeverage = getMaxPerpLeverage;
|
|
7
|
+
exports.getPlatformName = getPlatformName;
|
|
8
|
+
exports.getAssetSymbol = getAssetSymbol;
|
|
9
|
+
exports.getMaturity = getMaturity;
|
|
10
|
+
exports.getCollateralTokenId = getCollateralTokenId;
|
|
11
|
+
exports.getAmmId = getAmmId;
|
|
12
|
+
exports.calculateTimeToMaturity = calculateTimeToMaturity;
|
|
13
|
+
exports.calculateDaysToMaturity = calculateDaysToMaturity;
|
|
14
|
+
exports.calculateMaturityInfo = calculateMaturityInfo;
|
|
15
|
+
exports.calculateImpliedAprSpread = calculateImpliedAprSpread;
|
|
16
|
+
exports.calculateMaxPerpLeverage = calculateMaxPerpLeverage;
|
|
17
|
+
exports.aprToApy = aprToApy;
|
|
18
|
+
const SECONDS_PER_DAY = 86400;
|
|
19
|
+
function getMarketId(market) {
|
|
20
|
+
return market.marketId;
|
|
21
|
+
}
|
|
22
|
+
function getImpliedApr(market) {
|
|
23
|
+
return market.data?.midApr ?? market.data?.ammImpliedApr ?? 0;
|
|
24
|
+
}
|
|
25
|
+
function getMaxLeverage(market) {
|
|
26
|
+
return market.metadata?.maxLeverage ?? 0;
|
|
27
|
+
}
|
|
28
|
+
function getMaxPerpLeverage(market) {
|
|
29
|
+
return market.metadata?.maxPerpLeverage ?? getMaxLeverage(market);
|
|
30
|
+
}
|
|
31
|
+
function getPlatformName(market) {
|
|
32
|
+
return market.metadata?.platformName ?? '';
|
|
33
|
+
}
|
|
34
|
+
function getAssetSymbol(market) {
|
|
35
|
+
return market.metadata?.assetSymbol ?? '';
|
|
36
|
+
}
|
|
37
|
+
function getMaturity(market) {
|
|
38
|
+
return market.imData.maturity;
|
|
39
|
+
}
|
|
40
|
+
function getCollateralTokenId(market) {
|
|
41
|
+
return market.tokenId;
|
|
42
|
+
}
|
|
43
|
+
function getAmmId(market) {
|
|
44
|
+
return market.metadata?.ammId;
|
|
45
|
+
}
|
|
46
|
+
function calculateTimeToMaturity(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
47
|
+
return Math.max(0, maturityTime - currentTime);
|
|
48
|
+
}
|
|
49
|
+
function calculateDaysToMaturity(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
50
|
+
const timeToMaturity = calculateTimeToMaturity(maturityTime, currentTime);
|
|
51
|
+
return Math.max(0, Math.ceil(timeToMaturity / SECONDS_PER_DAY));
|
|
52
|
+
}
|
|
53
|
+
function calculateMaturityInfo(maturityTime, currentTime = Math.floor(Date.now() / 1000)) {
|
|
54
|
+
const timeToMaturity = calculateTimeToMaturity(maturityTime, currentTime);
|
|
55
|
+
const daysToMaturity = Math.max(0, Math.ceil(timeToMaturity / SECONDS_PER_DAY));
|
|
56
|
+
return { timeToMaturity, daysToMaturity };
|
|
57
|
+
}
|
|
58
|
+
function calculateImpliedAprSpread(impliedApr1, impliedApr2) {
|
|
59
|
+
return Math.abs(impliedApr1 - impliedApr2);
|
|
60
|
+
}
|
|
61
|
+
function calculateMaxPerpLeverage(market1, market2) {
|
|
62
|
+
return Math.min(getMaxPerpLeverage(market1), getMaxPerpLeverage(market2));
|
|
63
|
+
}
|
|
64
|
+
function aprToApy(apr, daysToMaturity) {
|
|
65
|
+
if (daysToMaturity <= 0) {
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
const periodsPerYear = 365 / daysToMaturity;
|
|
69
|
+
const periodRate = apr * daysToMaturity / 365;
|
|
70
|
+
return Math.pow(1 + periodRate, periodsPerYear) - 1;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=strategyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategyUtils.js","sourceRoot":"","sources":["../../../src/entities/Calculator/strategyUtils.ts"],"names":[],"mappings":"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"}
|