@d8x/perpetuals-sdk 2.6.23 → 2.7.1
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 +40 -29
- package/dist/cjs/d8XMath.js +244 -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/main.d.ts +1 -0
- package/dist/cjs/main.js +15 -0
- package/dist/cjs/main.js.map +1 -0
- package/dist/cjs/marketData.d.ts +7 -11
- package/dist/cjs/marketData.js +31 -20
- 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 +40 -29
- package/dist/esm/d8XMath.js +241 -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/main.d.ts +1 -0
- package/dist/esm/main.js +13 -0
- package/dist/esm/main.js.map +1 -0
- package/dist/esm/main2.d.ts +1 -0
- package/dist/esm/main2.js +18 -0
- package/dist/esm/main2.js.map +1 -0
- package/dist/esm/marketData.d.ts +7 -11
- package/dist/esm/marketData.js +32 -21
- 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 +109 -81
- package/doc/marketData.md +2 -10
- package/package.json +5 -2
- package/src/config/defaultConfig.json +2 -2
- package/src/constants.ts +0 -1
- package/src/d8XMath.ts +268 -167
- package/src/liquidatorTool.ts +16 -10
- package/src/marketData.ts +62 -35
- 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
|
|
@@ -177,34 +194,16 @@ export declare function priceToProb(px: number): number;
|
|
|
177
194
|
*/
|
|
178
195
|
export declare function probToPrice(prob: number): number;
|
|
179
196
|
export declare function entropy(prob: number): number;
|
|
197
|
+
export declare function pmMaintenanceMarginRate(position: number, lockedInQC: number, sm: number, m: number): number;
|
|
180
198
|
/**
|
|
181
|
-
*
|
|
199
|
+
* Initial margin rate for prediction markets.
|
|
182
200
|
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
201
|
+
* @param s0 trade price
|
|
183
202
|
* @param sm mark-price (=1+p)
|
|
184
|
-
* @param
|
|
185
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
203
|
+
* @param cmin Absolute min margin saved as `fInitialMarginRate`
|
|
204
|
+
* @returns {number} The margin rate to be applied: `(Math.abs(pos) * p * tau) / s3`
|
|
186
205
|
*/
|
|
187
|
-
export declare function
|
|
188
|
-
/**
|
|
189
|
-
* Maintenance margin rate for prediction markets.
|
|
190
|
-
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
191
|
-
* @param sm mark-price (=1+p)
|
|
192
|
-
* @param m max margin rate from fMaintenanceMarginRate
|
|
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
|
|
206
|
-
*/
|
|
207
|
-
export declare function expectedLoss(p: number, m: number, totLong: number, totShort: number, tradeAmt: number, tradeMgnRate: number): number;
|
|
206
|
+
export declare function pmInitialMarginRate(posSign: number, s0: number, sm: number, cmin: number): number;
|
|
208
207
|
/**
|
|
209
208
|
* Exchange fee as a rate for prediction markets
|
|
210
209
|
* For opening trades only
|
|
@@ -215,6 +214,8 @@ export declare function expectedLoss(p: number, m: number, totLong: number, totS
|
|
|
215
214
|
* @returns dollar fee relative to tradeAmt
|
|
216
215
|
*/
|
|
217
216
|
export declare function pmExchangeFee(prob: number, m: number, tradeAmt: number, tradeMgnRate: number): number;
|
|
217
|
+
export declare function pmExitFee(varphi: number, varphiBar: number, mu_m: number, m_0: number, sigt: number, jump: number): number;
|
|
218
|
+
export declare function pmOpenFee(varphi: number, varphiBar: number, mu_m: number, m_0: number, sigt: number, jump: number): number;
|
|
218
219
|
/**
|
|
219
220
|
* Margin balance for prediction markets
|
|
220
221
|
* @param pos signed position
|
|
@@ -225,8 +226,18 @@ export declare function pmExchangeFee(prob: number, m: number, tradeAmt: number,
|
|
|
225
226
|
* @returns current margin balance
|
|
226
227
|
*/
|
|
227
228
|
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
|
-
|
|
229
|
+
export declare function pmExcessBalance(pos: number, s2: number, s3: number, ell: number, mc: number, m: number): number;
|
|
230
|
+
/**
|
|
231
|
+
*
|
|
232
|
+
* @param pos Signed position size
|
|
233
|
+
* @param s3 Collateral to quote conversion at spot
|
|
234
|
+
* @param ell Locked-in value
|
|
235
|
+
* @param mc Margin collateral
|
|
236
|
+
* @param baseMarginRate Maintenance margin per contract (mu_m)
|
|
237
|
+
* @param sm Mark price at entry
|
|
238
|
+
* @returns {number} Liquidation price as a probability in the range [0, 1]
|
|
239
|
+
*/
|
|
240
|
+
export declare function pmFindLiquidationPrice(pos: number, s3: number, ell: number, mc: number, baseMarginRate: number): number;
|
|
230
241
|
/**
|
|
231
242
|
* Find maximal *affordable* trade size (short dir=-1 or long dir=1) for prediction
|
|
232
243
|
* markets at provided leverage and incorporating the current position
|
|
@@ -254,6 +265,6 @@ export declare function pmFindMaxPersonalTradeSizeAtLeverage(dir: number, lvg: n
|
|
|
254
265
|
* @param short Short open OI
|
|
255
266
|
* @param sm Mark price (>1)
|
|
256
267
|
* @param isBuy True if trade is long
|
|
257
|
-
* @param mr
|
|
268
|
+
* @param mr Margin threshold per contract for liquidation (mu_m)
|
|
258
269
|
*/
|
|
259
270
|
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.
|
|
3
|
+
exports.pmMaxSignedOpenTradeSize = exports.pmFindMaxPersonalTradeSizeAtLeverage = exports.pmFindLiquidationPrice = exports.pmExcessBalance = exports.pmMarginBalance = exports.pmOpenFee = exports.pmExitFee = 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,64 @@ 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
|
+
*/ pmExchangeFee;
|
|
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;
|
|
503
|
+
}
|
|
504
|
+
const L = Math.max(entryP - pm, 0);
|
|
505
|
+
if (position == 0) {
|
|
506
|
+
return Math.min(m + L, entryP) / pm;
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
const balAtLiq = Math.min(m + L, entryP) * Math.abs(position) + (position * sm - lockedInQC);
|
|
510
|
+
return balAtLiq / pm / Math.abs(position);
|
|
434
511
|
}
|
|
435
|
-
const h = entropy(p);
|
|
436
|
-
return m + (0.4 - m) * h;
|
|
437
512
|
}
|
|
438
513
|
exports.pmMaintenanceMarginRate = pmMaintenanceMarginRate;
|
|
439
514
|
/**
|
|
440
|
-
*
|
|
515
|
+
* Initial margin rate for prediction markets.
|
|
441
516
|
* @param posSign sign of position in base currency (can be signed position or -1, 1)
|
|
517
|
+
* @param s0 trade price
|
|
442
518
|
* @param sm mark-price (=1+p)
|
|
443
|
-
* @param
|
|
444
|
-
* @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3
|
|
519
|
+
* @param cmin Absolute min margin saved as `fInitialMarginRate`
|
|
520
|
+
* @returns {number} The margin rate to be applied: `(Math.abs(pos) * p * tau) / s3`
|
|
445
521
|
*/
|
|
446
|
-
function pmInitialMarginRate(posSign, sm,
|
|
447
|
-
let
|
|
522
|
+
function pmInitialMarginRate(posSign, s0, sm, cmin) {
|
|
523
|
+
let pm = sm - 1;
|
|
524
|
+
let p0 = s0 - 1;
|
|
448
525
|
if (posSign < 0) {
|
|
449
|
-
|
|
526
|
+
pm = 1 - pm; // R(p_mark, sign(pos))
|
|
527
|
+
p0 = 1 - p0; // R(p_entry, sign(pos))
|
|
450
528
|
}
|
|
451
|
-
|
|
452
|
-
|
|
529
|
+
// mu0 = max(Rm/lvg, min(Rm, cmin))
|
|
530
|
+
// balance = (mu0 * |k| + k *(sm - s0)) / s3
|
|
531
|
+
// pos value = |k| * Rm / s3
|
|
532
|
+
// at max init lvg: Rm/lvg = min(cmin, Rm)
|
|
533
|
+
// --> margin rate = (mu0 + Rm - R0) / Rm
|
|
534
|
+
const mu0 = Math.min(pm, cmin) + Math.max(0, p0 - pm);
|
|
535
|
+
return (mu0 + pm - p0) / pm;
|
|
453
536
|
}
|
|
454
537
|
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
538
|
/**
|
|
517
539
|
* Exchange fee as a rate for prediction markets
|
|
518
540
|
* For opening trades only
|
|
@@ -523,16 +545,66 @@ function expectedLossImpact(p, m, tradeAmt, tradeMgnRate) {
|
|
|
523
545
|
* @returns dollar fee relative to tradeAmt
|
|
524
546
|
*/
|
|
525
547
|
function pmExchangeFee(prob, m, tradeAmt, tradeMgnRate) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
let fee = expectedLossImpact(prob, m, tradeAmt, tradeMgnRate) / Math.abs(tradeAmt);
|
|
548
|
+
// TODO: port contract logic here
|
|
549
|
+
const [kappa, es] = [0, 0];
|
|
550
|
+
prob = tradeAmt > 0 ? prob : 1 - prob;
|
|
551
|
+
let fee = prob * (1 - kappa);
|
|
552
|
+
const scaledLvg = prob * tradeMgnRate * (1 - fee);
|
|
553
|
+
fee = fee * (1 - prob) - scaledLvg + es;
|
|
533
554
|
return Math.max(fee, 0.001);
|
|
534
555
|
}
|
|
535
556
|
exports.pmExchangeFee = pmExchangeFee;
|
|
557
|
+
function pmExitFee(varphi, varphiBar, mu_m, m_0, sigt, jump) {
|
|
558
|
+
const pLiq = varphi + mu_m - m_0;
|
|
559
|
+
const kappa = calcKappa(varphiBar, pLiq, sigt);
|
|
560
|
+
let fee = prdMktLvgFee(kappa, varphi, m_0);
|
|
561
|
+
return fee;
|
|
562
|
+
}
|
|
563
|
+
exports.pmExitFee = pmExitFee;
|
|
564
|
+
function pmOpenFee(varphi, varphiBar, mu_m, m_0, sigt, jump) {
|
|
565
|
+
const pLiq = varphi + mu_m - m_0;
|
|
566
|
+
const kappa = calcKappa(varphiBar, pLiq, sigt);
|
|
567
|
+
const es = calcJumpRisk(kappa, varphiBar, jump);
|
|
568
|
+
const feecap = (1 - varphiBar) * varphiBar - (1 - varphiBar) * m_0;
|
|
569
|
+
let fee = prdMktLvgFee(kappa, varphi, m_0);
|
|
570
|
+
fee = fee + es;
|
|
571
|
+
if (fee > feecap) {
|
|
572
|
+
fee = feecap;
|
|
573
|
+
}
|
|
574
|
+
if (fee < 0.001) {
|
|
575
|
+
fee = 0.001;
|
|
576
|
+
}
|
|
577
|
+
return fee;
|
|
578
|
+
}
|
|
579
|
+
exports.pmOpenFee = pmOpenFee;
|
|
580
|
+
//sigt = sigma*sqrt(t)
|
|
581
|
+
function calcKappa(varphi, varphiLiq, sigt) {
|
|
582
|
+
const p = 1 - varphi;
|
|
583
|
+
const pStar = 1 - varphiLiq;
|
|
584
|
+
const x0 = Math.log(p / (1 - p));
|
|
585
|
+
const a = Math.log(pStar / (1 - pStar));
|
|
586
|
+
const kappa = 2 * (1 - cdfNormalStd((a - x0) / sigt));
|
|
587
|
+
return kappa;
|
|
588
|
+
}
|
|
589
|
+
function calcJumpRisk(kappa, varphi, jump) {
|
|
590
|
+
jump = Math.floor(jump / 0.05) * 0.05;
|
|
591
|
+
const jr = jump * (1 - varphi * (1 - kappa));
|
|
592
|
+
return jr;
|
|
593
|
+
}
|
|
594
|
+
//opening leverage fee with cash per contract of m0, without jump risk
|
|
595
|
+
function prdMktLvgFee(kappa, varphi, m0) {
|
|
596
|
+
const f = (1 - kappa) * varphi * (1 - varphi) - (1 - varphi * (1 - kappa)) * m0;
|
|
597
|
+
return f;
|
|
598
|
+
}
|
|
599
|
+
function cdfNormalStd(x) {
|
|
600
|
+
const t = 1 / (1 + 0.2315419 * Math.abs(x));
|
|
601
|
+
const d = 0.3989423 * Math.exp((-x * x) / 2);
|
|
602
|
+
let prob = d * t * (0.3193815 + t * (-0.3565638 + t * (1.781478 + t * (-1.821256 + t * 1.330274))));
|
|
603
|
+
if (x > 0) {
|
|
604
|
+
prob = 1 - prob;
|
|
605
|
+
}
|
|
606
|
+
return prob;
|
|
607
|
+
}
|
|
536
608
|
/**
|
|
537
609
|
* Margin balance for prediction markets
|
|
538
610
|
* @param pos signed position
|
|
@@ -547,28 +619,40 @@ function pmMarginBalance(pos, s2, s3, ell, mc) {
|
|
|
547
619
|
}
|
|
548
620
|
exports.pmMarginBalance = pmMarginBalance;
|
|
549
621
|
function pmExcessBalance(pos, s2, s3, ell, mc, m) {
|
|
550
|
-
return pmMarginBalance(pos, s2, s3, ell, mc) - pmMarginThresh(pos, s2, s3, m);
|
|
622
|
+
return pmMarginBalance(pos, s2, s3, ell, mc) - pmMarginThresh(pos, ell, s2, s3, m);
|
|
551
623
|
}
|
|
552
624
|
exports.pmExcessBalance = pmExcessBalance;
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
625
|
+
/**
|
|
626
|
+
*
|
|
627
|
+
* @param pos Signed position size
|
|
628
|
+
* @param s3 Collateral to quote conversion at spot
|
|
629
|
+
* @param ell Locked-in value
|
|
630
|
+
* @param mc Margin collateral
|
|
631
|
+
* @param baseMarginRate Maintenance margin per contract (mu_m)
|
|
632
|
+
* @param sm Mark price at entry
|
|
633
|
+
* @returns {number} Liquidation price as a probability in the range [0, 1]
|
|
634
|
+
*/
|
|
635
|
+
function pmFindLiquidationPrice(pos, s3, ell, mc, baseMarginRate) {
|
|
636
|
+
// liq <--> (A) c / |k| < R0 && (B) E < |k| * mu_m
|
|
637
|
+
// if not (A), return 0 (long) or 1 (short) [no liq]
|
|
638
|
+
// else, solve for pm:
|
|
639
|
+
// E = c - |k| max(0, s * (p0 - pm)) = |k| * mu_m
|
|
640
|
+
// if c/|k| < mu_m:
|
|
641
|
+
// any number would do --> return 1 (long) or 0 (short)
|
|
642
|
+
// else:
|
|
643
|
+
// pm = p0 - s * (c/|k| - mu_m)
|
|
644
|
+
const p0 = Math.abs(ell / pos) - 1;
|
|
645
|
+
const R0 = pos > 0 ? p0 : 1 - p0;
|
|
646
|
+
const excessPerCtrct = (mc * s3) / Math.abs(pos) - baseMarginRate; // c/|k| - mu_m, mu_m < CMINUS
|
|
647
|
+
if (mc * s3 > R0 * Math.abs(pos)) {
|
|
648
|
+
// c > |k| R(p0, s) --> no liquidation
|
|
649
|
+
return probToPrice(pos > 0 ? 0.0001 : 0.9999);
|
|
570
650
|
}
|
|
571
|
-
|
|
651
|
+
if (excessPerCtrct < 0) {
|
|
652
|
+
// already underwater
|
|
653
|
+
return probToPrice(pos > 0 ? 0.9999 : 0.0001);
|
|
654
|
+
}
|
|
655
|
+
return probToPrice(pos > 0 ? p0 - excessPerCtrct : p0 + excessPerCtrct);
|
|
572
656
|
}
|
|
573
657
|
exports.pmFindLiquidationPrice = pmFindLiquidationPrice;
|
|
574
658
|
/**
|
|
@@ -613,19 +697,22 @@ function excessMargin(tradeAmt, currentCashCC, currentPos, currentLockedInQC, li
|
|
|
613
697
|
* @returns deposit amount
|
|
614
698
|
*/
|
|
615
699
|
function pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark) {
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
//
|
|
624
|
-
//
|
|
625
|
-
//
|
|
626
|
-
//
|
|
627
|
-
//
|
|
628
|
-
|
|
700
|
+
const cmin = 0.05;
|
|
701
|
+
// refer to main contract function for this:
|
|
702
|
+
return getDepositAmountForPredMktLvgTrade(0, 0, 0, tradeAmt, targetLvg, price - 1, S3, S2Mark - 1, cmin);
|
|
703
|
+
// const pnl = (tradeAmt * (S2Mark - price)) / S3;
|
|
704
|
+
// let p = S2Mark - 1;
|
|
705
|
+
// if (tradeAmt < 0) {
|
|
706
|
+
// p = 1 - p;
|
|
707
|
+
// }
|
|
708
|
+
// const b = (Math.abs(tradeAmt) * p) / S3 / targetLvg;
|
|
709
|
+
// const amt = -(pnl - b);
|
|
710
|
+
// // check:
|
|
711
|
+
// //bal = amt+pnl
|
|
712
|
+
// //pos_val = (np.abs(trade_amt) * p) / S3
|
|
713
|
+
// //lvg = pos_val/bal
|
|
714
|
+
// //assert(np.abs(lvg-targetLvg)<0.1)
|
|
715
|
+
// return amt;
|
|
629
716
|
}
|
|
630
717
|
/**
|
|
631
718
|
* Internal function to calculate cash over initial margin rate
|
|
@@ -645,16 +732,19 @@ function pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark) {
|
|
|
645
732
|
* @returns excess cash
|
|
646
733
|
*/
|
|
647
734
|
function pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPosition, currentLockedInValue, slippage, S2, Sm, S3) {
|
|
735
|
+
const cmin = 0.05;
|
|
736
|
+
const mu_m = 0.01;
|
|
737
|
+
const maxLvg = pmMaxLeverage(currentPosition + tradeAmt, Sm - 1, cmin);
|
|
738
|
+
lvg = lvg < maxLvg ? lvg : maxLvg;
|
|
648
739
|
//determine deposit amount for given leverage
|
|
649
740
|
const limitPrice = S2 * (1 + Math.sign(tradeAmt) * slippage);
|
|
650
741
|
const depositFromWallet = pmGetDepositAmtForLvgTrade(tradeAmt, lvg, limitPrice, S3, Sm);
|
|
651
|
-
const m0 = 0.18;
|
|
652
742
|
//leverage fee
|
|
653
743
|
let p0 = Sm - 1;
|
|
654
744
|
if (tradeAmt < 0) {
|
|
655
745
|
p0 = 2 - Sm; //=1-(Sm-1)
|
|
656
746
|
}
|
|
657
|
-
const feeCc = (Math.abs(tradeAmt) * pmExchangeFee(p0,
|
|
747
|
+
const feeCc = (Math.abs(tradeAmt) * pmExchangeFee(p0, mu_m, tradeAmt, 1 / lvg)) / S3;
|
|
658
748
|
//excess cash
|
|
659
749
|
let exc = walletBalCC - depositFromWallet - feeCc;
|
|
660
750
|
if (exc < 0) {
|
|
@@ -663,12 +753,13 @@ function pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPos
|
|
|
663
753
|
// margin balance
|
|
664
754
|
let pos = currentPosition + tradeAmt;
|
|
665
755
|
let p = Sm - 1;
|
|
756
|
+
let entryP = limitPrice - 1;
|
|
666
757
|
if (pos < 0) {
|
|
667
|
-
p =
|
|
758
|
+
p = 1 - Sm;
|
|
759
|
+
entryP = 1 - entryP;
|
|
668
760
|
}
|
|
669
|
-
const
|
|
670
|
-
const
|
|
671
|
-
const thresh = Math.abs(pos) * p * tau;
|
|
761
|
+
const mu0 = p / lvg + Math.max(0, entryP - p);
|
|
762
|
+
const thresh = Math.abs(pos) * mu0;
|
|
672
763
|
const b0 = depositFromWallet +
|
|
673
764
|
currentCashCC +
|
|
674
765
|
Math.abs(currentPosition) * Sm -
|
|
@@ -781,13 +872,15 @@ exports.pmFindMaxPersonalTradeSizeAtLeverage = pmFindMaxPersonalTradeSizeAtLever
|
|
|
781
872
|
* @param short Short open OI
|
|
782
873
|
* @param sm Mark price (>1)
|
|
783
874
|
* @param isBuy True if trade is long
|
|
784
|
-
* @param mr
|
|
875
|
+
* @param mr Margin threshold per contract for liquidation (mu_m)
|
|
785
876
|
*/
|
|
786
877
|
function pmMaxSignedOpenTradeSize(long, short, sm, isBuy, mr, ammFundsQC) {
|
|
787
|
-
if (sm
|
|
878
|
+
if (sm <= 1 || sm >= 2) {
|
|
879
|
+
// closed
|
|
788
880
|
return 0;
|
|
789
881
|
}
|
|
790
|
-
const
|
|
882
|
+
const counterPos = isBuy ? -short : long;
|
|
883
|
+
const m = pmMaintenanceMarginRate(counterPos, counterPos * sm, sm, mr);
|
|
791
884
|
let p = !isBuy ? sm - 1 : 2 - sm;
|
|
792
885
|
p = p < 0.01 ? 0.01 : p > 0.99 ? 0.99 : p; // same cap as contract
|
|
793
886
|
return isBuy ? (ammFundsQC + m * p * short) / p - long : -(ammFundsQC + m * p * long) / p + short;
|