@gainsnetwork/sdk 0.0.0-v10.rc8 → 0.0.0-v10.rc9
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/trade/priceImpact/cumulVol/builder.d.ts +22 -0
- package/lib/trade/priceImpact/cumulVol/builder.js +43 -0
- package/lib/trade/priceImpact/cumulVol/index.d.ts +1 -0
- package/lib/trade/priceImpact/cumulVol/index.js +7 -4
- package/lib/trade/priceImpact/index.d.ts +2 -2
- package/lib/trade/priceImpact/index.js +5 -1
- package/lib/trade/priceImpact/open/builder.d.ts +21 -0
- package/lib/trade/priceImpact/open/builder.js +43 -0
- package/lib/trade/priceImpact/open/index.d.ts +1 -0
- package/lib/trade/priceImpact/open/index.js +5 -2
- package/lib/trade/priceImpact/open/types.d.ts +3 -2
- package/lib/trade/priceImpact/skew/index.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
|
|
2
|
+
import { CumulVolContext } from "./index";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Builds cumulative volume price impact sub-context for a specific pair
|
|
5
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
6
|
+
* @param collateralIndex The collateral index (1-based)
|
|
7
|
+
* @param pairIndex The pair index
|
|
8
|
+
* @param additionalParams Additional parameters not available in trading variables
|
|
9
|
+
* @returns Cumulative volume context ready for getTradeCumulVolPriceImpactP
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildCumulVolContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, additionalParams: {
|
|
12
|
+
currentBlock: number;
|
|
13
|
+
contractsVersion?: number;
|
|
14
|
+
isPnlPositive?: boolean;
|
|
15
|
+
isOpen?: boolean;
|
|
16
|
+
createdBlock?: number;
|
|
17
|
+
userPriceImpact?: {
|
|
18
|
+
cumulVolPriceImpactMultiplier: number;
|
|
19
|
+
fixedSpreadP: number;
|
|
20
|
+
};
|
|
21
|
+
protectionCloseFactorWhitelist?: boolean;
|
|
22
|
+
}) => CumulVolContext | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildCumulVolContext = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @dev Builds cumulative volume price impact sub-context for a specific pair
|
|
6
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
7
|
+
* @param collateralIndex The collateral index (1-based)
|
|
8
|
+
* @param pairIndex The pair index
|
|
9
|
+
* @param additionalParams Additional parameters not available in trading variables
|
|
10
|
+
* @returns Cumulative volume context ready for getTradeCumulVolPriceImpactP
|
|
11
|
+
*/
|
|
12
|
+
const buildCumulVolContext = (globalTradingVariables, collateralIndex, pairIndex, additionalParams) => {
|
|
13
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
14
|
+
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
15
|
+
if (!collateral) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
// Get pair-specific data from global variables
|
|
19
|
+
const pairDepth = (_a = globalTradingVariables.pairDepths) === null || _a === void 0 ? void 0 : _a[pairIndex];
|
|
20
|
+
const pairFactor = (_b = globalTradingVariables.pairFactors) === null || _b === void 0 ? void 0 : _b[pairIndex];
|
|
21
|
+
const oiWindows = (_c = globalTradingVariables.oiWindows) === null || _c === void 0 ? void 0 : _c[pairIndex];
|
|
22
|
+
// Get OI windows settings (same for all pairs)
|
|
23
|
+
// OI windows settings from global trading variables are already in SDK format
|
|
24
|
+
const oiWindowsSettings = globalTradingVariables.oiWindowsSettings;
|
|
25
|
+
// Get user-specific parameters from additionalParams
|
|
26
|
+
const userPriceImpact = additionalParams.userPriceImpact;
|
|
27
|
+
const protectionCloseFactorWhitelist = additionalParams.protectionCloseFactorWhitelist;
|
|
28
|
+
// Get liquidation params - check both pair and group level
|
|
29
|
+
const liquidationParams = ((_e = (_d = globalTradingVariables.liquidationParams) === null || _d === void 0 ? void 0 : _d.pairs) === null || _e === void 0 ? void 0 : _e[pairIndex]) ||
|
|
30
|
+
((_g = (_f = globalTradingVariables.liquidationParams) === null || _f === void 0 ? void 0 : _f.groups) === null || _g === void 0 ? void 0 : _g[0]); // fallback to first group
|
|
31
|
+
return Object.assign({
|
|
32
|
+
// Trade state
|
|
33
|
+
isOpen: additionalParams.isOpen, isPnlPositive: additionalParams.isPnlPositive, createdBlock: additionalParams.createdBlock,
|
|
34
|
+
// Protection factors
|
|
35
|
+
liquidationParams, currentBlock: additionalParams.currentBlock, contractsVersion: additionalParams.contractsVersion, protectionCloseFactorWhitelist,
|
|
36
|
+
// Price impact data
|
|
37
|
+
pairDepth,
|
|
38
|
+
oiWindowsSettings,
|
|
39
|
+
oiWindows,
|
|
40
|
+
// User/collateral specific
|
|
41
|
+
userPriceImpact, collateralPriceUsd: ((_h = collateral.prices) === null || _h === void 0 ? void 0 : _h.collateralPriceUsd) || 1 }, pairFactor);
|
|
42
|
+
};
|
|
43
|
+
exports.buildCumulVolContext = buildCumulVolContext;
|
|
@@ -105,3 +105,4 @@ export declare const getCumulVolPriceImpact: (buy: boolean, collateral: number,
|
|
|
105
105
|
}) => number;
|
|
106
106
|
export declare const getSpreadWithPriceImpactP: (pairSpreadP: number, buy: boolean, collateral: number, leverage: number, pairDepth: PairDepth | undefined, oiWindowsSettings?: OiWindowsSettings | undefined, oiWindows?: OiWindows | undefined, context?: CumulVolContext | undefined) => number;
|
|
107
107
|
export { convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, } from "./converter";
|
|
108
|
+
export { buildCumulVolContext } from "./builder";
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @dev Mirrors contract's getTradeCumulVolPriceImpactP functionality
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadWithPriceImpactP = exports.getCumulVolPriceImpact = exports.getSpreadWithCumulVolPriceImpactP = exports.getSpreadP = exports.getFixedSpreadP = exports.getTradeCumulVolPriceImpactP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = void 0;
|
|
7
|
+
exports.buildCumulVolContext = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadWithPriceImpactP = exports.getCumulVolPriceImpact = exports.getSpreadWithCumulVolPriceImpactP = exports.getSpreadP = exports.getFixedSpreadP = exports.getTradeCumulVolPriceImpactP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = void 0;
|
|
8
8
|
const oiWindows_1 = require("../../oiWindows");
|
|
9
9
|
const constants_1 = require("../../../constants");
|
|
10
10
|
const types_1 = require("../../../contracts/types");
|
|
@@ -119,12 +119,12 @@ const getTradeCumulVolPriceImpactP = (trader, pairIndex, long, tradeOpenInterest
|
|
|
119
119
|
if (!onePercentDepth || activeOi === undefined) {
|
|
120
120
|
return 0;
|
|
121
121
|
}
|
|
122
|
-
|
|
122
|
+
const finalPriceImpactP = ((activeOi * (0, exports.getCumulativeFactor)(updatedContext) +
|
|
123
123
|
tradeOpenInterestUsd / 2) /
|
|
124
124
|
onePercentDepth /
|
|
125
|
-
100 /
|
|
126
125
|
(0, exports.getLegacyFactor)(updatedContext)) *
|
|
127
|
-
(0, exports.getProtectionCloseFactor)(updatedContext)
|
|
126
|
+
(0, exports.getProtectionCloseFactor)(updatedContext);
|
|
127
|
+
return finalPriceImpactP;
|
|
128
128
|
};
|
|
129
129
|
exports.getTradeCumulVolPriceImpactP = getTradeCumulVolPriceImpactP;
|
|
130
130
|
/**
|
|
@@ -226,3 +226,6 @@ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, g
|
|
|
226
226
|
Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return converter_1.convertOiWindow; } });
|
|
227
227
|
Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return converter_1.convertOiWindows; } });
|
|
228
228
|
Object.defineProperty(exports, "convertOiWindowsSettingsArray", { enumerable: true, get: function () { return converter_1.convertOiWindowsSettingsArray; } });
|
|
229
|
+
// Export builder
|
|
230
|
+
var builder_1 = require("./builder");
|
|
231
|
+
Object.defineProperty(exports, "buildCumulVolContext", { enumerable: true, get: function () { return builder_1.buildCumulVolContext; } });
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* @dev Main price impact module
|
|
3
3
|
* @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
|
|
4
4
|
*/
|
|
5
|
-
export { getTradeOpeningPriceImpact, getTradeOpeningPriceImpactAtMarket, TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, } from "./open";
|
|
5
|
+
export { getTradeOpeningPriceImpact, getTradeOpeningPriceImpactAtMarket, buildTradeOpeningPriceImpactContext, TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, } from "./open";
|
|
6
6
|
export { getTradeClosingPriceImpact, getTradeClosingPriceImpactAtOracle, TradeClosingPriceImpactInput, TradeClosingPriceImpactContext, TradeClosingPriceImpactResult, } from "./close";
|
|
7
7
|
export { getTradeCumulVolPriceImpactP, getCumulVolPriceImpact, // Convenience function
|
|
8
8
|
getSpreadWithCumulVolPriceImpactP, getSpreadWithPriceImpactP, // Legacy alias
|
|
9
|
-
getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, CumulVolContext, } from "./cumulVol";
|
|
9
|
+
getProtectionCloseFactor, isProtectionCloseFactorActive, getCumulativeFactor, getLegacyFactor, getFixedSpreadP, getSpreadP, convertOiWindowsSettings, convertOiWindow, convertOiWindows, convertOiWindowsSettingsArray, buildCumulVolContext, CumulVolContext, } from "./cumulVol";
|
|
10
10
|
export { getNetSkewToken, getNetSkewCollateral, getTradeSkewDirection, calculateSkewPriceImpactP, getTradeSkewPriceImpact, getTradeSkewPriceImpactWithChecks, calculatePartialSizeToken, SkewPriceImpact, } from "./skew";
|
|
11
11
|
export { convertPairOiToken, convertPairOiTokenArray, convertPairOiCollateral, convertPairOiCollateralArray, convertSkewDepth, convertPairSkewDepths, } from "./skew/converter";
|
|
12
12
|
export { buildSkewPriceImpactContext } from "./skew/builder";
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* @dev Exports cumulative volume, skew, and combined opening/closing price impact functionality
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.buildSkewPriceImpactContext = exports.convertPairSkewDepths = exports.convertSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadP = exports.getFixedSpreadP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = exports.getSpreadWithPriceImpactP = exports.getSpreadWithCumulVolPriceImpactP = exports.getCumulVolPriceImpact = exports.getTradeCumulVolPriceImpactP = exports.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
|
|
7
|
+
exports.buildSkewPriceImpactContext = exports.convertPairSkewDepths = exports.convertSkewDepth = exports.convertPairOiCollateralArray = exports.convertPairOiCollateral = exports.convertPairOiTokenArray = exports.convertPairOiToken = exports.SkewPriceImpact = exports.calculatePartialSizeToken = exports.getTradeSkewPriceImpactWithChecks = exports.getTradeSkewPriceImpact = exports.calculateSkewPriceImpactP = exports.getTradeSkewDirection = exports.getNetSkewCollateral = exports.getNetSkewToken = exports.buildCumulVolContext = exports.convertOiWindowsSettingsArray = exports.convertOiWindows = exports.convertOiWindow = exports.convertOiWindowsSettings = exports.getSpreadP = exports.getFixedSpreadP = exports.getLegacyFactor = exports.getCumulativeFactor = exports.isProtectionCloseFactorActive = exports.getProtectionCloseFactor = exports.getSpreadWithPriceImpactP = exports.getSpreadWithCumulVolPriceImpactP = exports.getCumulVolPriceImpact = exports.getTradeCumulVolPriceImpactP = exports.getTradeClosingPriceImpactAtOracle = exports.getTradeClosingPriceImpact = exports.buildTradeOpeningPriceImpactContext = exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
|
|
8
8
|
// Export trade opening price impact functionality
|
|
9
9
|
var open_1 = require("./open");
|
|
10
10
|
// Core functions
|
|
11
11
|
Object.defineProperty(exports, "getTradeOpeningPriceImpact", { enumerable: true, get: function () { return open_1.getTradeOpeningPriceImpact; } });
|
|
12
12
|
Object.defineProperty(exports, "getTradeOpeningPriceImpactAtMarket", { enumerable: true, get: function () { return open_1.getTradeOpeningPriceImpactAtMarket; } });
|
|
13
|
+
// Builder
|
|
14
|
+
Object.defineProperty(exports, "buildTradeOpeningPriceImpactContext", { enumerable: true, get: function () { return open_1.buildTradeOpeningPriceImpactContext; } });
|
|
13
15
|
// Export trade closing price impact functionality
|
|
14
16
|
var close_1 = require("./close");
|
|
15
17
|
// Core functions
|
|
@@ -33,6 +35,8 @@ Object.defineProperty(exports, "convertOiWindowsSettings", { enumerable: true, g
|
|
|
33
35
|
Object.defineProperty(exports, "convertOiWindow", { enumerable: true, get: function () { return cumulVol_1.convertOiWindow; } });
|
|
34
36
|
Object.defineProperty(exports, "convertOiWindows", { enumerable: true, get: function () { return cumulVol_1.convertOiWindows; } });
|
|
35
37
|
Object.defineProperty(exports, "convertOiWindowsSettingsArray", { enumerable: true, get: function () { return cumulVol_1.convertOiWindowsSettingsArray; } });
|
|
38
|
+
// Builder
|
|
39
|
+
Object.defineProperty(exports, "buildCumulVolContext", { enumerable: true, get: function () { return cumulVol_1.buildCumulVolContext; } });
|
|
36
40
|
// Export skew price impact functionality
|
|
37
41
|
var skew_1 = require("./skew");
|
|
38
42
|
// Core functions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GlobalTradingVariablesType } from "../../../backend/tradingVariables/types";
|
|
2
|
+
import { TradeOpeningPriceImpactContext } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* @dev Builds a complete context for trade opening price impact calculations
|
|
5
|
+
* @dev Uses sub-context builders to create properly scoped contexts
|
|
6
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
7
|
+
* @param collateralIndex The collateral index (1-based)
|
|
8
|
+
* @param pairIndex The pair index
|
|
9
|
+
* @param additionalParams Additional parameters not available in trading variables
|
|
10
|
+
* @returns Complete context ready for getTradeOpeningPriceImpact
|
|
11
|
+
*/
|
|
12
|
+
export declare const buildTradeOpeningPriceImpactContext: (globalTradingVariables: GlobalTradingVariablesType, collateralIndex: number, pairIndex: number, additionalParams: {
|
|
13
|
+
currentBlock: number;
|
|
14
|
+
contractsVersion?: number;
|
|
15
|
+
trader?: string;
|
|
16
|
+
userPriceImpact?: {
|
|
17
|
+
cumulVolPriceImpactMultiplier: number;
|
|
18
|
+
fixedSpreadP: number;
|
|
19
|
+
};
|
|
20
|
+
protectionCloseFactorWhitelist?: boolean;
|
|
21
|
+
}) => TradeOpeningPriceImpactContext | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTradeOpeningPriceImpactContext = void 0;
|
|
4
|
+
const builder_1 = require("../cumulVol/builder");
|
|
5
|
+
const builder_2 = require("../skew/builder");
|
|
6
|
+
/**
|
|
7
|
+
* @dev Builds a complete context for trade opening price impact calculations
|
|
8
|
+
* @dev Uses sub-context builders to create properly scoped contexts
|
|
9
|
+
* @param globalTradingVariables The transformed global trading variables from backend
|
|
10
|
+
* @param collateralIndex The collateral index (1-based)
|
|
11
|
+
* @param pairIndex The pair index
|
|
12
|
+
* @param additionalParams Additional parameters not available in trading variables
|
|
13
|
+
* @returns Complete context ready for getTradeOpeningPriceImpact
|
|
14
|
+
*/
|
|
15
|
+
const buildTradeOpeningPriceImpactContext = (globalTradingVariables, collateralIndex, pairIndex, additionalParams) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const collateral = globalTradingVariables.collaterals[collateralIndex - 1];
|
|
18
|
+
if (!collateral) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
// Build cumulative volume subcontext
|
|
22
|
+
const cumulVolContext = (0, builder_1.buildCumulVolContext)(globalTradingVariables, collateralIndex, pairIndex, {
|
|
23
|
+
currentBlock: additionalParams.currentBlock,
|
|
24
|
+
contractsVersion: additionalParams.contractsVersion,
|
|
25
|
+
isPnlPositive: false,
|
|
26
|
+
isOpen: true,
|
|
27
|
+
createdBlock: undefined,
|
|
28
|
+
userPriceImpact: additionalParams.userPriceImpact,
|
|
29
|
+
protectionCloseFactorWhitelist: additionalParams.protectionCloseFactorWhitelist,
|
|
30
|
+
});
|
|
31
|
+
// Build skew price impact subcontext
|
|
32
|
+
const skewContext = (0, builder_2.buildSkewPriceImpactContext)(collateral, pairIndex);
|
|
33
|
+
if (!cumulVolContext || !skewContext) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
// Return structured context with proper subcontexts
|
|
37
|
+
return {
|
|
38
|
+
collateralPriceUsd: ((_a = collateral.prices) === null || _a === void 0 ? void 0 : _a.collateralPriceUsd) || 1,
|
|
39
|
+
cumulVolContext,
|
|
40
|
+
skewContext,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
exports.buildTradeOpeningPriceImpactContext = buildTradeOpeningPriceImpactContext;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult } from "./types";
|
|
6
6
|
export type { TradeOpeningPriceImpactInput, TradeOpeningPriceImpactContext, TradeOpeningPriceImpactResult, };
|
|
7
|
+
export { buildTradeOpeningPriceImpactContext } from "./builder";
|
|
7
8
|
/**
|
|
8
9
|
* @dev Calculates all price impacts for trade opening
|
|
9
10
|
* @dev Mirrors contract's getTradeOpeningPriceImpact function
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
* @dev Mirrors contract's TradingCommonUtils.getTradeOpeningPriceImpact
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = void 0;
|
|
7
|
+
exports.getTradeOpeningPriceImpactAtMarket = exports.getTradeOpeningPriceImpact = exports.buildTradeOpeningPriceImpactContext = void 0;
|
|
8
8
|
const cumulVol_1 = require("../cumulVol");
|
|
9
9
|
const skew_1 = require("../skew");
|
|
10
|
+
// Export builder
|
|
11
|
+
var builder_1 = require("./builder");
|
|
12
|
+
Object.defineProperty(exports, "buildTradeOpeningPriceImpactContext", { enumerable: true, get: function () { return builder_1.buildTradeOpeningPriceImpactContext; } });
|
|
10
13
|
/**
|
|
11
14
|
* @dev Calculates all price impacts for trade opening
|
|
12
15
|
* @dev Mirrors contract's getTradeOpeningPriceImpact function
|
|
@@ -26,7 +29,7 @@ const getTradeOpeningPriceImpact = (input, context) => {
|
|
|
26
29
|
input.pairIndex, input.long, positionSizeUsd, false, // isPnlPositive - not relevant for opening
|
|
27
30
|
true, // open
|
|
28
31
|
0, // lastPosIncreaseBlock - not relevant for opening
|
|
29
|
-
context);
|
|
32
|
+
context.cumulVolContext);
|
|
30
33
|
// Calculate skew price impact (v10+ only)
|
|
31
34
|
const skewPriceImpactP = (0, skew_1.getTradeSkewPriceImpactWithChecks)({
|
|
32
35
|
collateralIndex: input.collateralIndex,
|
|
@@ -23,9 +23,10 @@ export type TradeOpeningPriceImpactInput = {
|
|
|
23
23
|
* @dev Context for trade opening price impact calculation
|
|
24
24
|
* Combines contexts from spread, cumul vol, and skew
|
|
25
25
|
*/
|
|
26
|
-
export type TradeOpeningPriceImpactContext =
|
|
27
|
-
skewContext: SkewPriceImpactContext;
|
|
26
|
+
export type TradeOpeningPriceImpactContext = {
|
|
28
27
|
collateralPriceUsd: number;
|
|
28
|
+
cumulVolContext: CumulVolContext;
|
|
29
|
+
skewContext: SkewPriceImpactContext;
|
|
29
30
|
};
|
|
30
31
|
/**
|
|
31
32
|
* @dev Result of trade opening price impact calculation
|
|
@@ -84,7 +84,7 @@ const calculateSkewPriceImpactP = (existingSkewToken, tradeSizeToken, skewDepth,
|
|
|
84
84
|
const signedTradeSize = tradeSizeToken * tradeSkewMultiplier;
|
|
85
85
|
// Formula: (existingSkew + tradeSize/2) / skewDepth
|
|
86
86
|
const numerator = signedExistingSkew + signedTradeSize / 2;
|
|
87
|
-
const priceImpactP =
|
|
87
|
+
const priceImpactP = numerator / skewDepth;
|
|
88
88
|
// Apply divider to match cumulative volume impact scale
|
|
89
89
|
return priceImpactP / PRICE_IMPACT_DIVIDER;
|
|
90
90
|
};
|