@lifi/perps-sdk 23.1.0 → 25.0.0
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/README.md +102 -56
- package/dist/cjs/client/PerpsClient.d.ts +3 -2
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +16 -9
- package/dist/cjs/client/PerpsClient.js.map +1 -1
- package/dist/cjs/decimal/arithmetic.d.ts +15 -0
- package/dist/cjs/decimal/arithmetic.d.ts.map +1 -0
- package/dist/cjs/decimal/arithmetic.js +53 -0
- package/dist/cjs/decimal/arithmetic.js.map +1 -0
- package/dist/cjs/decimal/big.d.ts +0 -1
- package/dist/cjs/decimal/big.d.ts.map +1 -1
- package/dist/cjs/decimal/big.js +0 -4
- package/dist/cjs/decimal/big.js.map +1 -1
- package/dist/cjs/decimal/compare.d.ts +6 -2
- package/dist/cjs/decimal/compare.d.ts.map +1 -1
- package/dist/cjs/decimal/compare.js +15 -2
- package/dist/cjs/decimal/compare.js.map +1 -1
- package/dist/cjs/decimal/convert.d.ts +10 -6
- package/dist/cjs/decimal/convert.d.ts.map +1 -1
- package/dist/cjs/decimal/convert.js +34 -21
- package/dist/cjs/decimal/convert.js.map +1 -1
- package/dist/cjs/decimal/decimalStringToBig.d.ts +5 -0
- package/dist/cjs/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/cjs/decimal/decimalStringToBig.js +25 -0
- package/dist/cjs/decimal/decimalStringToBig.js.map +1 -0
- package/dist/cjs/decimal/format.d.ts.map +1 -1
- package/dist/cjs/decimal/format.js +70 -52
- package/dist/cjs/decimal/format.js.map +1 -1
- package/dist/cjs/decimal/parse.d.ts +5 -4
- package/dist/cjs/decimal/parse.d.ts.map +1 -1
- package/dist/cjs/decimal/parse.js +43 -25
- package/dist/cjs/decimal/parse.js.map +1 -1
- package/dist/cjs/errors/invalidInput.d.ts +3 -0
- package/dist/cjs/errors/invalidInput.d.ts.map +1 -0
- package/dist/cjs/errors/invalidInput.js +9 -0
- package/dist/cjs/errors/invalidInput.js.map +1 -0
- package/dist/cjs/index.d.ts +15 -12
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +69 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/math/fills.d.ts +1 -1
- package/dist/cjs/math/fills.d.ts.map +1 -1
- package/dist/cjs/math/fills.js +28 -13
- package/dist/cjs/math/fills.js.map +1 -1
- package/dist/cjs/math/order.d.ts +27 -16
- package/dist/cjs/math/order.d.ts.map +1 -1
- package/dist/cjs/math/order.js +131 -134
- package/dist/cjs/math/order.js.map +1 -1
- package/dist/cjs/math/position.d.ts +85 -35
- package/dist/cjs/math/position.d.ts.map +1 -1
- package/dist/cjs/math/position.js +93 -94
- package/dist/cjs/math/position.js.map +1 -1
- package/dist/cjs/services/getGasRecommendation.js +1 -1
- package/dist/cjs/services/getGasRecommendation.js.map +1 -1
- package/dist/cjs/services/getQuote.d.ts +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/cjs/services/resolveSubscribeQuote.js +3 -2
- package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/cjs/transport/request.d.ts +1 -0
- package/dist/cjs/transport/request.d.ts.map +1 -1
- package/dist/cjs/transport/request.js +2 -2
- package/dist/cjs/transport/request.js.map +1 -1
- package/dist/cjs/types/api.d.ts +4 -0
- package/dist/cjs/types/api.d.ts.map +1 -1
- package/dist/cjs/types/provider.d.ts +9 -5
- package/dist/cjs/types/provider.d.ts.map +1 -1
- package/dist/cjs/types/withdrawal.d.ts +12 -4
- package/dist/cjs/types/withdrawal.d.ts.map +1 -1
- package/dist/cjs/utils/createSafeFunction.d.ts +2 -0
- package/dist/cjs/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/cjs/utils/createSafeFunction.js +15 -0
- package/dist/cjs/utils/createSafeFunction.js.map +1 -0
- package/dist/cjs/utils/timestampToIsoString.d.ts +3 -0
- package/dist/cjs/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/cjs/utils/timestampToIsoString.js +16 -0
- package/dist/cjs/utils/timestampToIsoString.js.map +1 -0
- package/dist/cjs/utils/warnOnce.d.ts +6 -0
- package/dist/cjs/utils/warnOnce.d.ts.map +1 -1
- package/dist/cjs/utils/warnOnce.js +19 -1
- package/dist/cjs/utils/warnOnce.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/websocket/PerpsWsClient.d.ts +2 -0
- package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/cjs/websocket/PerpsWsClient.js +14 -1
- package/dist/cjs/websocket/PerpsWsClient.js.map +1 -1
- package/dist/cjs/websocket/wsLog.d.ts +2 -0
- package/dist/cjs/websocket/wsLog.d.ts.map +1 -1
- package/dist/cjs/websocket/wsLog.js +9 -0
- package/dist/cjs/websocket/wsLog.js.map +1 -1
- package/dist/cjs/wire/orderAmounts.d.ts +3 -2
- package/dist/cjs/wire/orderAmounts.d.ts.map +1 -1
- package/dist/cjs/wire/orderAmounts.js +22 -21
- package/dist/cjs/wire/orderAmounts.js.map +1 -1
- package/dist/cjs/wire/refuel.d.ts +4 -1
- package/dist/cjs/wire/refuel.d.ts.map +1 -1
- package/dist/cjs/wire/refuel.js +23 -6
- package/dist/cjs/wire/refuel.js.map +1 -1
- package/dist/cjs/wire/transferable.js +3 -3
- package/dist/cjs/wire/transferable.js.map +1 -1
- package/dist/cjs/wire/withdraw.d.ts.map +1 -1
- package/dist/cjs/wire/withdraw.js +3 -3
- package/dist/cjs/wire/withdraw.js.map +1 -1
- package/dist/esm/client/PerpsClient.d.ts +17 -4
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +30 -8
- package/dist/esm/client/PerpsClient.js.map +1 -1
- package/dist/esm/decimal/arithmetic.d.ts +98 -0
- package/dist/esm/decimal/arithmetic.d.ts.map +1 -0
- package/dist/esm/decimal/arithmetic.js +126 -0
- package/dist/esm/decimal/arithmetic.js.map +1 -0
- package/dist/esm/decimal/big.d.ts +0 -2
- package/dist/esm/decimal/big.d.ts.map +1 -1
- package/dist/esm/decimal/big.js +0 -4
- package/dist/esm/decimal/big.js.map +1 -1
- package/dist/esm/decimal/compare.d.ts +40 -6
- package/dist/esm/decimal/compare.d.ts.map +1 -1
- package/dist/esm/decimal/compare.js +46 -6
- package/dist/esm/decimal/compare.js.map +1 -1
- package/dist/esm/decimal/convert.d.ts +50 -36
- package/dist/esm/decimal/convert.d.ts.map +1 -1
- package/dist/esm/decimal/convert.js +64 -42
- package/dist/esm/decimal/convert.js.map +1 -1
- package/dist/esm/decimal/decimalStringToBig.d.ts +25 -0
- package/dist/esm/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/esm/decimal/decimalStringToBig.js +37 -0
- package/dist/esm/decimal/decimalStringToBig.js.map +1 -0
- package/dist/esm/decimal/format.d.ts +4 -1
- package/dist/esm/decimal/format.d.ts.map +1 -1
- package/dist/esm/decimal/format.js +71 -70
- package/dist/esm/decimal/format.js.map +1 -1
- package/dist/esm/decimal/parse.d.ts +29 -13
- package/dist/esm/decimal/parse.d.ts.map +1 -1
- package/dist/esm/decimal/parse.js +61 -44
- package/dist/esm/decimal/parse.js.map +1 -1
- package/dist/esm/errors/invalidInput.d.ts +4 -0
- package/dist/esm/errors/invalidInput.d.ts.map +1 -0
- package/dist/esm/errors/invalidInput.js +7 -0
- package/dist/esm/errors/invalidInput.js.map +1 -0
- package/dist/esm/index.d.ts +15 -12
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +11 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/math/fills.d.ts +6 -3
- package/dist/esm/math/fills.d.ts.map +1 -1
- package/dist/esm/math/fills.js +31 -16
- package/dist/esm/math/fills.js.map +1 -1
- package/dist/esm/math/order.d.ts +84 -66
- package/dist/esm/math/order.d.ts.map +1 -1
- package/dist/esm/math/order.js +178 -175
- package/dist/esm/math/order.js.map +1 -1
- package/dist/esm/math/position.d.ts +155 -98
- package/dist/esm/math/position.d.ts.map +1 -1
- package/dist/esm/math/position.js +160 -156
- package/dist/esm/math/position.js.map +1 -1
- package/dist/esm/services/getGasRecommendation.js +1 -1
- package/dist/esm/services/getGasRecommendation.js.map +1 -1
- package/dist/esm/services/getQuote.d.ts +2 -2
- package/dist/esm/services/getQuote.js +1 -1
- package/dist/esm/services/resolveSubscribeQuote.d.ts +1 -1
- package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/esm/services/resolveSubscribeQuote.js +4 -3
- package/dist/esm/services/resolveSubscribeQuote.js.map +1 -1
- package/dist/esm/transport/request.d.ts +5 -0
- package/dist/esm/transport/request.d.ts.map +1 -1
- package/dist/esm/transport/request.js +2 -2
- package/dist/esm/transport/request.js.map +1 -1
- package/dist/esm/types/api.d.ts +9 -0
- package/dist/esm/types/api.d.ts.map +1 -1
- package/dist/esm/types/provider.d.ts +30 -16
- package/dist/esm/types/provider.d.ts.map +1 -1
- package/dist/esm/types/withdrawal.d.ts +32 -7
- package/dist/esm/types/withdrawal.d.ts.map +1 -1
- package/dist/esm/utils/createSafeFunction.d.ts +9 -0
- package/dist/esm/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/esm/utils/createSafeFunction.js +19 -0
- package/dist/esm/utils/createSafeFunction.js.map +1 -0
- package/dist/esm/utils/timestampToIsoString.d.ts +15 -0
- package/dist/esm/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/esm/utils/timestampToIsoString.js +24 -0
- package/dist/esm/utils/timestampToIsoString.js.map +1 -0
- package/dist/esm/utils/warnOnce.d.ts +27 -0
- package/dist/esm/utils/warnOnce.d.ts.map +1 -1
- package/dist/esm/utils/warnOnce.js +36 -0
- package/dist/esm/utils/warnOnce.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/websocket/PerpsWsClient.d.ts +7 -0
- package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/esm/websocket/PerpsWsClient.js +20 -2
- package/dist/esm/websocket/PerpsWsClient.js.map +1 -1
- package/dist/esm/websocket/wsLog.d.ts +12 -0
- package/dist/esm/websocket/wsLog.d.ts.map +1 -1
- package/dist/esm/websocket/wsLog.js +19 -0
- package/dist/esm/websocket/wsLog.js.map +1 -1
- package/dist/esm/wire/orderAmounts.d.ts +9 -7
- package/dist/esm/wire/orderAmounts.d.ts.map +1 -1
- package/dist/esm/wire/orderAmounts.js +24 -20
- package/dist/esm/wire/orderAmounts.js.map +1 -1
- package/dist/esm/wire/refuel.d.ts +24 -14
- package/dist/esm/wire/refuel.d.ts.map +1 -1
- package/dist/esm/wire/refuel.js +38 -17
- package/dist/esm/wire/refuel.js.map +1 -1
- package/dist/esm/wire/transferable.d.ts +2 -2
- package/dist/esm/wire/transferable.js +5 -5
- package/dist/esm/wire/transferable.js.map +1 -1
- package/dist/esm/wire/withdraw.d.ts.map +1 -1
- package/dist/esm/wire/withdraw.js +3 -3
- package/dist/esm/wire/withdraw.js.map +1 -1
- package/dist/types/client/PerpsClient.d.ts +17 -4
- package/dist/types/client/PerpsClient.d.ts.map +1 -1
- package/dist/types/decimal/arithmetic.d.ts +98 -0
- package/dist/types/decimal/arithmetic.d.ts.map +1 -0
- package/dist/types/decimal/big.d.ts +0 -2
- package/dist/types/decimal/big.d.ts.map +1 -1
- package/dist/types/decimal/compare.d.ts +40 -6
- package/dist/types/decimal/compare.d.ts.map +1 -1
- package/dist/types/decimal/convert.d.ts +50 -36
- package/dist/types/decimal/convert.d.ts.map +1 -1
- package/dist/types/decimal/decimalStringToBig.d.ts +25 -0
- package/dist/types/decimal/decimalStringToBig.d.ts.map +1 -0
- package/dist/types/decimal/format.d.ts +4 -1
- package/dist/types/decimal/format.d.ts.map +1 -1
- package/dist/types/decimal/parse.d.ts +29 -13
- package/dist/types/decimal/parse.d.ts.map +1 -1
- package/dist/types/errors/invalidInput.d.ts +4 -0
- package/dist/types/errors/invalidInput.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/math/fills.d.ts +6 -3
- package/dist/types/math/fills.d.ts.map +1 -1
- package/dist/types/math/order.d.ts +84 -66
- package/dist/types/math/order.d.ts.map +1 -1
- package/dist/types/math/position.d.ts +155 -98
- package/dist/types/math/position.d.ts.map +1 -1
- package/dist/types/services/getQuote.d.ts +2 -2
- package/dist/types/services/resolveSubscribeQuote.d.ts +1 -1
- package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -1
- package/dist/types/transport/request.d.ts +5 -0
- package/dist/types/transport/request.d.ts.map +1 -1
- package/dist/types/types/api.d.ts +9 -0
- package/dist/types/types/api.d.ts.map +1 -1
- package/dist/types/types/provider.d.ts +30 -16
- package/dist/types/types/provider.d.ts.map +1 -1
- package/dist/types/types/withdrawal.d.ts +32 -7
- package/dist/types/types/withdrawal.d.ts.map +1 -1
- package/dist/types/utils/createSafeFunction.d.ts +9 -0
- package/dist/types/utils/createSafeFunction.d.ts.map +1 -0
- package/dist/types/utils/timestampToIsoString.d.ts +15 -0
- package/dist/types/utils/timestampToIsoString.d.ts.map +1 -0
- package/dist/types/utils/warnOnce.d.ts +27 -0
- package/dist/types/utils/warnOnce.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/websocket/PerpsWsClient.d.ts +7 -0
- package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -1
- package/dist/types/websocket/wsLog.d.ts +12 -0
- package/dist/types/websocket/wsLog.d.ts.map +1 -1
- package/dist/types/wire/orderAmounts.d.ts +9 -7
- package/dist/types/wire/orderAmounts.d.ts.map +1 -1
- package/dist/types/wire/refuel.d.ts +24 -14
- package/dist/types/wire/refuel.d.ts.map +1 -1
- package/dist/types/wire/transferable.d.ts +2 -2
- package/dist/types/wire/withdraw.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/client/PerpsClient.ts +48 -10
- package/src/decimal/arithmetic.ts +170 -0
- package/src/decimal/big.ts +0 -5
- package/src/decimal/compare.ts +61 -11
- package/src/decimal/convert.ts +105 -63
- package/src/decimal/decimalStringToBig.ts +42 -0
- package/src/decimal/format.ts +81 -72
- package/src/decimal/parse.ts +78 -57
- package/src/errors/invalidInput.ts +10 -0
- package/src/index.ts +80 -12
- package/src/math/fills.ts +32 -17
- package/src/math/order.ts +279 -226
- package/src/math/position.ts +280 -196
- package/src/services/getGasRecommendation.ts +1 -1
- package/src/services/getQuote.ts +2 -2
- package/src/services/resolveSubscribeQuote.ts +4 -3
- package/src/transport/request.ts +7 -2
- package/src/types/api.ts +10 -0
- package/src/types/provider.ts +39 -16
- package/src/types/withdrawal.ts +35 -8
- package/src/utils/createSafeFunction.ts +20 -0
- package/src/utils/timestampToIsoString.ts +31 -0
- package/src/utils/warnOnce.ts +60 -0
- package/src/version.ts +1 -1
- package/src/websocket/PerpsWsClient.ts +25 -2
- package/src/websocket/wsLog.ts +44 -0
- package/src/wire/orderAmounts.ts +45 -26
- package/src/wire/refuel.ts +56 -20
- package/src/wire/transferable.ts +5 -5
- package/src/wire/withdraw.ts +3 -5
- package/dist/cjs/decimal/requireDecimal.d.ts +0 -4
- package/dist/cjs/decimal/requireDecimal.d.ts.map +0 -1
- package/dist/cjs/decimal/requireDecimal.js +0 -12
- package/dist/cjs/decimal/requireDecimal.js.map +0 -1
- package/dist/esm/decimal/requireDecimal.d.ts +0 -5
- package/dist/esm/decimal/requireDecimal.d.ts.map +0 -1
- package/dist/esm/decimal/requireDecimal.js +0 -7
- package/dist/esm/decimal/requireDecimal.js.map +0 -1
- package/dist/types/decimal/requireDecimal.d.ts +0 -5
- package/dist/types/decimal/requireDecimal.d.ts.map +0 -1
- package/src/decimal/requireDecimal.ts +0 -8
package/dist/esm/math/order.js
CHANGED
|
@@ -1,189 +1,195 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Display-tier order formulas. Every function takes and gives
|
|
3
|
-
*
|
|
2
|
+
* Display-tier order formulas. Every function takes and gives decimal
|
|
3
|
+
* strings; arithmetic is exact Big.js, with division to 40 decimal places.
|
|
4
|
+
* Each formula throws `ValidationError` on an input that does not match the
|
|
5
|
+
* decimal pattern and has a `safe*` pair that gives `undefined` in place of the throw.
|
|
4
6
|
*/
|
|
5
7
|
import { OrderSide, OrderStatus, PerpsErrorCode, PositionSide, } from '@lifi/perps-types';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { DivBig } from '../decimal/big.js';
|
|
9
|
+
import { bigToDecimalString, decimalStringToBig, decimalStringToDivBig, } from '../decimal/decimalStringToBig.js';
|
|
10
|
+
import { invalidInput } from '../errors/invalidInput.js';
|
|
8
11
|
import { PerpsError } from '../errors/PerpsError.js';
|
|
12
|
+
import { createSafeFunction } from '../utils/createSafeFunction.js';
|
|
9
13
|
import { isActiveOrderStatus, isRegularOrder, isTriggerOrder, } from '../utils/orderClassification.js';
|
|
10
14
|
import { calculateRealizedPnl } from './position.js';
|
|
11
15
|
/**
|
|
12
|
-
*
|
|
16
|
+
* Position size in asset units from margin: `marginUsd × leverage ÷ price`.
|
|
13
17
|
*
|
|
14
|
-
* @param marginUsd - Margin amount in USD
|
|
15
|
-
* @param leverage - Position leverage
|
|
16
|
-
* @param price - Current asset price
|
|
17
|
-
* @returns Position size in asset units
|
|
18
18
|
* @example
|
|
19
19
|
* ```ts
|
|
20
|
-
* calculateSize(100, 10, 2000) // 0.5 (ETH at $2000)
|
|
20
|
+
* calculateSize('100', '10', '2000') // '0.5' (ETH at $2000)
|
|
21
21
|
* ```
|
|
22
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern
|
|
23
|
+
* or `price` is zero.
|
|
22
24
|
* @public
|
|
23
25
|
*/
|
|
24
26
|
export function calculateSize(marginUsd, leverage, price) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
const notional = decimalStringToDivBig(marginUsd).times(decimalStringToBig(leverage));
|
|
28
|
+
const priceBig = decimalStringToBig(price);
|
|
29
|
+
if (priceBig.eq(0)) {
|
|
30
|
+
throw invalidInput('price', 'must not be zero');
|
|
27
31
|
}
|
|
28
|
-
|
|
29
|
-
return Number.NaN;
|
|
30
|
-
}
|
|
31
|
-
return new DivBig(marginUsd).times(leverage).div(price).toNumber();
|
|
32
|
+
return bigToDecimalString(notional.div(priceBig));
|
|
32
33
|
}
|
|
34
|
+
/** @public */
|
|
35
|
+
export const safeCalculateSize = createSafeFunction('calculateSize', calculateSize);
|
|
33
36
|
/**
|
|
34
|
-
*
|
|
37
|
+
* Estimated trading fee in USD: `sizeUsd × feeRate`.
|
|
35
38
|
*
|
|
36
|
-
* @param
|
|
37
|
-
* @
|
|
38
|
-
* @returns Estimated fee in USD
|
|
39
|
+
* @param feeRate - Fee rate as a fraction (`'0.00035'` for 0.035%).
|
|
40
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
39
41
|
* @public
|
|
40
42
|
*/
|
|
41
43
|
export function estimateFees(sizeUsd, feeRate) {
|
|
42
|
-
|
|
43
|
-
return Number.NaN;
|
|
44
|
-
}
|
|
45
|
-
return new DivBig(sizeUsd).times(feeRate).toNumber();
|
|
44
|
+
return bigToDecimalString(decimalStringToBig(sizeUsd).times(decimalStringToBig(feeRate)));
|
|
46
45
|
}
|
|
46
|
+
/** @public */
|
|
47
|
+
export const safeEstimateFees = createSafeFunction('estimateFees', estimateFees);
|
|
47
48
|
/**
|
|
48
|
-
* Apply slippage to
|
|
49
|
+
* Apply slippage to an order-entry price with exact decimal math: a buy
|
|
50
|
+
* multiplies by `1 + slippagePercent / 100`, a sell divides by it. The result
|
|
51
|
+
* is not rounded; snap it to the market tick before it goes to a venue.
|
|
49
52
|
*
|
|
50
|
-
* @param
|
|
51
|
-
* @
|
|
52
|
-
*
|
|
53
|
-
* @returns Price adjusted for slippage
|
|
53
|
+
* @param slippagePercent - Slippage tolerance as a percentage (`'0.5'` is 0.5%).
|
|
54
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
55
|
+
* decimal pattern, or `slippagePercent` is -100 or less.
|
|
54
56
|
* @public
|
|
55
57
|
*/
|
|
56
|
-
export function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (isBuy) {
|
|
62
|
-
return new DivBig(price).times(multiplier).toNumber();
|
|
63
|
-
}
|
|
64
|
-
if (multiplier.eq(0)) {
|
|
65
|
-
return price / multiplier.toNumber();
|
|
58
|
+
export function applySlippageToPrice(price, slippagePercent, isBuy) {
|
|
59
|
+
const base = decimalStringToDivBig(price);
|
|
60
|
+
const slippage = decimalStringToBig(slippagePercent);
|
|
61
|
+
if (slippage.lte(-100)) {
|
|
62
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, `Invalid \`slippagePercent\`: ${slippagePercent}.`);
|
|
66
63
|
}
|
|
67
|
-
|
|
64
|
+
const multiplier = new DivBig(slippage).div(100).plus(1);
|
|
65
|
+
return bigToDecimalString(isBuy ? base.times(multiplier) : base.div(multiplier));
|
|
68
66
|
}
|
|
67
|
+
/** @public */
|
|
68
|
+
export const safeApplySlippageToPrice = createSafeFunction('applySlippageToPrice', applySlippageToPrice);
|
|
69
69
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
70
|
+
* Expected gain or loss for a TP or SL trigger price. Positive is a profit,
|
|
71
|
+
* negative a loss.
|
|
72
72
|
*
|
|
73
|
-
* @param
|
|
74
|
-
* @param
|
|
75
|
-
* @
|
|
76
|
-
*
|
|
77
|
-
* @param margin - Margin amount in USD
|
|
73
|
+
* @param entryPrice - Position entry or current market price.
|
|
74
|
+
* @param margin - Margin amount in USD.
|
|
75
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
76
|
+
* decimal pattern, or `triggerPrice`, `entryPrice` or `margin` is zero.
|
|
78
77
|
* @public
|
|
79
78
|
*/
|
|
80
79
|
export function calculateExpectedPnl(triggerPrice, entryPrice, leverage, isLong, margin) {
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
const trigger = decimalStringToDivBig(triggerPrice);
|
|
81
|
+
const entry = decimalStringToBig(entryPrice);
|
|
82
|
+
const leverageBig = decimalStringToBig(leverage);
|
|
83
|
+
const marginBig = decimalStringToBig(margin);
|
|
84
|
+
if (trigger.eq(0)) {
|
|
85
|
+
throw invalidInput('triggerPrice', 'must not be zero');
|
|
83
86
|
}
|
|
84
|
-
if (
|
|
85
|
-
|
|
87
|
+
if (entry.eq(0)) {
|
|
88
|
+
throw invalidInput('entryPrice', 'must not be zero');
|
|
89
|
+
}
|
|
90
|
+
if (marginBig.eq(0)) {
|
|
91
|
+
throw invalidInput('margin', 'must not be zero');
|
|
86
92
|
}
|
|
87
93
|
const priceDiff = isLong
|
|
88
|
-
?
|
|
89
|
-
:
|
|
90
|
-
const percent = priceDiff.div(
|
|
91
|
-
const amount = percent.times(
|
|
92
|
-
return {
|
|
94
|
+
? trigger.minus(entry)
|
|
95
|
+
: trigger.times(-1).plus(entry);
|
|
96
|
+
const percent = priceDiff.div(entry).times(leverageBig).times(100);
|
|
97
|
+
const amount = percent.times(marginBig).div(100);
|
|
98
|
+
return {
|
|
99
|
+
amount: bigToDecimalString(amount),
|
|
100
|
+
percent: bigToDecimalString(percent),
|
|
101
|
+
};
|
|
93
102
|
}
|
|
103
|
+
/** @public */
|
|
104
|
+
export const safeCalculateExpectedPnl = createSafeFunction('calculateExpectedPnl', calculateExpectedPnl);
|
|
94
105
|
/**
|
|
95
|
-
*
|
|
106
|
+
* Trigger price that realises a percentage gain or loss.
|
|
96
107
|
*
|
|
97
|
-
* @param percent - Target gain
|
|
98
|
-
*
|
|
99
|
-
* @
|
|
100
|
-
* @param isLong - True for long positions, false for short
|
|
108
|
+
* @param percent - Target gain or loss percentage (positive = profitable
|
|
109
|
+
* direction).
|
|
110
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
101
111
|
* @public
|
|
102
112
|
*/
|
|
103
113
|
export function calculateTriggerPrice(percent, entryPrice, leverage, isLong) {
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
const percentBig = decimalStringToDivBig(percent);
|
|
115
|
+
const entry = decimalStringToBig(entryPrice);
|
|
116
|
+
const leverageBig = decimalStringToBig(leverage);
|
|
117
|
+
if (entry.eq(0)) {
|
|
118
|
+
throw invalidInput('entryPrice', 'must not be zero');
|
|
106
119
|
}
|
|
107
|
-
if (
|
|
108
|
-
|
|
120
|
+
if (leverageBig.eq(0)) {
|
|
121
|
+
throw invalidInput('leverage', 'must not be zero');
|
|
109
122
|
}
|
|
110
|
-
const priceDelta =
|
|
111
|
-
|
|
112
|
-
.div(new DivBig(leverage).times(100));
|
|
113
|
-
const entry = new DivBig(entryPrice);
|
|
114
|
-
return (isLong ? entry.plus(priceDelta) : entry.minus(priceDelta)).toNumber();
|
|
123
|
+
const priceDelta = percentBig.times(entry).div(leverageBig.times(100));
|
|
124
|
+
return bigToDecimalString(isLong ? entry.plus(priceDelta) : entry.minus(priceDelta));
|
|
115
125
|
}
|
|
126
|
+
/** @public */
|
|
127
|
+
export const safeCalculateTriggerPrice = createSafeFunction('calculateTriggerPrice', calculateTriggerPrice);
|
|
116
128
|
/**
|
|
117
|
-
*
|
|
129
|
+
* Percentage gain or loss that a trigger price realises.
|
|
118
130
|
*
|
|
119
|
-
* @
|
|
120
|
-
* @param entryPrice - Position entry price
|
|
121
|
-
* @param leverage - Position leverage multiplier
|
|
122
|
-
* @param isLong - True for long positions, false for short
|
|
131
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
123
132
|
* @public
|
|
124
133
|
*/
|
|
125
134
|
export function calculateTriggerPercent(price, entryPrice, leverage, isLong) {
|
|
126
|
-
|
|
127
|
-
|
|
135
|
+
const priceBig = decimalStringToDivBig(price);
|
|
136
|
+
const entry = decimalStringToBig(entryPrice);
|
|
137
|
+
const leverageBig = decimalStringToBig(leverage);
|
|
138
|
+
if (entry.eq(0)) {
|
|
139
|
+
throw invalidInput('entryPrice', 'must not be zero');
|
|
128
140
|
}
|
|
129
|
-
if (
|
|
130
|
-
|
|
141
|
+
if (leverageBig.eq(0)) {
|
|
142
|
+
throw invalidInput('leverage', 'must not be zero');
|
|
131
143
|
}
|
|
132
144
|
const priceDiff = isLong
|
|
133
|
-
?
|
|
134
|
-
:
|
|
135
|
-
return priceDiff.div(
|
|
145
|
+
? priceBig.minus(entry)
|
|
146
|
+
: priceBig.times(-1).plus(entry);
|
|
147
|
+
return bigToDecimalString(priceDiff.div(entry).times(leverageBig).times(100));
|
|
136
148
|
}
|
|
149
|
+
/** @public */
|
|
150
|
+
export const safeCalculateTriggerPercent = createSafeFunction('calculateTriggerPercent', calculateTriggerPercent);
|
|
137
151
|
/**
|
|
138
|
-
*
|
|
152
|
+
* Realized PnL as a percentage of the position value at close:
|
|
153
|
+
* `realizedPnl ÷ (|size| × price) × 100`.
|
|
139
154
|
*
|
|
140
|
-
* @
|
|
141
|
-
*
|
|
142
|
-
* @param price - Price at close
|
|
143
|
-
* @returns PnL as a percentage of position value
|
|
155
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
156
|
+
* decimal pattern or `size × price` is zero.
|
|
144
157
|
* @public
|
|
145
158
|
*/
|
|
146
159
|
export function calculateRealizedPnlPercent(realizedPnl, size, price) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
160
|
+
const pnl = decimalStringToDivBig(realizedPnl);
|
|
161
|
+
const positionValue = decimalStringToBig(size)
|
|
162
|
+
.abs()
|
|
163
|
+
.times(decimalStringToBig(price));
|
|
151
164
|
if (positionValue.eq(0)) {
|
|
152
|
-
|
|
165
|
+
throw invalidInput('size × price', 'must not be zero');
|
|
153
166
|
}
|
|
154
|
-
return
|
|
167
|
+
return bigToDecimalString(pnl.div(positionValue).times(100));
|
|
155
168
|
}
|
|
169
|
+
/** @public */
|
|
170
|
+
export const safeCalculateRealizedPnlPercent = createSafeFunction('calculateRealizedPnlPercent', calculateRealizedPnlPercent);
|
|
156
171
|
/**
|
|
157
172
|
* Walk one side of an orderbook to fill `sizeUsd` notional, accumulating base
|
|
158
173
|
* size and notional level-by-level to derive the VWAP fill. Levels are consumed
|
|
159
174
|
* in array order — the caller passes asks for a buy and bids for a sell, each
|
|
160
175
|
* already ordered best-price-first. When the book cannot absorb the full
|
|
161
176
|
* notional, the walk stops at the last level and flags `insufficientLiquidity`,
|
|
162
|
-
* returning the best obtainable fill.
|
|
163
|
-
* fields with `insufficientLiquidity` set.
|
|
177
|
+
* returning the best obtainable fill.
|
|
164
178
|
*
|
|
165
|
-
* @throws {PerpsError} `ValidationError` when a level's `price`
|
|
166
|
-
* does not
|
|
179
|
+
* @throws {PerpsError} `ValidationError` when `sizeUsd` or a level's `price`
|
|
180
|
+
* or `size` does not match the decimal pattern.
|
|
167
181
|
* @public
|
|
168
182
|
*/
|
|
169
183
|
export function walkOrderbook(levels, sizeUsd) {
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
baseSize: Number.NaN,
|
|
173
|
-
filledNotional: Number.NaN,
|
|
174
|
-
vwap: Number.NaN,
|
|
175
|
-
insufficientLiquidity: true,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
let remaining = new DivBig(sizeUsd);
|
|
184
|
+
let remaining = decimalStringToDivBig(sizeUsd);
|
|
179
185
|
let baseSize = new DivBig(0);
|
|
180
186
|
let filledNotional = new DivBig(0);
|
|
181
187
|
for (const level of levels) {
|
|
182
188
|
if (remaining.lte(0)) {
|
|
183
189
|
break;
|
|
184
190
|
}
|
|
185
|
-
const
|
|
186
|
-
const levelNotional = size.times(price);
|
|
191
|
+
const price = decimalStringToDivBig(level.price);
|
|
192
|
+
const levelNotional = decimalStringToBig(level.size).times(price);
|
|
187
193
|
const take = remaining.lt(levelNotional) ? remaining : levelNotional;
|
|
188
194
|
if (take.eq(0)) {
|
|
189
195
|
continue;
|
|
@@ -193,20 +199,16 @@ export function walkOrderbook(levels, sizeUsd) {
|
|
|
193
199
|
remaining = remaining.minus(take);
|
|
194
200
|
}
|
|
195
201
|
return {
|
|
196
|
-
baseSize: baseSize
|
|
197
|
-
filledNotional: filledNotional
|
|
198
|
-
vwap: baseSize.eq(0)
|
|
202
|
+
baseSize: bigToDecimalString(baseSize),
|
|
203
|
+
filledNotional: bigToDecimalString(filledNotional),
|
|
204
|
+
vwap: baseSize.eq(0)
|
|
205
|
+
? '0'
|
|
206
|
+
: bigToDecimalString(filledNotional.div(baseSize)),
|
|
199
207
|
insufficientLiquidity: remaining.gt(0),
|
|
200
208
|
};
|
|
201
209
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
return { price: new DivBig(level.price), size: new DivBig(level.size) };
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
throw new PerpsError(PerpsErrorCode.ValidationError, `Malformed orderbook level: price='${level.price}', size='${level.size}'`);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
+
/** @public */
|
|
211
|
+
export const safeWalkOrderbook = createSafeFunction('walkOrderbook', walkOrderbook);
|
|
210
212
|
/**
|
|
211
213
|
* Build a {@link Quote} from a resolved market, its live {@link MarketContext},
|
|
212
214
|
* and its orderbook snapshot. Pure: walks the relevant side (buy → asks,
|
|
@@ -214,39 +216,40 @@ function parseLevel(level) {
|
|
|
214
216
|
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
215
217
|
* the market's `funding` (`null` for spot, which has none).
|
|
216
218
|
*
|
|
217
|
-
* @throws {PerpsError} `ValidationError` when
|
|
218
|
-
*
|
|
219
|
-
* not finite (a non-finite `sizeUsd`, mark price or taker fee).
|
|
219
|
+
* @throws {PerpsError} `ValidationError` when `sizeUsd`, the mark price, the
|
|
220
|
+
* taker fee or a book level does not match the decimal pattern.
|
|
220
221
|
* @public
|
|
221
222
|
*/
|
|
222
223
|
export function buildQuote(input) {
|
|
223
224
|
const { market, price, side, sizeUsd, feeTier } = input;
|
|
224
|
-
const markPrice =
|
|
225
|
+
const markPrice = decimalStringToDivBig(price.markPrice);
|
|
225
226
|
const levels = side === 'buy' ? input.asks : input.bids;
|
|
226
227
|
const walk = walkOrderbook(levels, sizeUsd);
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
const vwap = decimalStringToBig(walk.vwap);
|
|
229
|
+
const priceImpactBps = markPrice.eq(0) || vwap.eq(0)
|
|
230
|
+
? '0'
|
|
231
|
+
: bigToDecimalString(vwap.minus(markPrice).div(markPrice).abs().times(10_000));
|
|
231
232
|
return {
|
|
232
233
|
provider: input.provider,
|
|
233
234
|
symbol: input.symbol,
|
|
234
235
|
marketId: market.id,
|
|
235
236
|
type: input.type,
|
|
236
237
|
side,
|
|
237
|
-
sizeUsd:
|
|
238
|
-
baseSize:
|
|
238
|
+
sizeUsd: bigToDecimalString(decimalStringToBig(sizeUsd)),
|
|
239
|
+
baseSize: walk.baseSize,
|
|
239
240
|
markPrice: price.markPrice,
|
|
240
|
-
expectedFillPrice:
|
|
241
|
-
priceImpactBps
|
|
241
|
+
expectedFillPrice: walk.vwap,
|
|
242
|
+
priceImpactBps,
|
|
242
243
|
feeTier,
|
|
243
244
|
isDefaultFeeTier: true,
|
|
244
|
-
feeUsd:
|
|
245
|
+
feeUsd: estimateFees(walk.filledNotional, feeTier.taker),
|
|
245
246
|
funding: price.funding ?? null,
|
|
246
247
|
insufficientLiquidity: walk.insufficientLiquidity,
|
|
247
248
|
timestamp: input.timestamp,
|
|
248
249
|
};
|
|
249
250
|
}
|
|
251
|
+
/** @public */
|
|
252
|
+
export const safeBuildQuote = createSafeFunction('buildQuote', buildQuote);
|
|
250
253
|
/**
|
|
251
254
|
* Pick the matching open position for an order's market, if any.
|
|
252
255
|
*
|
|
@@ -265,90 +268,86 @@ export function findMatchingPosition(marketId, positions) {
|
|
|
265
268
|
* position can only close what's open.
|
|
266
269
|
*
|
|
267
270
|
* Inputs are non-negative magnitudes.
|
|
271
|
+
*
|
|
272
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
268
273
|
* @public
|
|
269
274
|
*/
|
|
270
275
|
export function resolveCloseSize(orderSize, positionSize) {
|
|
271
|
-
|
|
272
|
-
|
|
276
|
+
const order = decimalStringToBig(orderSize);
|
|
277
|
+
const position = decimalStringToBig(positionSize);
|
|
278
|
+
if (order.eq(0)) {
|
|
279
|
+
return bigToDecimalString(position);
|
|
273
280
|
}
|
|
274
|
-
return
|
|
281
|
+
return bigToDecimalString(order.lt(position) ? order : position);
|
|
275
282
|
}
|
|
283
|
+
/** @public */
|
|
284
|
+
export const safeResolveCloseSize = createSafeFunction('resolveCloseSize', resolveCloseSize);
|
|
276
285
|
/**
|
|
277
286
|
* Expected rPnL for a resting limit order against a matching position.
|
|
278
287
|
*
|
|
279
288
|
* Reducing requires opposite sides (long position + SELL, short position +
|
|
280
|
-
* BUY). Same-side orders add to the position and have no rPnL → `
|
|
289
|
+
* BUY). Same-side orders add to the position and have no rPnL → `undefined`.
|
|
281
290
|
* Projects `remainingSize`, because an already-filled quantity has realised
|
|
282
291
|
* its PnL at the fill price rather than at this order's limit price. A
|
|
283
292
|
* `remainingSize` of zero leaves nothing to project.
|
|
284
293
|
*/
|
|
285
294
|
function regularOrderRealizedPnl(order, position) {
|
|
286
295
|
if (!position || !isActiveOrderStatus(order.status)) {
|
|
287
|
-
return
|
|
296
|
+
return undefined;
|
|
288
297
|
}
|
|
289
298
|
const isLong = position.side === PositionSide.LONG;
|
|
290
299
|
const reducesPosition = (isLong && order.side === OrderSide.SELL) ||
|
|
291
300
|
(!isLong && order.side === OrderSide.BUY);
|
|
292
301
|
if (!reducesPosition) {
|
|
293
|
-
return
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
if (order.price === undefined) {
|
|
305
|
+
return undefined;
|
|
294
306
|
}
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (!Number.isFinite(limitPrice) ||
|
|
300
|
-
!Number.isFinite(entryPrice) ||
|
|
301
|
-
!Number.isFinite(orderSize) ||
|
|
302
|
-
!Number.isFinite(positionSize) ||
|
|
303
|
-
positionSize <= 0) {
|
|
304
|
-
return null;
|
|
307
|
+
const orderSize = decimalStringToBig(order.remainingSize).abs();
|
|
308
|
+
const positionSize = decimalStringToBig(position.size).abs();
|
|
309
|
+
if (positionSize.lte(0)) {
|
|
310
|
+
return undefined;
|
|
305
311
|
}
|
|
306
312
|
// `resolveCloseSize` reads a zero size as "close the whole position", a
|
|
307
313
|
// convention that belongs to an order's submitted size. `remainingSize` is
|
|
308
314
|
// the unfilled quantity, so zero means nothing is left to fill.
|
|
309
|
-
if (orderSize
|
|
310
|
-
return
|
|
315
|
+
if (orderSize.eq(0)) {
|
|
316
|
+
return undefined;
|
|
311
317
|
}
|
|
312
|
-
const closeSize = resolveCloseSize(orderSize, positionSize);
|
|
313
318
|
return calculateRealizedPnl({
|
|
314
|
-
entryPrice,
|
|
315
|
-
closePrice:
|
|
316
|
-
closeSize,
|
|
319
|
+
entryPrice: position.entryPrice,
|
|
320
|
+
closePrice: order.price,
|
|
321
|
+
closeSize: resolveCloseSize(bigToDecimalString(orderSize), bigToDecimalString(positionSize)),
|
|
317
322
|
isLong,
|
|
318
323
|
});
|
|
319
324
|
}
|
|
320
325
|
/** Project the unfilled closing quantity of an active trigger at its trigger price. */
|
|
321
326
|
function triggerOrderRealizedPnl(order, position) {
|
|
322
327
|
if (!position ||
|
|
328
|
+
order.triggerPrice === undefined ||
|
|
323
329
|
!isActiveOrderStatus(order.status) ||
|
|
324
330
|
order.status === OrderStatus.PENDING) {
|
|
325
|
-
return
|
|
331
|
+
return undefined;
|
|
326
332
|
}
|
|
327
333
|
const isLong = position.side === PositionSide.LONG;
|
|
328
334
|
if ((isLong && order.side !== OrderSide.SELL) ||
|
|
329
335
|
(!isLong && order.side !== OrderSide.BUY)) {
|
|
330
|
-
return
|
|
336
|
+
return undefined;
|
|
331
337
|
}
|
|
332
|
-
const
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
if (!Number.isFinite(triggerPrice) ||
|
|
337
|
-
!Number.isFinite(entryPrice) ||
|
|
338
|
-
!Number.isFinite(orderSize) ||
|
|
339
|
-
!Number.isFinite(positionSize) ||
|
|
340
|
-
positionSize <= 0) {
|
|
341
|
-
return null;
|
|
338
|
+
const orderSize = decimalStringToBig(order.remainingSize).abs();
|
|
339
|
+
const positionSize = decimalStringToBig(position.size).abs();
|
|
340
|
+
if (positionSize.lte(0)) {
|
|
341
|
+
return undefined;
|
|
342
342
|
}
|
|
343
|
-
if (orderSize
|
|
344
|
-
(
|
|
345
|
-
return
|
|
343
|
+
if (orderSize.eq(0) &&
|
|
344
|
+
(!decimalStringToBig(order.originalSize).eq(0) || !order.reduceOnly)) {
|
|
345
|
+
return undefined;
|
|
346
346
|
}
|
|
347
|
-
const closeSize = resolveCloseSize(orderSize, positionSize);
|
|
348
347
|
return calculateRealizedPnl({
|
|
349
|
-
entryPrice,
|
|
350
|
-
closePrice: triggerPrice,
|
|
351
|
-
closeSize,
|
|
348
|
+
entryPrice: position.entryPrice,
|
|
349
|
+
closePrice: order.triggerPrice,
|
|
350
|
+
closeSize: resolveCloseSize(bigToDecimalString(orderSize), bigToDecimalString(positionSize)),
|
|
352
351
|
isLong,
|
|
353
352
|
});
|
|
354
353
|
}
|
|
@@ -359,7 +358,9 @@ function triggerOrderRealizedPnl(order, position) {
|
|
|
359
358
|
* nothing.
|
|
360
359
|
*
|
|
361
360
|
* @returns Realised PnL if the order would reduce the position, otherwise
|
|
362
|
-
* `
|
|
361
|
+
* `undefined`.
|
|
362
|
+
* @throws {PerpsError} `ValidationError` when a price or size on the order or
|
|
363
|
+
* the position does not match the decimal pattern.
|
|
363
364
|
* @public
|
|
364
365
|
*/
|
|
365
366
|
export function estimateRealizedPnl(order, position) {
|
|
@@ -369,6 +370,8 @@ export function estimateRealizedPnl(order, position) {
|
|
|
369
370
|
if (isRegularOrder(order)) {
|
|
370
371
|
return regularOrderRealizedPnl(order, position);
|
|
371
372
|
}
|
|
372
|
-
return
|
|
373
|
+
return undefined;
|
|
373
374
|
}
|
|
375
|
+
/** @public */
|
|
376
|
+
export const safeEstimateRealizedPnl = createSafeFunction('estimateRealizedPnl', estimateRealizedPnl);
|
|
374
377
|
//# sourceMappingURL=order.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAML,SAAS,EACT,WAAW,EACX,cAAc,EAEd,YAAY,GAMb,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAA;IACvC,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;AACpE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAe;IAC3D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,eAAuB,EACvB,KAAc;IAEd,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;IACvD,CAAC;IACD,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;AACrD,CAAC;AAcD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,UAAkB,EAClB,QAAgB,EAChB,MAAe,EACf,MAAc;IAEd,IAAI,CAAC,YAAY,IAAI,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAA;IACpD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5C,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAA;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,UAAkB,EAClB,QAAgB,EAChB,MAAe;IAEf,IAAI,UAAU,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;SACnC,KAAK,CAAC,UAAU,CAAC;SACjB,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;IACpC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC/E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,UAAkB,EAClB,QAAgB,EAChB,MAAe;IAEf,IAAI,UAAU,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QACrC,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,WAAmB,EACnB,IAAY,EACZ,KAAa;IAEb,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,GAAG,CAAA;IACnB,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACzD,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAA;IACV,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;AACzE,CAAC;AAcD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAwB,EACxB,OAAe;IAEf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,GAAG;YACpB,cAAc,EAAE,MAAM,CAAC,GAAG;YAC1B,IAAI,EAAE,MAAM,CAAC,GAAG;YAChB,qBAAqB,EAAE,IAAI;SAC5B,CAAA;IACH,CAAC;IACD,IAAI,SAAS,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,QAAQ,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,cAAc,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,MAAK;QACP,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAA;QACpE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,SAAQ;QACV,CAAC;QACD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QACzC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAC7B,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;QACzC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;QAClE,qBAAqB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;KACvC,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,qCAAqC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,GAAG,CAC1E,CAAA;IACH,CAAC;AACH,CAAC;AAkBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,MAAM,cAAc,GAClB,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,CAAA;IAC5D,MAAM,MAAM,GAAG,YAAY,CACzB,IAAI,CAAC,cAAc,EACnB,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CACjC,CAAA;IACD,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI;QACJ,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC;QACvC,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,iBAAiB,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnD,cAAc,EAAE,qBAAqB,CAAC,cAAc,CAAC;QACrD,OAAO;QACP,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,SAA8B;IAE9B,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,YAAoB;IAEpB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,YAAY,CAAA;IACrB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAC9B,KAAmB,EACnB,QAA8B;IAE9B,IAAI,CAAC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAA;IAClD,MAAM,eAAe,GACnB,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;QACzC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,YAAY,IAAI,CAAC,EACjB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,gEAAgE;IAChE,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IAC3D,OAAO,oBAAoB,CAAC;QAC1B,UAAU;QACV,UAAU,EAAE,UAAU;QACtB,SAAS;QACT,MAAM;KACP,CAAC,CAAA;AACJ,CAAC;AAED,uFAAuF;AACvF,SAAS,uBAAuB,CAC9B,KAAmB,EACnB,QAA8B;IAE9B,IACE,CAAC,QAAQ;QACT,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO,EACpC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAA;IAClD,IACE,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;QACzC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,CAAC,EACzC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,YAAY,IAAI,CAAC,EACjB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IACE,SAAS,KAAK,CAAC;QACf,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAClE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IAC3D,OAAO,oBAAoB,CAAC;QAC1B,UAAU;QACV,UAAU,EAAE,YAAY;QACxB,SAAS;QACT,MAAM;KACP,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAY,EACZ,QAA8B;IAE9B,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"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"}
|