@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
|
@@ -1,41 +1,47 @@
|
|
|
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 { type FeeTier, type Market, type MarketContext, type Order, type OrderbookLevel, type Position, type Quote, type QuoteSide, type TradeType } from '@lifi/perps-types';
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
9
|
+
* Position size in asset units from margin: `marginUsd × leverage ÷ price`.
|
|
8
10
|
*
|
|
9
|
-
* @param marginUsd - Margin amount in USD
|
|
10
|
-
* @param leverage - Position leverage
|
|
11
|
-
* @param price - Current asset price
|
|
12
|
-
* @returns Position size in asset units
|
|
13
11
|
* @example
|
|
14
12
|
* ```ts
|
|
15
|
-
* calculateSize(100, 10, 2000) // 0.5 (ETH at $2000)
|
|
13
|
+
* calculateSize('100', '10', '2000') // '0.5' (ETH at $2000)
|
|
16
14
|
* ```
|
|
15
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern
|
|
16
|
+
* or `price` is zero.
|
|
17
17
|
* @public
|
|
18
18
|
*/
|
|
19
|
-
export declare function calculateSize(marginUsd:
|
|
19
|
+
export declare function calculateSize(marginUsd: string, leverage: string, price: string): string;
|
|
20
|
+
/** @public */
|
|
21
|
+
export declare const safeCalculateSize: (marginUsd: string, leverage: string, price: string) => string | undefined;
|
|
20
22
|
/**
|
|
21
|
-
*
|
|
23
|
+
* Estimated trading fee in USD: `sizeUsd × feeRate`.
|
|
22
24
|
*
|
|
23
|
-
* @param
|
|
24
|
-
* @
|
|
25
|
-
* @returns Estimated fee in USD
|
|
25
|
+
* @param feeRate - Fee rate as a fraction (`'0.00035'` for 0.035%).
|
|
26
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
26
27
|
* @public
|
|
27
28
|
*/
|
|
28
|
-
export declare function estimateFees(sizeUsd:
|
|
29
|
+
export declare function estimateFees(sizeUsd: string, feeRate: string): string;
|
|
30
|
+
/** @public */
|
|
31
|
+
export declare const safeEstimateFees: (sizeUsd: string, feeRate: string) => string | undefined;
|
|
29
32
|
/**
|
|
30
|
-
* Apply slippage to
|
|
33
|
+
* Apply slippage to an order-entry price with exact decimal math: a buy
|
|
34
|
+
* multiplies by `1 + slippagePercent / 100`, a sell divides by it. The result
|
|
35
|
+
* is not rounded; snap it to the market tick before it goes to a venue.
|
|
31
36
|
*
|
|
32
|
-
* @param
|
|
33
|
-
* @
|
|
34
|
-
*
|
|
35
|
-
* @returns Price adjusted for slippage
|
|
37
|
+
* @param slippagePercent - Slippage tolerance as a percentage (`'0.5'` is 0.5%).
|
|
38
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
39
|
+
* decimal pattern, or `slippagePercent` is -100 or less.
|
|
36
40
|
* @public
|
|
37
41
|
*/
|
|
38
|
-
export declare function
|
|
42
|
+
export declare function applySlippageToPrice(price: string, slippagePercent: string, isBuy: boolean): string;
|
|
43
|
+
/** @public */
|
|
44
|
+
export declare const safeApplySlippageToPrice: (price: string, slippagePercent: string, isBuy: boolean) => string | undefined;
|
|
39
45
|
/**
|
|
40
46
|
* Signed expected PnL for a trigger price — see {@link calculateExpectedPnl}.
|
|
41
47
|
*
|
|
@@ -43,61 +49,63 @@ export declare function applySlippage(price: number, slippagePercent: number, is
|
|
|
43
49
|
*/
|
|
44
50
|
export interface ExpectedPnl {
|
|
45
51
|
/** Signed expected profit/loss in USD. */
|
|
46
|
-
amount:
|
|
47
|
-
/** Signed expected return as a percentage (10 means 10%). */
|
|
48
|
-
percent:
|
|
52
|
+
amount: string;
|
|
53
|
+
/** Signed expected return as a percentage (`'10'` means 10%). */
|
|
54
|
+
percent: string;
|
|
49
55
|
}
|
|
50
56
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
57
|
+
* Expected gain or loss for a TP or SL trigger price. Positive is a profit,
|
|
58
|
+
* negative a loss.
|
|
53
59
|
*
|
|
54
|
-
* @param
|
|
55
|
-
* @param
|
|
56
|
-
* @
|
|
57
|
-
*
|
|
58
|
-
* @param margin - Margin amount in USD
|
|
60
|
+
* @param entryPrice - Position entry or current market price.
|
|
61
|
+
* @param margin - Margin amount in USD.
|
|
62
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
63
|
+
* decimal pattern, or `triggerPrice`, `entryPrice` or `margin` is zero.
|
|
59
64
|
* @public
|
|
60
65
|
*/
|
|
61
|
-
export declare function calculateExpectedPnl(triggerPrice:
|
|
66
|
+
export declare function calculateExpectedPnl(triggerPrice: string, entryPrice: string, leverage: string, isLong: boolean, margin: string): ExpectedPnl;
|
|
67
|
+
/** @public */
|
|
68
|
+
export declare const safeCalculateExpectedPnl: (triggerPrice: string, entryPrice: string, leverage: string, isLong: boolean, margin: string) => ExpectedPnl | undefined;
|
|
62
69
|
/**
|
|
63
|
-
*
|
|
70
|
+
* Trigger price that realises a percentage gain or loss.
|
|
64
71
|
*
|
|
65
|
-
* @param percent - Target gain
|
|
66
|
-
*
|
|
67
|
-
* @
|
|
68
|
-
* @param isLong - True for long positions, false for short
|
|
72
|
+
* @param percent - Target gain or loss percentage (positive = profitable
|
|
73
|
+
* direction).
|
|
74
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
69
75
|
* @public
|
|
70
76
|
*/
|
|
71
|
-
export declare function calculateTriggerPrice(percent:
|
|
77
|
+
export declare function calculateTriggerPrice(percent: string, entryPrice: string, leverage: string, isLong: boolean): string;
|
|
78
|
+
/** @public */
|
|
79
|
+
export declare const safeCalculateTriggerPrice: (percent: string, entryPrice: string, leverage: string, isLong: boolean) => string | undefined;
|
|
72
80
|
/**
|
|
73
|
-
*
|
|
81
|
+
* Percentage gain or loss that a trigger price realises.
|
|
74
82
|
*
|
|
75
|
-
* @
|
|
76
|
-
* @param entryPrice - Position entry price
|
|
77
|
-
* @param leverage - Position leverage multiplier
|
|
78
|
-
* @param isLong - True for long positions, false for short
|
|
83
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
79
84
|
* @public
|
|
80
85
|
*/
|
|
81
|
-
export declare function calculateTriggerPercent(price:
|
|
86
|
+
export declare function calculateTriggerPercent(price: string, entryPrice: string, leverage: string, isLong: boolean): string;
|
|
87
|
+
/** @public */
|
|
88
|
+
export declare const safeCalculateTriggerPercent: (price: string, entryPrice: string, leverage: string, isLong: boolean) => string | undefined;
|
|
82
89
|
/**
|
|
83
|
-
*
|
|
90
|
+
* Realized PnL as a percentage of the position value at close:
|
|
91
|
+
* `realizedPnl ÷ (|size| × price) × 100`.
|
|
84
92
|
*
|
|
85
|
-
* @
|
|
86
|
-
*
|
|
87
|
-
* @param price - Price at close
|
|
88
|
-
* @returns PnL as a percentage of position value
|
|
93
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
94
|
+
* decimal pattern or `size × price` is zero.
|
|
89
95
|
* @public
|
|
90
96
|
*/
|
|
91
|
-
export declare function calculateRealizedPnlPercent(realizedPnl:
|
|
97
|
+
export declare function calculateRealizedPnlPercent(realizedPnl: string, size: string, price: string): string;
|
|
98
|
+
/** @public */
|
|
99
|
+
export declare const safeCalculateRealizedPnlPercent: (realizedPnl: string, size: string, price: string) => string | undefined;
|
|
92
100
|
/** Result of {@link walkOrderbook} — the fill obtained for a USD-notional walk. */
|
|
93
101
|
interface BookWalk {
|
|
94
102
|
/** Base amount filled. */
|
|
95
|
-
baseSize:
|
|
103
|
+
baseSize: string;
|
|
96
104
|
/** Notional actually filled in USD (equals the requested size unless the book ran dry). */
|
|
97
|
-
filledNotional:
|
|
98
|
-
/** Volume-weighted average fill price, or 0 when the book is empty. */
|
|
99
|
-
vwap:
|
|
100
|
-
/** True when the levels could not absorb the requested notional
|
|
105
|
+
filledNotional: string;
|
|
106
|
+
/** Volume-weighted average fill price, or `'0'` when the book is empty. */
|
|
107
|
+
vwap: string;
|
|
108
|
+
/** True when the levels could not absorb the requested notional. */
|
|
101
109
|
insufficientLiquidity: boolean;
|
|
102
110
|
}
|
|
103
111
|
/**
|
|
@@ -106,21 +114,22 @@ interface BookWalk {
|
|
|
106
114
|
* in array order — the caller passes asks for a buy and bids for a sell, each
|
|
107
115
|
* already ordered best-price-first. When the book cannot absorb the full
|
|
108
116
|
* notional, the walk stops at the last level and flags `insufficientLiquidity`,
|
|
109
|
-
* returning the best obtainable fill.
|
|
110
|
-
* fields with `insufficientLiquidity` set.
|
|
117
|
+
* returning the best obtainable fill.
|
|
111
118
|
*
|
|
112
|
-
* @throws {PerpsError} `ValidationError` when a level's `price`
|
|
113
|
-
* does not
|
|
119
|
+
* @throws {PerpsError} `ValidationError` when `sizeUsd` or a level's `price`
|
|
120
|
+
* or `size` does not match the decimal pattern.
|
|
114
121
|
* @public
|
|
115
122
|
*/
|
|
116
|
-
export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd:
|
|
123
|
+
export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd: string): BookWalk;
|
|
124
|
+
/** @public */
|
|
125
|
+
export declare const safeWalkOrderbook: (levels: OrderbookLevel[], sizeUsd: string) => BookWalk | undefined;
|
|
117
126
|
/** Inputs to {@link buildQuote} — the resolved market, its live price, its book, and the trade ask. */
|
|
118
127
|
interface BuildQuoteInput {
|
|
119
128
|
provider: string;
|
|
120
129
|
symbol: string;
|
|
121
130
|
type: TradeType;
|
|
122
131
|
side: QuoteSide;
|
|
123
|
-
sizeUsd:
|
|
132
|
+
sizeUsd: string;
|
|
124
133
|
market: Market;
|
|
125
134
|
price: MarketContext;
|
|
126
135
|
bids: OrderbookLevel[];
|
|
@@ -136,12 +145,13 @@ interface BuildQuoteInput {
|
|
|
136
145
|
* versus mark, applies the base taker fee on the filled notional, and carries
|
|
137
146
|
* the market's `funding` (`null` for spot, which has none).
|
|
138
147
|
*
|
|
139
|
-
* @throws {PerpsError} `ValidationError` when
|
|
140
|
-
*
|
|
141
|
-
* not finite (a non-finite `sizeUsd`, mark price or taker fee).
|
|
148
|
+
* @throws {PerpsError} `ValidationError` when `sizeUsd`, the mark price, the
|
|
149
|
+
* taker fee or a book level does not match the decimal pattern.
|
|
142
150
|
* @public
|
|
143
151
|
*/
|
|
144
152
|
export declare function buildQuote(input: BuildQuoteInput): Quote;
|
|
153
|
+
/** @public */
|
|
154
|
+
export declare const safeBuildQuote: (input: BuildQuoteInput) => Quote | undefined;
|
|
145
155
|
/**
|
|
146
156
|
* Pick the matching open position for an order's market, if any.
|
|
147
157
|
*
|
|
@@ -158,9 +168,13 @@ export declare function findMatchingPosition(marketId: string, positions: readon
|
|
|
158
168
|
* position can only close what's open.
|
|
159
169
|
*
|
|
160
170
|
* Inputs are non-negative magnitudes.
|
|
171
|
+
*
|
|
172
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
161
173
|
* @public
|
|
162
174
|
*/
|
|
163
|
-
export declare function resolveCloseSize(orderSize:
|
|
175
|
+
export declare function resolveCloseSize(orderSize: string, positionSize: string): string;
|
|
176
|
+
/** @public */
|
|
177
|
+
export declare const safeResolveCloseSize: (orderSize: string, positionSize: string) => string | undefined;
|
|
164
178
|
/**
|
|
165
179
|
* Expected rPnL an unfilled order would realise against a matching position:
|
|
166
180
|
* a resting limit order prices off its limit, an armed trigger off its trigger
|
|
@@ -168,9 +182,13 @@ export declare function resolveCloseSize(orderSize: number, positionSize: number
|
|
|
168
182
|
* nothing.
|
|
169
183
|
*
|
|
170
184
|
* @returns Realised PnL if the order would reduce the position, otherwise
|
|
171
|
-
* `
|
|
185
|
+
* `undefined`.
|
|
186
|
+
* @throws {PerpsError} `ValidationError` when a price or size on the order or
|
|
187
|
+
* the position does not match the decimal pattern.
|
|
172
188
|
* @public
|
|
173
189
|
*/
|
|
174
|
-
export declare function estimateRealizedPnl(order: Order, position: Position | undefined):
|
|
190
|
+
export declare function estimateRealizedPnl(order: Order, position: Position | undefined): string | undefined;
|
|
191
|
+
/** @public */
|
|
192
|
+
export declare const safeEstimateRealizedPnl: (order: Order, position: Position | undefined) => string | undefined;
|
|
175
193
|
export {};
|
|
176
194
|
//# sourceMappingURL=order.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../../src/math/order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,181 +1,238 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Display-tier position formulas and margin-adjustment predicates. Every
|
|
3
|
-
* formula takes and gives
|
|
4
|
-
*
|
|
3
|
+
* formula takes and gives decimal strings; arithmetic is exact Big.js, with
|
|
4
|
+
* division to 40 decimal places. Each formula throws `ValidationError` on an
|
|
5
|
+
* input that does not match the decimal pattern and has a `safe*` pair that gives
|
|
6
|
+
* `undefined` in place of the throw.
|
|
5
7
|
*
|
|
6
8
|
* Sign convention: long = +1, short = -1. Sizes passed to the `estimate*`
|
|
7
9
|
* helpers are always non-negative magnitudes; direction is carried by
|
|
8
10
|
* `isLong`.
|
|
9
11
|
*/
|
|
10
|
-
import { type Position } from '@lifi/perps-types';
|
|
12
|
+
import { type PerpsMarket, type Position } from '@lifi/perps-types';
|
|
13
|
+
import type { LiquidationEstimateParams } from '../types/provider.js';
|
|
11
14
|
/**
|
|
12
|
-
*
|
|
15
|
+
* Notional value of a position: `|size| × price`.
|
|
13
16
|
*
|
|
14
|
-
* @
|
|
15
|
-
* @param price - Current asset price
|
|
16
|
-
* @returns Notional value in USD
|
|
17
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
17
18
|
* @public
|
|
18
19
|
*/
|
|
19
|
-
export declare function calculateNotionalValue(size:
|
|
20
|
+
export declare function calculateNotionalValue(size: string, price: string): string;
|
|
21
|
+
/** @public */
|
|
22
|
+
export declare const safeCalculateNotionalValue: (size: string, price: string) => string | undefined;
|
|
20
23
|
/**
|
|
21
|
-
*
|
|
24
|
+
* Unrealized PnL: `(currentPrice - entryPrice) × size`, where `size` is
|
|
25
|
+
* positive for a long and negative for a short.
|
|
22
26
|
*
|
|
23
|
-
* @
|
|
24
|
-
* @param currentPrice - Current market price
|
|
25
|
-
* @param size - Position size (positive for long, negative for short)
|
|
26
|
-
* @returns Unrealized PnL in USD
|
|
27
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
27
28
|
* @public
|
|
28
29
|
*/
|
|
29
|
-
export declare function calculateUnrealizedPnl(entryPrice:
|
|
30
|
+
export declare function calculateUnrealizedPnl(entryPrice: string, currentPrice: string, size: string): string;
|
|
31
|
+
/** @public */
|
|
32
|
+
export declare const safeCalculateUnrealizedPnl: (entryPrice: string, currentPrice: string, size: string) => string | undefined;
|
|
30
33
|
/**
|
|
31
|
-
*
|
|
34
|
+
* Return on equity as a percentage (`'10'` for 10%): `pnl ÷ margin × 100`.
|
|
32
35
|
*
|
|
33
|
-
* @
|
|
34
|
-
*
|
|
35
|
-
* @returns ROE as percentage (e.g., 10 for 10%)
|
|
36
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
37
|
+
* decimal pattern or `margin` is zero.
|
|
36
38
|
* @public
|
|
37
39
|
*/
|
|
38
|
-
export declare function calculateRoe(pnl:
|
|
40
|
+
export declare function calculateRoe(pnl: string, margin: string): string;
|
|
41
|
+
/** @public */
|
|
42
|
+
export declare const safeCalculateRoe: (pnl: string, margin: string) => string | undefined;
|
|
39
43
|
/**
|
|
40
|
-
*
|
|
44
|
+
* Required margin: `notionalValue ÷ leverage`.
|
|
41
45
|
*
|
|
42
|
-
* @
|
|
43
|
-
*
|
|
44
|
-
* @returns Required margin in USD
|
|
46
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern
|
|
47
|
+
* or `leverage` is zero.
|
|
45
48
|
* @public
|
|
46
49
|
*/
|
|
47
|
-
export declare function calculateRequiredMargin(notionalValue:
|
|
50
|
+
export declare function calculateRequiredMargin(notionalValue: string, leverage: string): string;
|
|
51
|
+
/** @public */
|
|
52
|
+
export declare const safeCalculateRequiredMargin: (notionalValue: string, leverage: string) => string | undefined;
|
|
48
53
|
/**
|
|
49
|
-
* Distance from the current price to the liquidation price, as
|
|
50
|
-
* the current price.
|
|
54
|
+
* Distance from the current price to the liquidation price, as an absolute
|
|
55
|
+
* percentage of the current price.
|
|
51
56
|
*
|
|
52
|
-
* @
|
|
53
|
-
*
|
|
54
|
-
* @returns Absolute distance as a percentage, or 0 when current price is zero
|
|
57
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
58
|
+
* decimal pattern or `currentPrice` is zero.
|
|
55
59
|
* @public
|
|
56
60
|
*/
|
|
57
61
|
export declare function calculateLiquidationDistance(params: {
|
|
58
|
-
liquidationPrice:
|
|
59
|
-
currentPrice:
|
|
60
|
-
}):
|
|
62
|
+
liquidationPrice: string;
|
|
63
|
+
currentPrice: string;
|
|
64
|
+
}): string;
|
|
65
|
+
/** @public */
|
|
66
|
+
export declare const safeCalculateLiquidationDistance: (params: {
|
|
67
|
+
liquidationPrice: string;
|
|
68
|
+
currentPrice: string;
|
|
69
|
+
}) => string | undefined;
|
|
61
70
|
/**
|
|
62
|
-
* Effective leverage of an open position
|
|
71
|
+
* Effective leverage of an open position: `positionValueUsd ÷ marginUsd`.
|
|
63
72
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* @param positionValueUsd - Position notional value in USD
|
|
67
|
-
* @param marginUsd - Margin backing the position in USD
|
|
68
|
-
* @returns Effective leverage, or 0 when margin is zero
|
|
73
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
74
|
+
* decimal pattern or `marginUsd` is zero.
|
|
69
75
|
* @public
|
|
70
76
|
*/
|
|
71
77
|
export declare function calculateEffectiveLeverage(params: {
|
|
72
|
-
positionValueUsd:
|
|
73
|
-
marginUsd:
|
|
74
|
-
}):
|
|
78
|
+
positionValueUsd: string;
|
|
79
|
+
marginUsd: string;
|
|
80
|
+
}): string;
|
|
81
|
+
/** @public */
|
|
82
|
+
export declare const safeCalculateEffectiveLeverage: (params: {
|
|
83
|
+
positionValueUsd: string;
|
|
84
|
+
marginUsd: string;
|
|
85
|
+
}) => string | undefined;
|
|
75
86
|
/**
|
|
76
87
|
* Estimated liquidation price for an isolated-margin position, parameterised
|
|
77
88
|
* by the venue's maintenance margin rate.
|
|
78
89
|
*
|
|
79
90
|
* Standard isolated-margin model (new position, no existing exposure):
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* margin_available = margin_per_unit - maintenance_per_unit
|
|
83
|
-
* liq_price = entryPrice - side * margin_available / (1 - mmr * side)
|
|
91
|
+
* margin_available = entryPrice × (1 / leverage - mmr)
|
|
92
|
+
* liq_price = entryPrice - side × margin_available / (1 - mmr × side)
|
|
84
93
|
*
|
|
85
94
|
* For existing positions, prefer `Position.liquidationPrice` from the venue.
|
|
86
95
|
*
|
|
87
96
|
* @param maintenanceMarginRate - Venue maintenance margin rate as a fraction
|
|
88
|
-
* (
|
|
89
|
-
* @
|
|
90
|
-
*
|
|
97
|
+
* (`'0.01'` = 1%).
|
|
98
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
99
|
+
* decimal pattern, `leverage` is zero, or `maintenanceMarginRate` gives a
|
|
100
|
+
* zero denominator (`1` for a long, `-1` for a short).
|
|
91
101
|
* @public
|
|
92
102
|
*/
|
|
93
103
|
export declare function estimateLiquidationPrice(params: {
|
|
94
|
-
entryPrice:
|
|
95
|
-
leverage:
|
|
104
|
+
entryPrice: string;
|
|
105
|
+
leverage: string;
|
|
106
|
+
isLong: boolean;
|
|
107
|
+
maintenanceMarginRate: string;
|
|
108
|
+
}): string;
|
|
109
|
+
/** @public */
|
|
110
|
+
export declare const safeEstimateLiquidationPrice: (params: {
|
|
111
|
+
entryPrice: string;
|
|
112
|
+
leverage: string;
|
|
96
113
|
isLong: boolean;
|
|
97
|
-
maintenanceMarginRate:
|
|
98
|
-
})
|
|
114
|
+
maintenanceMarginRate: string;
|
|
115
|
+
}) => string | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Estimate the liquidation price of a new isolated position from the flat
|
|
118
|
+
* `market.maintenanceMarginRate`.
|
|
119
|
+
*
|
|
120
|
+
* @returns The estimate, or `undefined` when the market carries no
|
|
121
|
+
* `maintenanceMarginRate`.
|
|
122
|
+
* @throws {PerpsError} `ValidationError` on an input that
|
|
123
|
+
* {@link estimateLiquidationPrice} rejects.
|
|
124
|
+
* @public
|
|
125
|
+
*/
|
|
126
|
+
export declare function estimateLiquidationPriceAtMarketRate(market: PerpsMarket, params: LiquidationEstimateParams): string | undefined;
|
|
127
|
+
/** @public */
|
|
128
|
+
export declare const safeEstimateLiquidationPriceAtMarketRate: (market: PerpsMarket, params: LiquidationEstimateParams) => string | undefined;
|
|
99
129
|
/**
|
|
100
130
|
* Whether an isolated position with this liquidation price is already past
|
|
101
131
|
* liquidation at `currentPrice`: a long liquidates when the price falls to its
|
|
102
132
|
* liquidation level, a short when it rises to it. A non-positive price on
|
|
103
133
|
* either side counts as unknown, so the result is `false`.
|
|
104
134
|
*
|
|
135
|
+
* @throws {PerpsError} `ValidationError` when a price does not match the decimal pattern.
|
|
105
136
|
* @public
|
|
106
137
|
*/
|
|
107
138
|
export declare function wouldImmediatelyLiquidate(params: {
|
|
108
|
-
liquidationPrice:
|
|
109
|
-
currentPrice:
|
|
139
|
+
liquidationPrice: string;
|
|
140
|
+
currentPrice: string;
|
|
110
141
|
isLong: boolean;
|
|
111
142
|
}): boolean;
|
|
143
|
+
/** @public */
|
|
144
|
+
export declare const safeWouldImmediatelyLiquidate: (params: {
|
|
145
|
+
liquidationPrice: string;
|
|
146
|
+
currentPrice: string;
|
|
147
|
+
isLong: boolean;
|
|
148
|
+
}) => boolean | undefined;
|
|
112
149
|
/**
|
|
113
|
-
* Estimated average entry price after adding to an existing position
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* @
|
|
120
|
-
*
|
|
121
|
-
* @param addSize - Size being added in coin units (>= 0).
|
|
122
|
-
* @param fillPrice - Price the new size is expected to fill at (mid for
|
|
123
|
-
* market, limitPrice for limit orders).
|
|
124
|
-
* @returns The new weighted-average entry price, or undefined if the inputs
|
|
125
|
-
* cannot produce a valid average (zero combined size, non-finite values).
|
|
150
|
+
* Estimated average entry price after adding to an existing position: the
|
|
151
|
+
* size-weighted average of the current entry and the fill price. Both legs
|
|
152
|
+
* are in the same direction (an add, not a flip).
|
|
153
|
+
*
|
|
154
|
+
* @param fillPrice - Expected fill price (mid for market, limit price for
|
|
155
|
+
* limit orders).
|
|
156
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
157
|
+
* decimal pattern or `currentSize + addSize` is not positive.
|
|
126
158
|
* @public
|
|
127
159
|
*/
|
|
128
160
|
export declare function estimateAverageEntryPrice(params: {
|
|
129
|
-
currentSize:
|
|
130
|
-
currentEntry:
|
|
131
|
-
addSize:
|
|
132
|
-
fillPrice:
|
|
133
|
-
}):
|
|
161
|
+
currentSize: string;
|
|
162
|
+
currentEntry: string;
|
|
163
|
+
addSize: string;
|
|
164
|
+
fillPrice: string;
|
|
165
|
+
}): string;
|
|
166
|
+
/** @public */
|
|
167
|
+
export declare const safeEstimateAverageEntryPrice: (params: {
|
|
168
|
+
currentSize: string;
|
|
169
|
+
currentEntry: string;
|
|
170
|
+
addSize: string;
|
|
171
|
+
fillPrice: string;
|
|
172
|
+
}) => string | undefined;
|
|
134
173
|
/**
|
|
135
|
-
* Estimated effective leverage after adding margin and notional
|
|
174
|
+
* Estimated effective leverage after adding margin and notional:
|
|
175
|
+
* `(currentNotional + addNotional) ÷ (currentMargin + addMargin)`.
|
|
136
176
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* margin the user is about to put up.
|
|
140
|
-
*
|
|
141
|
-
* @returns The new effective leverage, or undefined if total margin is
|
|
142
|
-
* non-positive.
|
|
177
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the
|
|
178
|
+
* decimal pattern or `currentMargin + addMargin` is not positive.
|
|
143
179
|
* @public
|
|
144
180
|
*/
|
|
145
181
|
export declare function estimateNewLeverage(params: {
|
|
146
|
-
currentNotional:
|
|
147
|
-
currentMargin:
|
|
148
|
-
addNotional:
|
|
149
|
-
addMargin:
|
|
150
|
-
}):
|
|
182
|
+
currentNotional: string;
|
|
183
|
+
currentMargin: string;
|
|
184
|
+
addNotional: string;
|
|
185
|
+
addMargin: string;
|
|
186
|
+
}): string;
|
|
187
|
+
/** @public */
|
|
188
|
+
export declare const safeEstimateNewLeverage: (params: {
|
|
189
|
+
currentNotional: string;
|
|
190
|
+
currentMargin: string;
|
|
191
|
+
addNotional: string;
|
|
192
|
+
addMargin: string;
|
|
193
|
+
}) => string | undefined;
|
|
151
194
|
/**
|
|
152
|
-
* Estimated unrealised PnL at the
|
|
153
|
-
*
|
|
154
|
-
* `pnl = (markPrice - entryPrice) * size * (isLong ? 1 : -1)`
|
|
195
|
+
* Estimated unrealised PnL at the mark price:
|
|
196
|
+
* `(markPrice - entryPrice) × size × (isLong ? 1 : -1)`.
|
|
155
197
|
*
|
|
156
198
|
* @param size - Position size as a non-negative magnitude.
|
|
199
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
157
200
|
* @public
|
|
158
201
|
*/
|
|
159
202
|
export declare function estimateUnrealizedPnl(params: {
|
|
160
|
-
entryPrice:
|
|
161
|
-
markPrice:
|
|
162
|
-
size:
|
|
203
|
+
entryPrice: string;
|
|
204
|
+
markPrice: string;
|
|
205
|
+
size: string;
|
|
163
206
|
isLong: boolean;
|
|
164
|
-
}):
|
|
207
|
+
}): string;
|
|
208
|
+
/** @public */
|
|
209
|
+
export declare const safeEstimateUnrealizedPnl: (params: {
|
|
210
|
+
entryPrice: string;
|
|
211
|
+
markPrice: string;
|
|
212
|
+
size: string;
|
|
213
|
+
isLong: boolean;
|
|
214
|
+
}) => string | undefined;
|
|
165
215
|
/**
|
|
166
|
-
* Realised PnL on the portion of a position being closed
|
|
167
|
-
*
|
|
168
|
-
* `rPnl = (closePrice - entryPrice) * closeSize * (isLong ? 1 : -1)`
|
|
216
|
+
* Realised PnL on the portion of a position being closed:
|
|
217
|
+
* `(closePrice - entryPrice) × closeSize × (isLong ? 1 : -1)`.
|
|
169
218
|
*
|
|
170
219
|
* @param closeSize - Size being closed as a non-negative magnitude.
|
|
220
|
+
* @throws {PerpsError} `ValidationError` when an input does not match the decimal pattern.
|
|
171
221
|
* @public
|
|
172
222
|
*/
|
|
173
223
|
export declare function calculateRealizedPnl(params: {
|
|
174
|
-
entryPrice:
|
|
175
|
-
closePrice:
|
|
176
|
-
closeSize:
|
|
224
|
+
entryPrice: string;
|
|
225
|
+
closePrice: string;
|
|
226
|
+
closeSize: string;
|
|
227
|
+
isLong: boolean;
|
|
228
|
+
}): string;
|
|
229
|
+
/** @public */
|
|
230
|
+
export declare const safeCalculateRealizedPnl: (params: {
|
|
231
|
+
entryPrice: string;
|
|
232
|
+
closePrice: string;
|
|
233
|
+
closeSize: string;
|
|
177
234
|
isLong: boolean;
|
|
178
|
-
})
|
|
235
|
+
}) => string | undefined;
|
|
179
236
|
/**
|
|
180
237
|
* Whether this position can take a margin adjustment at all: it holds margin of
|
|
181
238
|
* its own and its market exposes individual position margin.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/math/position.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/math/position.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface GetQuoteParams {
|
|
|
13
13
|
/** Buy consumes asks; sell consumes bids. */
|
|
14
14
|
side: QuoteSide;
|
|
15
15
|
/** USD notional to fill. */
|
|
16
|
-
size:
|
|
16
|
+
size: string;
|
|
17
17
|
/** Product family used to distinguish spot and perpetual markets. */
|
|
18
18
|
type: TradeType;
|
|
19
19
|
}
|
|
@@ -33,7 +33,7 @@ export interface GetQuoteParams {
|
|
|
33
33
|
* provider: 'hyperliquid',
|
|
34
34
|
* symbol: 'BTC',
|
|
35
35
|
* side: 'buy',
|
|
36
|
-
* size:
|
|
36
|
+
* size: '10000',
|
|
37
37
|
* type: 'perps',
|
|
38
38
|
* })
|
|
39
39
|
* console.log(quote.expectedFillPrice, quote.priceImpactBps)
|
|
@@ -29,7 +29,7 @@ export declare const QUOTE_THROTTLE_MS = 100;
|
|
|
29
29
|
* price, a throwing `onQuote`) is logged via `wsLog.listenerFailure` and the
|
|
30
30
|
* emission is skipped, on both the immediate and the trailing-timer path.
|
|
31
31
|
*
|
|
32
|
-
* @throws {PerpsError} `ValidationError` when `params.size`
|
|
32
|
+
* @throws {PerpsError} `ValidationError` when `params.size` does not match the decimal pattern.
|
|
33
33
|
* @throws {PerpsError} `MarketNotFound` when no market matches symbol+type.
|
|
34
34
|
* @internal
|
|
35
35
|
*/
|