@d8x/perpetuals-sdk 2.6.23 → 2.7.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/dist/cjs/config/defaultConfig.json +2 -2
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +42 -25
- package/dist/cjs/d8XMath.js +188 -151
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +1 -1
- package/dist/cjs/liquidatorTool.js +9 -9
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +6 -6
- package/dist/cjs/marketData.js +9 -12
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +12 -12
- package/dist/cjs/perpetualDataHandler.js +13 -14
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/polyMktsPxFeed.js +2 -2
- package/dist/cjs/polyMktsPxFeed.js.map +1 -1
- package/dist/cjs/priceFeeds.d.ts +1 -0
- package/dist/cjs/priceFeeds.js +19 -3
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/config/defaultConfig.json +2 -2
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +42 -25
- package/dist/esm/d8XMath.js +187 -150
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +1 -1
- package/dist/esm/liquidatorTool.js +10 -10
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +6 -6
- package/dist/esm/marketData.js +9 -12
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +12 -12
- package/dist/esm/perpetualDataHandler.js +13 -14
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/polyMktsPxFeed.js +2 -2
- package/dist/esm/polyMktsPxFeed.js.map +1 -1
- package/dist/esm/priceFeeds.d.ts +1 -0
- package/dist/esm/priceFeeds.js +19 -3
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/doc/d8x-perpetuals-sdk.md +116 -64
- package/package.json +1 -1
- package/src/config/defaultConfig.json +2 -2
- package/src/constants.ts +0 -1
- package/src/d8XMath.ts +210 -167
- package/src/liquidatorTool.ts +16 -10
- package/src/marketData.ts +33 -25
- package/src/perpetualDataHandler.ts +28 -34
- package/src/polyMktsPxFeed.ts +6 -7
- package/src/priceFeeds.ts +20 -4
- package/src/version.ts +1 -1
- package/dist/cjs/abi/AMMPerpLogic.json +0 -580
- package/dist/cjs/abi/BeaconProxy.json +0 -71
- package/dist/cjs/abi/IPerpetualManager copy.json +0 -5599
- package/dist/cjs/abi/IPerpetualMarginViewLogic.json +0 -286
- package/dist/cjs/abi/Maintainer.json +0 -774
- package/dist/cjs/abi/MockToken.json +0 -347
- package/dist/cjs/abi/MockUSD.json +0 -413
- package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
- package/dist/cjs/abi/WeETH.json +0 -310
- package/dist/cjs/abi-zkevm/IPerpetualManager.json +0 -5366
- package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/cjs/contracts/AMMPerpLogic.d.ts +0 -303
- package/dist/cjs/contracts/AMMPerpLogic.js +0 -3
- package/dist/cjs/contracts/AMMPerpLogic.js.map +0 -1
- package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
- package/dist/cjs/contracts/BeaconProxy.js +0 -3
- package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
- package/dist/cjs/contracts/IPerpetualManagerCopy.d.ts +0 -3223
- package/dist/cjs/contracts/IPerpetualManagerCopy.js +0 -3
- package/dist/cjs/contracts/IPerpetualManagerCopy.js.map +0 -1
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.js +0 -3
- package/dist/cjs/contracts/IPerpetualMarginViewLogic.js.map +0 -1
- package/dist/cjs/contracts/Maintainer.d.ts +0 -799
- package/dist/cjs/contracts/Maintainer.js +0 -3
- package/dist/cjs/contracts/Maintainer.js.map +0 -1
- package/dist/cjs/contracts/MockToken.d.ts +0 -263
- package/dist/cjs/contracts/MockToken.js +0 -3
- package/dist/cjs/contracts/MockToken.js.map +0 -1
- package/dist/cjs/contracts/MockUSD.d.ts +0 -186
- package/dist/cjs/contracts/MockUSD.js +0 -3
- package/dist/cjs/contracts/MockUSD.js.map +0 -1
- package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
- package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/cjs/contracts/WeETH.d.ts +0 -503
- package/dist/cjs/contracts/WeETH.js +0 -3
- package/dist/cjs/contracts/WeETH.js.map +0 -1
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js +0 -598
- package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5617
- package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -304
- package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
- package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/MockToken__factory.d.ts +0 -273
- package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
- package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/MockUSD__factory.d.ts +0 -320
- package/dist/cjs/contracts/factories/MockUSD__factory.js +0 -431
- package/dist/cjs/contracts/factories/MockUSD__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
- package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/factories/lean0/index.js +0 -15
- package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
- package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
- package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
- package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/cjs/contracts/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/lean0/index.js +0 -3
- package/dist/cjs/contracts/lean0/index.js.map +0 -1
- package/dist/esm/abi/AMMPerpLogic.json +0 -580
- package/dist/esm/abi/BeaconProxy.json +0 -71
- package/dist/esm/abi/IPerpetualManager copy.json +0 -5599
- package/dist/esm/abi/IPerpetualMarginViewLogic.json +0 -286
- package/dist/esm/abi/Maintainer.json +0 -774
- package/dist/esm/abi/MockToken.json +0 -347
- package/dist/esm/abi/MockUSD.json +0 -413
- package/dist/esm/abi/UUPSUpgradeable.json +0 -104
- package/dist/esm/abi/WeETH.json +0 -310
- package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
- package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
- package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
- package/dist/esm/abi/lean0/ShareToken.json +0 -438
- package/dist/esm/abi-zkevm/IPerpetualManager.json +0 -5366
- package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/esm/contracts/AMMPerpLogic.d.ts +0 -303
- package/dist/esm/contracts/AMMPerpLogic.js +0 -2
- package/dist/esm/contracts/AMMPerpLogic.js.map +0 -1
- package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
- package/dist/esm/contracts/BeaconProxy.js +0 -2
- package/dist/esm/contracts/BeaconProxy.js.map +0 -1
- package/dist/esm/contracts/IPerpetualManagerCopy.d.ts +0 -3223
- package/dist/esm/contracts/IPerpetualManagerCopy.js +0 -2
- package/dist/esm/contracts/IPerpetualManagerCopy.js.map +0 -1
- package/dist/esm/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
- package/dist/esm/contracts/IPerpetualMarginViewLogic.js +0 -2
- package/dist/esm/contracts/IPerpetualMarginViewLogic.js.map +0 -1
- package/dist/esm/contracts/Maintainer.d.ts +0 -799
- package/dist/esm/contracts/Maintainer.js +0 -2
- package/dist/esm/contracts/Maintainer.js.map +0 -1
- package/dist/esm/contracts/MockToken.d.ts +0 -263
- package/dist/esm/contracts/MockToken.js +0 -2
- package/dist/esm/contracts/MockToken.js.map +0 -1
- package/dist/esm/contracts/MockUSD.d.ts +0 -186
- package/dist/esm/contracts/MockUSD.js +0 -2
- package/dist/esm/contracts/MockUSD.js.map +0 -1
- package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
- package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/esm/contracts/WeETH.d.ts +0 -503
- package/dist/esm/contracts/WeETH.js +0 -2
- package/dist/esm/contracts/WeETH.js.map +0 -1
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.js +0 -594
- package/dist/esm/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
- package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
- package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5613
- package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -300
- package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
- package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
- package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
- package/dist/esm/contracts/factories/MockToken__factory.js +0 -361
- package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/MockUSD__factory.d.ts +0 -320
- package/dist/esm/contracts/factories/MockUSD__factory.js +0 -427
- package/dist/esm/contracts/factories/MockUSD__factory.js.map +0 -1
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
- package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/factories/lean0/index.js +0 -8
- package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
- package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
- package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/esm/contracts/lean0/ShareToken.js +0 -2
- package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/esm/contracts/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/lean0/index.js +0 -2
- package/dist/esm/contracts/lean0/index.js.map +0 -1
- package/src/contracts/IPerpetualMarginViewLogic.ts +0 -347
- package/src/contracts/MockUSD.ts +0 -378
- package/src/contracts/factories/IPerpetualMarginViewLogic__factory.ts +0 -313
- package/src/contracts/factories/MockUSD__factory.ts +0 -430
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
{
|
|
29
29
|
"name": "base_sepolia",
|
|
30
30
|
"chainId": 84532,
|
|
31
|
-
"version":
|
|
32
|
-
"proxyAddr": "
|
|
31
|
+
"version": 3,
|
|
32
|
+
"proxyAddr": "0xfaC638d51B769D060aFC5953C41bF35595620b1c",
|
|
33
33
|
"nodeURL": "https://sepolia.base.org",
|
|
34
34
|
"priceFeedConfigNetwork": "mainnet",
|
|
35
35
|
"shareTokenABILocation": "./abi/ShareToken.json",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAGlC,QAAA,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACxC,QAAA,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC1D,QAAA,SAAS,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;AACjE,+EAA+E;AAClE,QAAA,eAAe,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAC9D,QAAA,OAAO,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAC/C,QAAA,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACnD,QAAA,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAElD,QAAA,WAAW,GAAG,IAAI,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAC3F,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAC9B,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAC7B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,cAAc,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzF,QAAA,YAAY,GAAG,oBAAW,CAAC;AAC3B,QAAA,aAAa,GAAG,iBAAQ,CAAC;AACzB,QAAA,iBAAiB,GAAG,4CAA4C,CAAC;AACjE,QAAA,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC3C,QAAA,SAAS,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;AACzD,QAAA,YAAY,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,qDAAqD;AACrF,QAAA,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,8CAA8C;AAErE,QAAA,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/C,QAAA,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,QAAA,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACzC,QAAA,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9C,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,yBAAyB,GAAG,EAAE,CAAC;AAC/B,QAAA,kBAAkB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/d8XMath.d.ts
CHANGED
|
@@ -160,10 +160,27 @@ export declare function getNewPositionLeverage(tradeAmount: number, marginCollat
|
|
|
160
160
|
* @param {number} price - price to trade amount 'tradeAmnt'
|
|
161
161
|
* @param {number} S3 - collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)
|
|
162
162
|
* @param {number} S2Mark - mark price
|
|
163
|
-
* @param {
|
|
163
|
+
* @param {number} cmin - Absolute minimum margin per contract, only for pred markets
|
|
164
164
|
* @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
|
|
165
165
|
*/
|
|
166
|
-
export declare function getDepositAmountForLvgTrade(pos0: number, b0: number, tradeAmnt: number, targetLvg: number, price: number, S3: number, S2Mark: number,
|
|
166
|
+
export declare function getDepositAmountForLvgTrade(pos0: number, b0: number, tradeAmnt: number, targetLvg: number, price: number, S3: number, S2Mark: number, cmin: number | undefined): number;
|
|
167
|
+
/**
|
|
168
|
+
* Determine amount to be deposited into margin account so that the given leverage
|
|
169
|
+
* is obtained when opening a prediction market position
|
|
170
|
+
* Does NOT include fees, but accounts for a possible non-zero current position
|
|
171
|
+
* Smart contract equivalent: getDepositAmountForPredMktLvgPosition
|
|
172
|
+
* @param {number} pos0 - current position
|
|
173
|
+
* @param {number} b0 - current balance
|
|
174
|
+
* @param {number} c0 - current available cash
|
|
175
|
+
* @param {number} tradeAmnt - amount to trade
|
|
176
|
+
* @param {number} targetLvg - target leverage
|
|
177
|
+
* @param {number} prob - prob to trade amount 'tradeAmnt'
|
|
178
|
+
* @param {number} S3 - collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)
|
|
179
|
+
* @param {number} markProb - mark prob
|
|
180
|
+
* @param {number} imr - minimum absolute margin per contract (fInitialMarginRate)
|
|
181
|
+
* @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
|
|
182
|
+
*/
|
|
183
|
+
export declare function getDepositAmountForPredMktLvgTrade(pos0: number, b0: number, c0: number, tradeAmnt: number, targetLvg: number, prob: number, S3: number, markProb: number, imr: number): number;
|
|
167
184
|
/**
|
|
168
185
|
* Convert a perpetual price to probability (predtictive markets)
|
|
169
186
|
* @param px Perpetual price
|
|
@@ -179,32 +196,22 @@ export declare function probToPrice(prob: number): number;
|
|
|
179
196
|
export declare function entropy(prob: number): number;
|
|
180
197
|
/**
|
|
181
198
|
* Maintenance margin rate for prediction markets.
|
|
182
|
-
* @param
|
|
199
|
+
* @param position signed position in base currency
|
|
200
|
+
* @param lockedInQC locked in value, p or 1-p times number of contracts
|
|
183
201
|
* @param sm mark-price (=1+p)
|
|
184
|
-
* @param m
|
|
185
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
202
|
+
* @param m absolute maintenance buffer per contract (mu_m, fMaintenanceMarginRate)
|
|
203
|
+
* @returns {number} The margin rate to be applied: (Math.abs(pos) * p * tau) / s3
|
|
186
204
|
*/
|
|
187
|
-
export declare function pmMaintenanceMarginRate(
|
|
205
|
+
export declare function pmMaintenanceMarginRate(position: number, lockedInQC: number, sm: number, m: number): number;
|
|
188
206
|
/**
|
|
189
|
-
*
|
|
207
|
+
* Initial margin rate for prediction markets.
|
|
190
208
|
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
209
|
+
* @param s0 trade price
|
|
191
210
|
* @param sm mark-price (=1+p)
|
|
192
|
-
* @param
|
|
193
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
194
|
-
*/
|
|
195
|
-
export declare function pmInitialMarginRate(posSign: number, sm: number, m?: number | undefined): number;
|
|
196
|
-
/**
|
|
197
|
-
* Calculate the expected loss for a prediction market trade used for
|
|
198
|
-
* prediction market fees
|
|
199
|
-
* @param p probability derived from mark price (long)
|
|
200
|
-
* @param m maximal maintenance rate from which we defer the actual maintenance margin rate
|
|
201
|
-
* @param totLong total long in base currency
|
|
202
|
-
* @param totShort total short
|
|
203
|
-
* @param tradeAmt signed trade amount, can be zero
|
|
204
|
-
* @param tradeMgnRate margin rate of the trader
|
|
205
|
-
* @returns expected loss in dollars
|
|
211
|
+
* @param cmin Absolute min margin saved as `fInitialMarginRate`
|
|
212
|
+
* @returns {number} The margin rate to be applied: `(Math.abs(pos) * p * tau) / s3`
|
|
206
213
|
*/
|
|
207
|
-
export declare function
|
|
214
|
+
export declare function pmInitialMarginRate(posSign: number, s0: number, sm: number, cmin: number): number;
|
|
208
215
|
/**
|
|
209
216
|
* Exchange fee as a rate for prediction markets
|
|
210
217
|
* For opening trades only
|
|
@@ -225,8 +232,18 @@ export declare function pmExchangeFee(prob: number, m: number, tradeAmt: number,
|
|
|
225
232
|
* @returns current margin balance
|
|
226
233
|
*/
|
|
227
234
|
export declare function pmMarginBalance(pos: number, s2: number, s3: number, ell: number, mc: number): number;
|
|
228
|
-
export declare function pmExcessBalance(pos: number, s2: number, s3: number, ell: number, mc: number, m: number
|
|
229
|
-
|
|
235
|
+
export declare function pmExcessBalance(pos: number, s2: number, s3: number, ell: number, mc: number, m: number): number;
|
|
236
|
+
/**
|
|
237
|
+
*
|
|
238
|
+
* @param pos Signed position size
|
|
239
|
+
* @param s3 Collateral to quote conversion at spot
|
|
240
|
+
* @param ell Locked-in value
|
|
241
|
+
* @param mc Margin collateral
|
|
242
|
+
* @param baseMarginRate Maintenance margin per contract (mu_m)
|
|
243
|
+
* @param sm Mark price at entry
|
|
244
|
+
* @returns {number} Liquidation price as a probability in the range [0, 1]
|
|
245
|
+
*/
|
|
246
|
+
export declare function pmFindLiquidationPrice(pos: number, s3: number, ell: number, mc: number, baseMarginRate: number): number;
|
|
230
247
|
/**
|
|
231
248
|
* Find maximal *affordable* trade size (short dir=-1 or long dir=1) for prediction
|
|
232
249
|
* markets at provided leverage and incorporating the current position
|
|
@@ -254,6 +271,6 @@ export declare function pmFindMaxPersonalTradeSizeAtLeverage(dir: number, lvg: n
|
|
|
254
271
|
* @param short Short open OI
|
|
255
272
|
* @param sm Mark price (>1)
|
|
256
273
|
* @param isBuy True if trade is long
|
|
257
|
-
* @param mr
|
|
274
|
+
* @param mr Margin threshold per contract for liquidation (mu_m)
|
|
258
275
|
*/
|
|
259
276
|
export declare function pmMaxSignedOpenTradeSize(long: number, short: number, sm: number, isBuy: boolean, mr: number, ammFundsQC: number): number;
|
package/dist/cjs/d8XMath.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pmMaxSignedOpenTradeSize = exports.pmFindMaxPersonalTradeSizeAtLeverage = exports.pmFindLiquidationPrice = exports.pmExcessBalance = exports.pmMarginBalance = exports.pmExchangeFee = exports.
|
|
3
|
+
exports.pmMaxSignedOpenTradeSize = exports.pmFindMaxPersonalTradeSizeAtLeverage = exports.pmFindLiquidationPrice = exports.pmExcessBalance = exports.pmMarginBalance = exports.pmExchangeFee = exports.pmInitialMarginRate = exports.pmMaintenanceMarginRate = exports.entropy = exports.probToPrice = exports.priceToProb = exports.getDepositAmountForPredMktLvgTrade = exports.getDepositAmountForLvgTrade = exports.getNewPositionLeverage = exports.getMaxSignedPositionSize = exports.getMarginRequiredForLeveragedTrade = exports.calculateLiquidationPriceCollateralQuote = exports.calculateLiquidationPriceCollateralQuanto = exports.calculateLiquidationPriceCollateralQuantoConservative = exports.calculateLiquidationPriceCollateralBase = exports.div64x64 = exports.mul64x64 = exports.roundToLotString = exports.countDecimalsOf = exports.floatToDecN = exports.floatToDec18 = exports.floatToABK64x64 = exports.dec18ToFloat = exports.decNToFloat = exports.ABK64x64ToFloat = exports.ABDK29ToFloat = void 0;
|
|
4
4
|
const constants_1 = require("./constants");
|
|
5
5
|
/**
|
|
6
6
|
* @module d8xMath
|
|
@@ -352,31 +352,102 @@ exports.getNewPositionLeverage = getNewPositionLeverage;
|
|
|
352
352
|
* @param {number} price - price to trade amount 'tradeAmnt'
|
|
353
353
|
* @param {number} S3 - collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)
|
|
354
354
|
* @param {number} S2Mark - mark price
|
|
355
|
-
* @param {
|
|
355
|
+
* @param {number} cmin - Absolute minimum margin per contract, only for pred markets
|
|
356
356
|
* @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
|
|
357
357
|
*/
|
|
358
|
-
function getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark,
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
S2Mark = S2Mark - 1;
|
|
364
|
-
S2MarkBefore = S2Mark;
|
|
365
|
-
if (pos0 < 0) {
|
|
366
|
-
S2MarkBefore = 1 - S2Mark;
|
|
367
|
-
}
|
|
368
|
-
if (pos0 + tradeAmnt < 0) {
|
|
369
|
-
S2Mark = 1 - S2Mark;
|
|
358
|
+
function getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark, cmin) {
|
|
359
|
+
if (cmin && cmin > 0) {
|
|
360
|
+
// TODO: c0?
|
|
361
|
+
if (b0 != 0) {
|
|
362
|
+
console.log("b0 != 0");
|
|
370
363
|
}
|
|
364
|
+
return getDepositAmountForPredMktLvgTrade(pos0, b0, 0, tradeAmnt, targetLvg, price - 1, S3, S2Mark - 1, cmin);
|
|
371
365
|
}
|
|
366
|
+
let pnl = (tradeAmnt * (S2Mark - price)) / S3;
|
|
372
367
|
if (targetLvg == 0) {
|
|
373
368
|
// use current leverage
|
|
374
|
-
targetLvg = (Math.abs(pos0) *
|
|
369
|
+
targetLvg = (Math.abs(pos0) * S2Mark) / S3 / b0;
|
|
375
370
|
}
|
|
376
371
|
let b = (Math.abs(pos0 + tradeAmnt) * S2Mark) / S3 / targetLvg;
|
|
377
372
|
return -(b0 + pnl - b);
|
|
378
373
|
}
|
|
379
374
|
exports.getDepositAmountForLvgTrade = getDepositAmountForLvgTrade;
|
|
375
|
+
/**
|
|
376
|
+
* Determine amount to be deposited into margin account so that the given leverage
|
|
377
|
+
* is obtained when opening a prediction market position
|
|
378
|
+
* Does NOT include fees, but accounts for a possible non-zero current position
|
|
379
|
+
* Smart contract equivalent: getDepositAmountForPredMktLvgPosition
|
|
380
|
+
* @param {number} pos0 - current position
|
|
381
|
+
* @param {number} b0 - current balance
|
|
382
|
+
* @param {number} c0 - current available cash
|
|
383
|
+
* @param {number} tradeAmnt - amount to trade
|
|
384
|
+
* @param {number} targetLvg - target leverage
|
|
385
|
+
* @param {number} prob - prob to trade amount 'tradeAmnt'
|
|
386
|
+
* @param {number} S3 - collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)
|
|
387
|
+
* @param {number} markProb - mark prob
|
|
388
|
+
* @param {number} imr - minimum absolute margin per contract (fInitialMarginRate)
|
|
389
|
+
* @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
|
|
390
|
+
*/
|
|
391
|
+
function getDepositAmountForPredMktLvgTrade(pos0, b0, c0, tradeAmnt, targetLvg, prob, S3, markProb, imr) {
|
|
392
|
+
/**
|
|
393
|
+
* Smart contract implementation:
|
|
394
|
+
// find smallest x such that:
|
|
395
|
+
// bal * s3 >= pos value / lvg
|
|
396
|
+
// where:
|
|
397
|
+
// pos value / lvg = |pos| * R(pm, sign(pos)) * margin rate
|
|
398
|
+
// pos = pos0 + k
|
|
399
|
+
// cash = cash0 + x
|
|
400
|
+
// ell = ell0 + px * k
|
|
401
|
+
// bal * s3 = cash * s3 + pos * sm - ell
|
|
402
|
+
// = bal0 * s3 + x * s3 + k * (sm - px)
|
|
403
|
+
|
|
404
|
+
// subject to:
|
|
405
|
+
// x >= 0
|
|
406
|
+
// cash * s3 >= |pos| * min(cmin, prob(sign(pos)))
|
|
407
|
+
// k * (sm - px) <= 0 a.s.
|
|
408
|
+
// (positive pnl does not contribute, i.e. ignore px better than mark)
|
|
409
|
+
|
|
410
|
+
// solution:
|
|
411
|
+
// bal0 * s3 + x * s3 >= pos value / lvg + (k * (px - sm))_+ = v * s3
|
|
412
|
+
// -->
|
|
413
|
+
// x >= v + (cash0 - bal0)_+ - cash0 = v - min(bal0, cash0)
|
|
414
|
+
// = pos value / lvg/ s3 + (k * (px - sm))_+ / s3 - min (bal0, cash0)
|
|
415
|
+
// = A + B - C
|
|
416
|
+
// x >= |pos| * min(cmin, prob(sign(pos))) / s3 - cash0
|
|
417
|
+
// x >= 0
|
|
418
|
+
|
|
419
|
+
// init x = A = pos value / lvg / s3
|
|
420
|
+
int128 fNewPos = _fPosition0.add(_fTradeAmount);
|
|
421
|
+
int128 v = (
|
|
422
|
+
fNewPos > 0 ? fNewPos.mul(_fMarkProb) : fNewPos.neg().mul(ONE_64x64.sub(_fMarkProb))
|
|
423
|
+
).mul(_fMarginRate).div(_fS3);
|
|
424
|
+
// + B = max(0,k * (px - sm)) / s3
|
|
425
|
+
{
|
|
426
|
+
int128 fPnL = _fTradeAmount.mul(_fMarkProb.sub(_fTradeProb));
|
|
427
|
+
if (fPnL < 0) {
|
|
428
|
+
v = v.sub(fPnL.div(_fS3)); // pnl < 0 -> increase v
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// - C = - min(bal0, cash0) = - Equity
|
|
432
|
+
{
|
|
433
|
+
int128 equity = _fCash0CC < _fBalance0 ? _fCash0CC : _fBalance0;
|
|
434
|
+
v = v.sub(equity); // equity can be used / must be covered if negative
|
|
435
|
+
}
|
|
436
|
+
return v > 0 ? v : int128(0);
|
|
437
|
+
*/
|
|
438
|
+
const newPos = pos0 + tradeAmnt;
|
|
439
|
+
const posProb = newPos > 0 ? markProb : 1 - markProb; // R(pm, sign(new pos))
|
|
440
|
+
const maxLvg = pmMaxLeverage(newPos, markProb, imr);
|
|
441
|
+
targetLvg = targetLvg > maxLvg ? maxLvg : targetLvg;
|
|
442
|
+
const posValue = (Math.abs(newPos) * posProb) / S3;
|
|
443
|
+
const tradeLoss = Math.max(0, tradeAmnt * (prob - markProb)) / S3;
|
|
444
|
+
const curEquity = Math.min(c0, b0);
|
|
445
|
+
return Math.max(posValue / targetLvg + tradeLoss - curEquity, 0);
|
|
446
|
+
}
|
|
447
|
+
exports.getDepositAmountForPredMktLvgTrade = getDepositAmountForPredMktLvgTrade;
|
|
448
|
+
function pmMaxLeverage(posSign, markProb, minMarginPerCtrct) {
|
|
449
|
+
return Math.round(100 * (posSign > 0 ? markProb / minMarginPerCtrct : (1 - markProb) / minMarginPerCtrct)) / 100;
|
|
450
|
+
}
|
|
380
451
|
/**
|
|
381
452
|
* Convert a perpetual price to probability (predtictive markets)
|
|
382
453
|
* @param px Perpetual price
|
|
@@ -392,7 +463,7 @@ exports.priceToProb = priceToProb;
|
|
|
392
463
|
* @returns Perpetual price
|
|
393
464
|
*/
|
|
394
465
|
function probToPrice(prob) {
|
|
395
|
-
return 1 + prob;
|
|
466
|
+
return Math.max(1, Math.min(2, 1 + prob));
|
|
396
467
|
}
|
|
397
468
|
exports.probToPrice = probToPrice;
|
|
398
469
|
// shannon entropy
|
|
@@ -406,113 +477,59 @@ exports.entropy = entropy;
|
|
|
406
477
|
/**
|
|
407
478
|
* Maintenance margin requirement for prediction markets
|
|
408
479
|
* @param pos signed position
|
|
480
|
+
* @param lockedInQC locked in value
|
|
409
481
|
* @param s2 mark price
|
|
410
482
|
* @param s3 collateral to quote conversion
|
|
411
483
|
* @param m base margin rate
|
|
412
484
|
* @returns required margin balance
|
|
413
485
|
*/
|
|
414
|
-
function pmMarginThresh(pos, s2, s3, m
|
|
415
|
-
|
|
416
|
-
if (pos < 0) {
|
|
417
|
-
p = 1 - p;
|
|
418
|
-
}
|
|
419
|
-
const h = entropy(p);
|
|
420
|
-
const tau = m + (0.4 - m) * h;
|
|
421
|
-
return (Math.abs(pos) * p * tau) / s3;
|
|
486
|
+
function pmMarginThresh(pos, lockedInQC, s2, s3, m) {
|
|
487
|
+
return (pmMaintenanceMarginRate(pos, lockedInQC, s2, m) * Math.abs(pos)) / s3;
|
|
422
488
|
}
|
|
423
489
|
/**
|
|
424
490
|
* Maintenance margin rate for prediction markets.
|
|
425
|
-
* @param
|
|
491
|
+
* @param position signed position in base currency
|
|
492
|
+
* @param lockedInQC locked in value, p or 1-p times number of contracts
|
|
426
493
|
* @param sm mark-price (=1+p)
|
|
427
|
-
* @param m
|
|
428
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
429
|
-
*/
|
|
430
|
-
function pmMaintenanceMarginRate(
|
|
431
|
-
let
|
|
432
|
-
|
|
433
|
-
|
|
494
|
+
* @param m absolute maintenance buffer per contract (mu_m, fMaintenanceMarginRate)
|
|
495
|
+
* @returns {number} The margin rate to be applied: (Math.abs(pos) * p * tau) / s3
|
|
496
|
+
*/
|
|
497
|
+
function pmMaintenanceMarginRate(position, lockedInQC, sm, m) {
|
|
498
|
+
let pm = sm - 1;
|
|
499
|
+
let entryP = position == 0 ? pm : Math.abs(lockedInQC / position) - 1;
|
|
500
|
+
if (position < 0) {
|
|
501
|
+
pm = 1 - pm;
|
|
502
|
+
entryP = 1 - entryP;
|
|
434
503
|
}
|
|
435
|
-
const
|
|
436
|
-
|
|
504
|
+
const L = Math.max(entryP - pm, 0);
|
|
505
|
+
const balAtLiq = Math.min(m + L, entryP) * Math.abs(position) + position * sm - lockedInQC;
|
|
506
|
+
return balAtLiq / (Math.abs(position) * pm);
|
|
437
507
|
}
|
|
438
508
|
exports.pmMaintenanceMarginRate = pmMaintenanceMarginRate;
|
|
439
509
|
/**
|
|
440
|
-
*
|
|
510
|
+
* Initial margin rate for prediction markets.
|
|
441
511
|
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
512
|
+
* @param s0 trade price
|
|
442
513
|
* @param sm mark-price (=1+p)
|
|
443
|
-
* @param
|
|
444
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
514
|
+
* @param cmin Absolute min margin saved as `fInitialMarginRate`
|
|
515
|
+
* @returns {number} The margin rate to be applied: `(Math.abs(pos) * p * tau) / s3`
|
|
445
516
|
*/
|
|
446
|
-
function pmInitialMarginRate(posSign, sm,
|
|
447
|
-
let
|
|
517
|
+
function pmInitialMarginRate(posSign, s0, sm, cmin) {
|
|
518
|
+
let pm = sm - 1;
|
|
519
|
+
let p0 = s0 - 1;
|
|
448
520
|
if (posSign < 0) {
|
|
449
|
-
|
|
521
|
+
pm = 1 - pm; // R(p_mark, sign(pos))
|
|
522
|
+
p0 = 1 - p0; // R(p_entry, sign(pos))
|
|
450
523
|
}
|
|
451
|
-
|
|
452
|
-
|
|
524
|
+
// mu0 = max(Rm/lvg, min(Rm, cmin))
|
|
525
|
+
// balance = (mu0 * |k| + k *(sm - s0)) / s3
|
|
526
|
+
// pos value = |k| * Rm / s3
|
|
527
|
+
// at max init lvg: Rm/lvg = min(cmin, Rm)
|
|
528
|
+
// --> margin rate = (mu0 + Rm - R0) / Rm
|
|
529
|
+
const mu0 = Math.min(pm, cmin) + Math.max(0, p0 - pm);
|
|
530
|
+
return (mu0 + pm - p0) / pm;
|
|
453
531
|
}
|
|
454
532
|
exports.pmInitialMarginRate = pmInitialMarginRate;
|
|
455
|
-
/**
|
|
456
|
-
* Calculate the expected loss for a prediction market trade used for
|
|
457
|
-
* prediction market fees
|
|
458
|
-
* @param p probability derived from mark price (long)
|
|
459
|
-
* @param m maximal maintenance rate from which we defer the actual maintenance margin rate
|
|
460
|
-
* @param totLong total long in base currency
|
|
461
|
-
* @param totShort total short
|
|
462
|
-
* @param tradeAmt signed trade amount, can be zero
|
|
463
|
-
* @param tradeMgnRate margin rate of the trader
|
|
464
|
-
* @returns expected loss in dollars
|
|
465
|
-
*/
|
|
466
|
-
function expectedLoss(p, m, totLong, totShort, tradeAmt, tradeMgnRate) {
|
|
467
|
-
// maintenance margin rate
|
|
468
|
-
m = (0.4 - m) * entropy(p) + m;
|
|
469
|
-
let dlm = 0;
|
|
470
|
-
let dl = 0;
|
|
471
|
-
let dsm = 0;
|
|
472
|
-
let ds = 0;
|
|
473
|
-
if (tradeAmt > 0) {
|
|
474
|
-
dlm = p * tradeAmt * tradeMgnRate;
|
|
475
|
-
dl = tradeAmt;
|
|
476
|
-
}
|
|
477
|
-
else if (tradeAmt < 0) {
|
|
478
|
-
dsm = (1 - p) * Math.abs(tradeAmt) * tradeMgnRate;
|
|
479
|
-
ds = Math.abs(tradeAmt);
|
|
480
|
-
}
|
|
481
|
-
const a = dl + totLong - m * totShort - dsm;
|
|
482
|
-
const b = ds + totShort - m * totLong - dlm;
|
|
483
|
-
return p * (1 - p) * Math.max(0, a + b);
|
|
484
|
-
}
|
|
485
|
-
exports.expectedLoss = expectedLoss;
|
|
486
|
-
/**
|
|
487
|
-
* Equivalent to
|
|
488
|
-
* const el0 = expectedLoss(prob, m, totLong, totShort, 0, 0);
|
|
489
|
-
* const el1 = expectedLoss(prob, m, totLong, totShort, tradeAmt, tradeMgnRate)
|
|
490
|
-
* const fee = (el1 - el0) / Math.abs(tradeAmt);
|
|
491
|
-
* @param p prob long probability
|
|
492
|
-
* @param m max maintenance margin rate (0.18)
|
|
493
|
-
* @param tradeAmt trade amount in base currency
|
|
494
|
-
* @param tradeMgnRate margin rate for this trade
|
|
495
|
-
* @returns dollar fee
|
|
496
|
-
*/
|
|
497
|
-
function expectedLossImpact(p, m, tradeAmt, tradeMgnRate) {
|
|
498
|
-
m = (0.4 - m) * entropy(p) + m;
|
|
499
|
-
let dlm = 0;
|
|
500
|
-
let dl = 0;
|
|
501
|
-
let dsm = 0;
|
|
502
|
-
let ds = 0;
|
|
503
|
-
if (tradeAmt > 0) {
|
|
504
|
-
dlm = p * tradeAmt * tradeMgnRate;
|
|
505
|
-
dl = tradeAmt;
|
|
506
|
-
}
|
|
507
|
-
else if (tradeAmt < 0) {
|
|
508
|
-
dsm = (1 - p) * Math.abs(tradeAmt) * tradeMgnRate;
|
|
509
|
-
ds = Math.abs(tradeAmt);
|
|
510
|
-
}
|
|
511
|
-
//long: p * (1 - p) max(0, dl-dlm) = p * (1 - p) max(0, tradeAmt - p * tradeAmt * tradeMgnRate)
|
|
512
|
-
const a = dl - dsm;
|
|
513
|
-
const b = ds - dlm;
|
|
514
|
-
return p * (1 - p) * Math.max(0, a + b);
|
|
515
|
-
}
|
|
516
533
|
/**
|
|
517
534
|
* Exchange fee as a rate for prediction markets
|
|
518
535
|
* For opening trades only
|
|
@@ -523,13 +540,12 @@ function expectedLossImpact(p, m, tradeAmt, tradeMgnRate) {
|
|
|
523
540
|
* @returns dollar fee relative to tradeAmt
|
|
524
541
|
*/
|
|
525
542
|
function pmExchangeFee(prob, m, tradeAmt, tradeMgnRate) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
let fee = expectedLossImpact(prob, m, tradeAmt, tradeMgnRate) / Math.abs(tradeAmt);
|
|
543
|
+
// TODO: port contract logic here
|
|
544
|
+
const [kappa, es] = [0, 0];
|
|
545
|
+
prob = tradeAmt > 0 ? prob : 1 - prob;
|
|
546
|
+
let fee = prob * (1 - kappa);
|
|
547
|
+
const scaledLvg = prob * tradeMgnRate * (1 - fee);
|
|
548
|
+
fee = fee * (1 - prob) - scaledLvg + es;
|
|
533
549
|
return Math.max(fee, 0.001);
|
|
534
550
|
}
|
|
535
551
|
exports.pmExchangeFee = pmExchangeFee;
|
|
@@ -547,28 +563,40 @@ function pmMarginBalance(pos, s2, s3, ell, mc) {
|
|
|
547
563
|
}
|
|
548
564
|
exports.pmMarginBalance = pmMarginBalance;
|
|
549
565
|
function pmExcessBalance(pos, s2, s3, ell, mc, m) {
|
|
550
|
-
return pmMarginBalance(pos, s2, s3, ell, mc) - pmMarginThresh(pos, s2, s3, m);
|
|
566
|
+
return pmMarginBalance(pos, s2, s3, ell, mc) - pmMarginThresh(pos, ell, s2, s3, m);
|
|
551
567
|
}
|
|
552
568
|
exports.pmExcessBalance = pmExcessBalance;
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
569
|
+
/**
|
|
570
|
+
*
|
|
571
|
+
* @param pos Signed position size
|
|
572
|
+
* @param s3 Collateral to quote conversion at spot
|
|
573
|
+
* @param ell Locked-in value
|
|
574
|
+
* @param mc Margin collateral
|
|
575
|
+
* @param baseMarginRate Maintenance margin per contract (mu_m)
|
|
576
|
+
* @param sm Mark price at entry
|
|
577
|
+
* @returns {number} Liquidation price as a probability in the range [0, 1]
|
|
578
|
+
*/
|
|
579
|
+
function pmFindLiquidationPrice(pos, s3, ell, mc, baseMarginRate) {
|
|
580
|
+
// liq <--> (A) c / |k| < R0 && (B) E < |k| * mu_m
|
|
581
|
+
// if not (A), return 0 (long) or 1 (short) [no liq]
|
|
582
|
+
// else, solve for pm:
|
|
583
|
+
// E = c - |k| max(0, s * (p0 - pm)) = |k| * mu_m
|
|
584
|
+
// if c/|k| < mu_m:
|
|
585
|
+
// any number would do --> return 1 (long) or 0 (short)
|
|
586
|
+
// else:
|
|
587
|
+
// pm = p0 - s * (c/|k| - mu_m)
|
|
588
|
+
const p0 = Math.abs(ell / pos) - 1;
|
|
589
|
+
const R0 = pos > 0 ? p0 : 1 - p0;
|
|
590
|
+
const excessPerCtrct = (mc * s3) / Math.abs(pos) - baseMarginRate; // c/|k| - mu_m, mu_m < CMINUS
|
|
591
|
+
if (mc * s3 > R0 * Math.abs(pos)) {
|
|
592
|
+
// c > |k| R(p0, s) --> no liquidation
|
|
593
|
+
return probToPrice(pos > 0 ? 0.0001 : 0.9999);
|
|
594
|
+
}
|
|
595
|
+
if (excessPerCtrct < 0) {
|
|
596
|
+
// already underwater
|
|
597
|
+
return probToPrice(pos > 0 ? 0.9999 : 0.0001);
|
|
570
598
|
}
|
|
571
|
-
return
|
|
599
|
+
return probToPrice(pos > 0 ? p0 - excessPerCtrct : p0 + excessPerCtrct);
|
|
572
600
|
}
|
|
573
601
|
exports.pmFindLiquidationPrice = pmFindLiquidationPrice;
|
|
574
602
|
/**
|
|
@@ -613,19 +641,22 @@ function excessMargin(tradeAmt, currentCashCC, currentPos, currentLockedInQC, li
|
|
|
613
641
|
* @returns deposit amount
|
|
614
642
|
*/
|
|
615
643
|
function pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark) {
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
//
|
|
624
|
-
//
|
|
625
|
-
//
|
|
626
|
-
//
|
|
627
|
-
//
|
|
628
|
-
|
|
644
|
+
const cmin = 0.05;
|
|
645
|
+
// refer to main contract function for this:
|
|
646
|
+
return getDepositAmountForPredMktLvgTrade(0, 0, 0, tradeAmt, targetLvg, price - 1, S3, S2Mark - 1, cmin);
|
|
647
|
+
// const pnl = (tradeAmt * (S2Mark - price)) / S3;
|
|
648
|
+
// let p = S2Mark - 1;
|
|
649
|
+
// if (tradeAmt < 0) {
|
|
650
|
+
// p = 1 - p;
|
|
651
|
+
// }
|
|
652
|
+
// const b = (Math.abs(tradeAmt) * p) / S3 / targetLvg;
|
|
653
|
+
// const amt = -(pnl - b);
|
|
654
|
+
// // check:
|
|
655
|
+
// //bal = amt+pnl
|
|
656
|
+
// //pos_val = (np.abs(trade_amt) * p) / S3
|
|
657
|
+
// //lvg = pos_val/bal
|
|
658
|
+
// //assert(np.abs(lvg-targetLvg)<0.1)
|
|
659
|
+
// return amt;
|
|
629
660
|
}
|
|
630
661
|
/**
|
|
631
662
|
* Internal function to calculate cash over initial margin rate
|
|
@@ -645,16 +676,19 @@ function pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark) {
|
|
|
645
676
|
* @returns excess cash
|
|
646
677
|
*/
|
|
647
678
|
function pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPosition, currentLockedInValue, slippage, S2, Sm, S3) {
|
|
679
|
+
const cmin = 0.05;
|
|
680
|
+
const mu_m = 0.01;
|
|
681
|
+
const maxLvg = pmMaxLeverage(currentPosition + tradeAmt, Sm - 1, cmin);
|
|
682
|
+
lvg = lvg < maxLvg ? lvg : maxLvg;
|
|
648
683
|
//determine deposit amount for given leverage
|
|
649
684
|
const limitPrice = S2 * (1 + Math.sign(tradeAmt) * slippage);
|
|
650
685
|
const depositFromWallet = pmGetDepositAmtForLvgTrade(tradeAmt, lvg, limitPrice, S3, Sm);
|
|
651
|
-
const m0 = 0.18;
|
|
652
686
|
//leverage fee
|
|
653
687
|
let p0 = Sm - 1;
|
|
654
688
|
if (tradeAmt < 0) {
|
|
655
689
|
p0 = 2 - Sm; //=1-(Sm-1)
|
|
656
690
|
}
|
|
657
|
-
const feeCc = (Math.abs(tradeAmt) * pmExchangeFee(p0,
|
|
691
|
+
const feeCc = (Math.abs(tradeAmt) * pmExchangeFee(p0, mu_m, tradeAmt, 1 / lvg)) / S3;
|
|
658
692
|
//excess cash
|
|
659
693
|
let exc = walletBalCC - depositFromWallet - feeCc;
|
|
660
694
|
if (exc < 0) {
|
|
@@ -663,12 +697,13 @@ function pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPos
|
|
|
663
697
|
// margin balance
|
|
664
698
|
let pos = currentPosition + tradeAmt;
|
|
665
699
|
let p = Sm - 1;
|
|
700
|
+
let entryP = limitPrice - 1;
|
|
666
701
|
if (pos < 0) {
|
|
667
|
-
p =
|
|
702
|
+
p = 1 - Sm;
|
|
703
|
+
entryP = 1 - entryP;
|
|
668
704
|
}
|
|
669
|
-
const
|
|
670
|
-
const
|
|
671
|
-
const thresh = Math.abs(pos) * p * tau;
|
|
705
|
+
const mu0 = p / lvg + Math.max(0, entryP - p);
|
|
706
|
+
const thresh = Math.abs(pos) * mu0;
|
|
672
707
|
const b0 = depositFromWallet +
|
|
673
708
|
currentCashCC +
|
|
674
709
|
Math.abs(currentPosition) * Sm -
|
|
@@ -781,13 +816,15 @@ exports.pmFindMaxPersonalTradeSizeAtLeverage = pmFindMaxPersonalTradeSizeAtLever
|
|
|
781
816
|
* @param short Short open OI
|
|
782
817
|
* @param sm Mark price (>1)
|
|
783
818
|
* @param isBuy True if trade is long
|
|
784
|
-
* @param mr
|
|
819
|
+
* @param mr Margin threshold per contract for liquidation (mu_m)
|
|
785
820
|
*/
|
|
786
821
|
function pmMaxSignedOpenTradeSize(long, short, sm, isBuy, mr, ammFundsQC) {
|
|
787
|
-
if (sm
|
|
822
|
+
if (sm <= 1 || sm >= 2) {
|
|
823
|
+
// closed
|
|
788
824
|
return 0;
|
|
789
825
|
}
|
|
790
|
-
const
|
|
826
|
+
const counterPos = isBuy ? -short : long;
|
|
827
|
+
const m = pmMaintenanceMarginRate(counterPos, counterPos * sm, sm, mr);
|
|
791
828
|
let p = !isBuy ? sm - 1 : 2 - sm;
|
|
792
829
|
p = p < 0.01 ? 0.01 : p > 0.99 ? 0.99 : p; // same cap as contract
|
|
793
830
|
return isBuy ? (ammFundsQC + m * p * short) / p - long : -(ammFundsQC + m * p * long) / p + short;
|