@gainsnetwork/sdk 0.0.0-v10.rc16 → 0.0.0-v10.rc18
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/lib/backend/tradingVariables/converter.js +1 -1
- package/lib/markets/index.d.ts +1 -0
- package/lib/markets/index.js +1 -0
- package/lib/markets/leverage/builder.d.ts +12 -0
- package/lib/markets/leverage/builder.js +25 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
- package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
- package/lib/markets/leverage/index.d.ts +3 -0
- package/lib/markets/leverage/index.js +19 -0
- package/lib/markets/leverage/types.d.ts +15 -0
- package/lib/markets/leverage/types.js +2 -0
- package/lib/trade/effectiveLeverage/builder.d.ts +23 -0
- package/lib/trade/effectiveLeverage/builder.js +30 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +23 -0
- package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +64 -0
- package/lib/trade/effectiveLeverage/index.d.ts +3 -0
- package/lib/trade/effectiveLeverage/index.js +22 -0
- package/lib/trade/effectiveLeverage/types.d.ts +33 -0
- package/lib/trade/effectiveLeverage/types.js +2 -0
- package/lib/trade/index.d.ts +1 -0
- package/lib/trade/index.js +1 -0
- package/lib/trade/priceImpact/close/index.js +5 -1
- package/lib/trade/priceImpact/cumulVol/index.js +0 -13
- package/package.json +1 -1
|
@@ -187,7 +187,7 @@ const convertTrade = (trade, collaterals) => {
|
|
|
187
187
|
tp: parseFloat(trade.tp) / 1e10,
|
|
188
188
|
isCounterTrade: trade.isCounterTrade,
|
|
189
189
|
positionSizeToken: trade.positionSizeToken
|
|
190
|
-
? parseFloat(trade.positionSizeToken) /
|
|
190
|
+
? parseFloat(trade.positionSizeToken) / 1e18
|
|
191
191
|
: undefined,
|
|
192
192
|
};
|
|
193
193
|
};
|
package/lib/markets/index.d.ts
CHANGED
package/lib/markets/index.js
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GlobalTradingVariablesType } from "../../backend/tradingVariables/types";
|
|
2
|
+
import { GetMarketLeverageRestrictionsContext } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the context needed for getMarketLeverageRestrictions from global trading variables
|
|
5
|
+
* @param globalTradingVariables Global trading variables containing pairs, groups, etc.
|
|
6
|
+
* @param pairIndex The index of the trading pair
|
|
7
|
+
* @param pairMaxLeverages Map of pair-specific max leverage overrides
|
|
8
|
+
* @returns Context for leverage restrictions calculation
|
|
9
|
+
*/
|
|
10
|
+
export declare const buildMarketLeverageRestrictionsContext: (globalTradingVariables: GlobalTradingVariablesType, pairIndex: number, pairMaxLeverages?: {
|
|
11
|
+
[key: number]: number;
|
|
12
|
+
} | undefined) => GetMarketLeverageRestrictionsContext;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildMarketLeverageRestrictionsContext = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Builds the context needed for getMarketLeverageRestrictions from global trading variables
|
|
6
|
+
* @param globalTradingVariables Global trading variables containing pairs, groups, etc.
|
|
7
|
+
* @param pairIndex The index of the trading pair
|
|
8
|
+
* @param pairMaxLeverages Map of pair-specific max leverage overrides
|
|
9
|
+
* @returns Context for leverage restrictions calculation
|
|
10
|
+
*/
|
|
11
|
+
const buildMarketLeverageRestrictionsContext = (globalTradingVariables, pairIndex, pairMaxLeverages) => {
|
|
12
|
+
const { pairs, groups, counterTradeSettings } = globalTradingVariables;
|
|
13
|
+
if (!pairs || !groups || !pairs[pairIndex]) {
|
|
14
|
+
throw new Error("Invalid global trading variables or pair index");
|
|
15
|
+
}
|
|
16
|
+
const pair = pairs[pairIndex];
|
|
17
|
+
const group = groups[pair.groupIndex];
|
|
18
|
+
return {
|
|
19
|
+
groupMinLeverage: group.minLeverage,
|
|
20
|
+
groupMaxLeverage: group.maxLeverage,
|
|
21
|
+
pairMaxLeverage: pairMaxLeverages === null || pairMaxLeverages === void 0 ? void 0 : pairMaxLeverages[pairIndex],
|
|
22
|
+
counterTradeSettings: counterTradeSettings === null || counterTradeSettings === void 0 ? void 0 : counterTradeSettings[pairIndex],
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.buildMarketLeverageRestrictionsContext = buildMarketLeverageRestrictionsContext;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GetMarketLeverageRestrictionsContext, MarketLeverageRestrictions } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Gets the leverage restrictions for a trading pair, including both regular and counter trade limits
|
|
4
|
+
* @param context Context containing group limits, pair overrides, and counter trade settings
|
|
5
|
+
* @returns Object with regular and counter trade leverage restrictions
|
|
6
|
+
*/
|
|
7
|
+
export declare const getMarketLeverageRestrictions: (context: GetMarketLeverageRestrictionsContext) => MarketLeverageRestrictions;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMarketLeverageRestrictions = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Gets the leverage restrictions for a trading pair, including both regular and counter trade limits
|
|
6
|
+
* @param context Context containing group limits, pair overrides, and counter trade settings
|
|
7
|
+
* @returns Object with regular and counter trade leverage restrictions
|
|
8
|
+
*/
|
|
9
|
+
const getMarketLeverageRestrictions = (context) => {
|
|
10
|
+
const { groupMinLeverage, groupMaxLeverage, pairMaxLeverage, counterTradeSettings, } = context;
|
|
11
|
+
// Calculate regular trade leverage limits
|
|
12
|
+
let regularMin = groupMinLeverage;
|
|
13
|
+
let regularMax = pairMaxLeverage === undefined || pairMaxLeverage === 0
|
|
14
|
+
? groupMaxLeverage
|
|
15
|
+
: pairMaxLeverage;
|
|
16
|
+
// If max is less than min, set both to 0 (pair is effectively disabled)
|
|
17
|
+
if (regularMax < regularMin) {
|
|
18
|
+
regularMin = 0;
|
|
19
|
+
regularMax = 0;
|
|
20
|
+
}
|
|
21
|
+
// Calculate counter trade leverage limits if settings exist
|
|
22
|
+
let counterTradeLimits = null;
|
|
23
|
+
if (counterTradeSettings) {
|
|
24
|
+
// Counter trades use the group's min leverage but have their own max leverage
|
|
25
|
+
counterTradeLimits = {
|
|
26
|
+
min: groupMinLeverage,
|
|
27
|
+
max: counterTradeSettings.maxLeverage,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
regular: {
|
|
32
|
+
min: regularMin,
|
|
33
|
+
max: regularMax,
|
|
34
|
+
},
|
|
35
|
+
counterTrade: counterTradeLimits,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
exports.getMarketLeverageRestrictions = getMarketLeverageRestrictions;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./getMarketLeverageRestrictions"), exports);
|
|
19
|
+
__exportStar(require("./builder"), exports);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CounterTradeSettings } from "../../trade/types";
|
|
2
|
+
export type LeverageRestrictions = {
|
|
3
|
+
min: number;
|
|
4
|
+
max: number;
|
|
5
|
+
};
|
|
6
|
+
export type MarketLeverageRestrictions = {
|
|
7
|
+
regular: LeverageRestrictions;
|
|
8
|
+
counterTrade: LeverageRestrictions | null;
|
|
9
|
+
};
|
|
10
|
+
export type GetMarketLeverageRestrictionsContext = {
|
|
11
|
+
groupMinLeverage: number;
|
|
12
|
+
groupMaxLeverage: number;
|
|
13
|
+
pairMaxLeverage?: number;
|
|
14
|
+
counterTradeSettings?: CounterTradeSettings;
|
|
15
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GlobalTradingVariablesType } from "../../backend/tradingVariables/types";
|
|
2
|
+
import { TradeInfo } from "..";
|
|
3
|
+
import { TradeEffectiveLeverageContext } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* @dev Builds a complete context for effective leverage calculations
|
|
6
|
+
* @dev Uses the closing price impact context builder as a sub-context
|
|
7
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
8
|
+
* @param collateralIndex The collateral index (1-based)
|
|
9
|
+
* @param pairIndex The pair index
|
|
10
|
+
* @param tradeInfo Trade information including createdBlock
|
|
11
|
+
* @param additionalParams Additional parameters for price impact calculations
|
|
12
|
+
* @returns Complete context ready for getTradeNewEffectiveLeverage
|
|
13
|
+
*/
|
|
14
|
+
export declare const buildTradeEffectiveLeverageContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, tradeInfo: TradeInfo, additionalParams: {
|
|
15
|
+
currentBlock: number;
|
|
16
|
+
contractsVersion?: number;
|
|
17
|
+
isPnlPositive?: boolean;
|
|
18
|
+
userPriceImpact?: {
|
|
19
|
+
cumulVolPriceImpactMultiplier: number;
|
|
20
|
+
fixedSpreadP: number;
|
|
21
|
+
};
|
|
22
|
+
protectionCloseFactorWhitelist?: boolean;
|
|
23
|
+
}) => TradeEffectiveLeverageContext | undefined;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTradeEffectiveLeverageContext = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
/**
|
|
6
|
+
* @dev Builds a complete context for effective leverage calculations
|
|
7
|
+
* @dev Uses the closing price impact context builder as a sub-context
|
|
8
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
9
|
+
* @param collateralIndex The collateral index (1-based)
|
|
10
|
+
* @param pairIndex The pair index
|
|
11
|
+
* @param tradeInfo Trade information including createdBlock
|
|
12
|
+
* @param additionalParams Additional parameters for price impact calculations
|
|
13
|
+
* @returns Complete context ready for getTradeNewEffectiveLeverage
|
|
14
|
+
*/
|
|
15
|
+
const buildTradeEffectiveLeverageContext = (globalTradingVariables, collateralIndex, pairIndex, tradeInfo, additionalParams) => {
|
|
16
|
+
var _a;
|
|
17
|
+
// Build the closing price impact context which we'll use for PnL calculations
|
|
18
|
+
const closingPriceImpactContext = (0, __1.buildTradeClosingPriceImpactContext)(globalTradingVariables, collateralIndex, pairIndex, tradeInfo, additionalParams);
|
|
19
|
+
if (!closingPriceImpactContext) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
// Extract base spread from pairs data
|
|
23
|
+
const pairs = globalTradingVariables.pairs;
|
|
24
|
+
const baseSpreadP = ((_a = pairs === null || pairs === void 0 ? void 0 : pairs[pairIndex]) === null || _a === void 0 ? void 0 : _a.spreadP) || 0;
|
|
25
|
+
return {
|
|
26
|
+
closingPriceImpactContext,
|
|
27
|
+
baseSpreadP,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.buildTradeEffectiveLeverageContext = buildTradeEffectiveLeverageContext;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Trade effective leverage calculations
|
|
3
|
+
* @dev Mirrors contract's TradingCommonUtils.getTradeNewEffectiveLeverage
|
|
4
|
+
*/
|
|
5
|
+
import { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult } from "./types";
|
|
6
|
+
export type { TradeEffectiveLeverageInput, TradeEffectiveLeverageContext, TradeEffectiveLeverageResult, };
|
|
7
|
+
export { buildTradeEffectiveLeverageContext } from "./builder";
|
|
8
|
+
/**
|
|
9
|
+
* @dev Calculates the effective leverage of a trade accounting for unrealized PnL
|
|
10
|
+
* @dev Effective leverage increases when PnL is negative and decreases when positive
|
|
11
|
+
* @dev Mirrors contract's getTradeNewEffectiveLeverage function
|
|
12
|
+
* @param input Trade parameters including new position values
|
|
13
|
+
* @param context Combined context for calculations
|
|
14
|
+
* @returns Effective leverage and related values
|
|
15
|
+
*/
|
|
16
|
+
export declare const getTradeNewEffectiveLeverage: (input: TradeEffectiveLeverageInput, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
|
|
17
|
+
/**
|
|
18
|
+
* @dev Simplified version for existing positions (no opening fees)
|
|
19
|
+
* @param input Trade parameters
|
|
20
|
+
* @param context Combined context
|
|
21
|
+
* @returns Effective leverage and related values
|
|
22
|
+
*/
|
|
23
|
+
export declare const getTradeEffectiveLeverage: (input: Omit<TradeEffectiveLeverageInput, "openingFeesCollateral">, context: TradeEffectiveLeverageContext) => TradeEffectiveLeverageResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = exports.buildTradeEffectiveLeverageContext = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
var builder_1 = require("./builder");
|
|
6
|
+
Object.defineProperty(exports, "buildTradeEffectiveLeverageContext", { enumerable: true, get: function () { return builder_1.buildTradeEffectiveLeverageContext; } });
|
|
7
|
+
/**
|
|
8
|
+
* @dev Calculates the effective leverage of a trade accounting for unrealized PnL
|
|
9
|
+
* @dev Effective leverage increases when PnL is negative and decreases when positive
|
|
10
|
+
* @dev Mirrors contract's getTradeNewEffectiveLeverage function
|
|
11
|
+
* @param input Trade parameters including new position values
|
|
12
|
+
* @param context Combined context for calculations
|
|
13
|
+
* @returns Effective leverage and related values
|
|
14
|
+
*/
|
|
15
|
+
const getTradeNewEffectiveLeverage = (input, context) => {
|
|
16
|
+
const { trade, newOpenPrice, newCollateralAmount, newLeverage, currentPairPrice, openingFeesCollateral, } = input;
|
|
17
|
+
const { closingPriceImpactContext } = context;
|
|
18
|
+
// Calculate new position size
|
|
19
|
+
const newPositionSize = newCollateralAmount * newLeverage;
|
|
20
|
+
// Calculate price impact for closing at current price
|
|
21
|
+
const closingPriceImpact = (0, __1.getTradeClosingPriceImpact)({
|
|
22
|
+
trade: Object.assign(Object.assign({}, trade), { openPrice: newOpenPrice, collateralAmount: newCollateralAmount, leverage: newLeverage }),
|
|
23
|
+
oraclePrice: currentPairPrice,
|
|
24
|
+
positionSizeCollateral: newPositionSize,
|
|
25
|
+
currentPairPrice: currentPairPrice,
|
|
26
|
+
useCumulativeVolPriceImpact: true,
|
|
27
|
+
collateralIndex: trade.collateralIndex,
|
|
28
|
+
pairIndex: trade.pairIndex,
|
|
29
|
+
pairSpreadP: context.baseSpreadP,
|
|
30
|
+
contractsVersion: closingPriceImpactContext.tradeInfo.contractsVersion,
|
|
31
|
+
}, closingPriceImpactContext);
|
|
32
|
+
// Calculate unrealized PnL
|
|
33
|
+
// For longs: (exitPrice - entryPrice) * positionSizeToken
|
|
34
|
+
// For shorts: (entryPrice - exitPrice) * positionSizeToken
|
|
35
|
+
const priceDiff = trade.long
|
|
36
|
+
? closingPriceImpact.priceAfterImpact - newOpenPrice
|
|
37
|
+
: newOpenPrice - closingPriceImpact.priceAfterImpact;
|
|
38
|
+
const unrealizedPnl = priceDiff * closingPriceImpact.positionSizeToken;
|
|
39
|
+
// Calculate effective collateral (collateral + PnL - fees)
|
|
40
|
+
// Note: fees are subtracted because they reduce the effective collateral
|
|
41
|
+
const effectiveCollateral = newCollateralAmount + unrealizedPnl - openingFeesCollateral;
|
|
42
|
+
// Calculate effective leverage
|
|
43
|
+
// If effective collateral is <= 0, leverage is effectively infinite
|
|
44
|
+
const effectiveLeverage = effectiveCollateral > 0
|
|
45
|
+
? newPositionSize / effectiveCollateral
|
|
46
|
+
: Number.MAX_SAFE_INTEGER;
|
|
47
|
+
return {
|
|
48
|
+
effectiveLeverage,
|
|
49
|
+
unrealizedPnl,
|
|
50
|
+
effectiveCollateral,
|
|
51
|
+
positionSize: newPositionSize,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
exports.getTradeNewEffectiveLeverage = getTradeNewEffectiveLeverage;
|
|
55
|
+
/**
|
|
56
|
+
* @dev Simplified version for existing positions (no opening fees)
|
|
57
|
+
* @param input Trade parameters
|
|
58
|
+
* @param context Combined context
|
|
59
|
+
* @returns Effective leverage and related values
|
|
60
|
+
*/
|
|
61
|
+
const getTradeEffectiveLeverage = (input, context) => {
|
|
62
|
+
return (0, exports.getTradeNewEffectiveLeverage)(Object.assign(Object.assign({}, input), { openingFeesCollateral: 0 }), context);
|
|
63
|
+
};
|
|
64
|
+
exports.getTradeEffectiveLeverage = getTradeEffectiveLeverage;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.getTradeEffectiveLeverage = exports.getTradeNewEffectiveLeverage = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./builder"), exports);
|
|
20
|
+
var getTradeNewEffectiveLeverage_1 = require("./getTradeNewEffectiveLeverage");
|
|
21
|
+
Object.defineProperty(exports, "getTradeNewEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeNewEffectiveLeverage; } });
|
|
22
|
+
Object.defineProperty(exports, "getTradeEffectiveLeverage", { enumerable: true, get: function () { return getTradeNewEffectiveLeverage_1.getTradeEffectiveLeverage; } });
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dev Types for trade effective leverage calculations
|
|
3
|
+
*/
|
|
4
|
+
import { Trade, TradeClosingPriceImpactContext } from "..";
|
|
5
|
+
/**
|
|
6
|
+
* @dev Input parameters for effective leverage calculation
|
|
7
|
+
* @dev Mirrors contract's parameters for getTradeNewEffectiveLeverage
|
|
8
|
+
*/
|
|
9
|
+
export type TradeEffectiveLeverageInput = {
|
|
10
|
+
trade: Trade;
|
|
11
|
+
newOpenPrice: number;
|
|
12
|
+
newCollateralAmount: number;
|
|
13
|
+
newLeverage: number;
|
|
14
|
+
currentPairPrice: number;
|
|
15
|
+
openingFeesCollateral: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @dev Context for effective leverage calculation
|
|
19
|
+
* Includes closing price impact context for PnL calculations
|
|
20
|
+
*/
|
|
21
|
+
export type TradeEffectiveLeverageContext = {
|
|
22
|
+
closingPriceImpactContext: TradeClosingPriceImpactContext;
|
|
23
|
+
baseSpreadP: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @dev Result of effective leverage calculation
|
|
27
|
+
*/
|
|
28
|
+
export type TradeEffectiveLeverageResult = {
|
|
29
|
+
effectiveLeverage: number;
|
|
30
|
+
unrealizedPnl: number;
|
|
31
|
+
effectiveCollateral: number;
|
|
32
|
+
positionSize: number;
|
|
33
|
+
};
|
package/lib/trade/index.d.ts
CHANGED
package/lib/trade/index.js
CHANGED
|
@@ -53,6 +53,11 @@ const getTradeClosingPriceImpact = (input, context) => {
|
|
|
53
53
|
const positionSizeToken = input.trade.positionSizeToken
|
|
54
54
|
? calculateClosingPositionSizeToken(input.positionSizeCollateral, input.trade.positionSizeToken, input.trade.collateralAmount, input.trade.leverage)
|
|
55
55
|
: 0;
|
|
56
|
+
console.log("positionSizeToken", positionSizeToken);
|
|
57
|
+
console.log("input.positionSizeCollateral", input.positionSizeCollateral);
|
|
58
|
+
console.log("input.trade.positionSizeToken", input.trade.positionSizeToken);
|
|
59
|
+
console.log("input.trade.collateralAmount", input.trade.collateralAmount);
|
|
60
|
+
console.log("input.trade.leverage", input.trade.leverage);
|
|
56
61
|
// Calculate fixed spread (reversed for closing)
|
|
57
62
|
const fixedSpreadP = (0, cumulVol_1.getFixedSpreadP)(input.pairSpreadP, input.trade.long, false // closing
|
|
58
63
|
);
|
|
@@ -74,7 +79,6 @@ const getTradeClosingPriceImpact = (input, context) => {
|
|
|
74
79
|
);
|
|
75
80
|
// Determine actual PnL from the calculated percentage
|
|
76
81
|
const isPnlPositive = pnlPercent > 0;
|
|
77
|
-
console.log("isPnlPositive", isPnlPositive);
|
|
78
82
|
// Second pass: Recalculate with actual PnL if positive
|
|
79
83
|
if (isPnlPositive) {
|
|
80
84
|
cumulVolPriceImpactP = (0, cumulVol_1.getTradeCumulVolPriceImpactP)(input.trade.user, input.pairIndex, input.trade.long, positionSizeUsd, true, // Positive PnL
|
|
@@ -43,13 +43,6 @@ const isProtectionCloseFactorActive = (context) => {
|
|
|
43
43
|
context.protectionCloseFactor === undefined) {
|
|
44
44
|
return undefined;
|
|
45
45
|
}
|
|
46
|
-
console.log("context.isPnlPositive", context.isPnlPositive);
|
|
47
|
-
console.log("context.isOpen", context.isOpen);
|
|
48
|
-
console.log("context.protectionCloseFactor", context.protectionCloseFactor);
|
|
49
|
-
console.log("context.currentBlock", context.currentBlock);
|
|
50
|
-
console.log("context.createdBlock", context.createdBlock);
|
|
51
|
-
console.log("context.protectionCloseFactorBlocks", context.protectionCloseFactorBlocks);
|
|
52
|
-
console.log("context.protectionCloseFactorWhitelist", context.protectionCloseFactorWhitelist);
|
|
53
46
|
return (context.isPnlPositive === true &&
|
|
54
47
|
context.isOpen === false &&
|
|
55
48
|
context.protectionCloseFactor > 0 &&
|
|
@@ -135,12 +128,6 @@ const getTradeCumulVolPriceImpactP = (trader, pairIndex, long, tradeOpenInterest
|
|
|
135
128
|
onePercentDepth /
|
|
136
129
|
(0, exports.getLegacyFactor)(updatedContext)) *
|
|
137
130
|
(0, exports.getProtectionCloseFactor)(updatedContext);
|
|
138
|
-
console.log("signedActiveOi", signedActiveOi);
|
|
139
|
-
console.log("getCumulativeFactor", (0, exports.getCumulativeFactor)(updatedContext));
|
|
140
|
-
console.log("signedTradeOi", signedTradeOi);
|
|
141
|
-
console.log("onePercentDepth", onePercentDepth);
|
|
142
|
-
console.log("getLegacyFactor", (0, exports.getLegacyFactor)(updatedContext));
|
|
143
|
-
console.log("getProtectionCloseFactor", (0, exports.getProtectionCloseFactor)(updatedContext));
|
|
144
131
|
return finalPriceImpactP;
|
|
145
132
|
};
|
|
146
133
|
exports.getTradeCumulVolPriceImpactP = getTradeCumulVolPriceImpactP;
|