@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.
Files changed (263) hide show
  1. package/dist/cjs/config/defaultConfig.json +2 -2
  2. package/dist/cjs/constants.js.map +1 -1
  3. package/dist/cjs/d8XMath.d.ts +40 -29
  4. package/dist/cjs/d8XMath.js +244 -151
  5. package/dist/cjs/d8XMath.js.map +1 -1
  6. package/dist/cjs/liquidatorTool.d.ts +1 -1
  7. package/dist/cjs/liquidatorTool.js +9 -9
  8. package/dist/cjs/liquidatorTool.js.map +1 -1
  9. package/dist/cjs/main.d.ts +1 -0
  10. package/dist/cjs/main.js +15 -0
  11. package/dist/cjs/main.js.map +1 -0
  12. package/dist/cjs/marketData.d.ts +7 -11
  13. package/dist/cjs/marketData.js +31 -20
  14. package/dist/cjs/marketData.js.map +1 -1
  15. package/dist/cjs/perpetualDataHandler.d.ts +12 -12
  16. package/dist/cjs/perpetualDataHandler.js +13 -14
  17. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  18. package/dist/cjs/polyMktsPxFeed.js +2 -2
  19. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  20. package/dist/cjs/priceFeeds.d.ts +1 -0
  21. package/dist/cjs/priceFeeds.js +19 -3
  22. package/dist/cjs/priceFeeds.js.map +1 -1
  23. package/dist/cjs/version.d.ts +1 -1
  24. package/dist/cjs/version.js +1 -1
  25. package/dist/esm/config/defaultConfig.json +2 -2
  26. package/dist/esm/constants.js.map +1 -1
  27. package/dist/esm/d8XMath.d.ts +40 -29
  28. package/dist/esm/d8XMath.js +241 -150
  29. package/dist/esm/d8XMath.js.map +1 -1
  30. package/dist/esm/liquidatorTool.d.ts +1 -1
  31. package/dist/esm/liquidatorTool.js +10 -10
  32. package/dist/esm/liquidatorTool.js.map +1 -1
  33. package/dist/esm/main.d.ts +1 -0
  34. package/dist/esm/main.js +13 -0
  35. package/dist/esm/main.js.map +1 -0
  36. package/dist/esm/main2.d.ts +1 -0
  37. package/dist/esm/main2.js +18 -0
  38. package/dist/esm/main2.js.map +1 -0
  39. package/dist/esm/marketData.d.ts +7 -11
  40. package/dist/esm/marketData.js +32 -21
  41. package/dist/esm/marketData.js.map +1 -1
  42. package/dist/esm/perpetualDataHandler.d.ts +12 -12
  43. package/dist/esm/perpetualDataHandler.js +13 -14
  44. package/dist/esm/perpetualDataHandler.js.map +1 -1
  45. package/dist/esm/polyMktsPxFeed.js +2 -2
  46. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  47. package/dist/esm/priceFeeds.d.ts +1 -0
  48. package/dist/esm/priceFeeds.js +19 -3
  49. package/dist/esm/priceFeeds.js.map +1 -1
  50. package/dist/esm/version.d.ts +1 -1
  51. package/dist/esm/version.js +1 -1
  52. package/doc/d8x-perpetuals-sdk.md +109 -81
  53. package/doc/marketData.md +2 -10
  54. package/package.json +5 -2
  55. package/src/config/defaultConfig.json +2 -2
  56. package/src/constants.ts +0 -1
  57. package/src/d8XMath.ts +268 -167
  58. package/src/liquidatorTool.ts +16 -10
  59. package/src/marketData.ts +62 -35
  60. package/src/perpetualDataHandler.ts +28 -34
  61. package/src/polyMktsPxFeed.ts +6 -7
  62. package/src/priceFeeds.ts +20 -4
  63. package/src/version.ts +1 -1
  64. package/dist/cjs/abi/AMMPerpLogic.json +0 -580
  65. package/dist/cjs/abi/BeaconProxy.json +0 -71
  66. package/dist/cjs/abi/IPerpetualManager copy.json +0 -5599
  67. package/dist/cjs/abi/IPerpetualMarginViewLogic.json +0 -286
  68. package/dist/cjs/abi/Maintainer.json +0 -774
  69. package/dist/cjs/abi/MockToken.json +0 -347
  70. package/dist/cjs/abi/MockUSD.json +0 -413
  71. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  72. package/dist/cjs/abi/WeETH.json +0 -310
  73. package/dist/cjs/abi-zkevm/IPerpetualManager.json +0 -5366
  74. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  75. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  76. package/dist/cjs/contracts/AMMPerpLogic.d.ts +0 -303
  77. package/dist/cjs/contracts/AMMPerpLogic.js +0 -3
  78. package/dist/cjs/contracts/AMMPerpLogic.js.map +0 -1
  79. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  80. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  81. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  82. package/dist/cjs/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  83. package/dist/cjs/contracts/IPerpetualManagerCopy.js +0 -3
  84. package/dist/cjs/contracts/IPerpetualManagerCopy.js.map +0 -1
  85. package/dist/cjs/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  86. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js +0 -3
  87. package/dist/cjs/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  88. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  89. package/dist/cjs/contracts/Maintainer.js +0 -3
  90. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  91. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  92. package/dist/cjs/contracts/MockToken.js +0 -3
  93. package/dist/cjs/contracts/MockToken.js.map +0 -1
  94. package/dist/cjs/contracts/MockUSD.d.ts +0 -186
  95. package/dist/cjs/contracts/MockUSD.js +0 -3
  96. package/dist/cjs/contracts/MockUSD.js.map +0 -1
  97. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  98. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  99. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  100. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  101. package/dist/cjs/contracts/WeETH.js +0 -3
  102. package/dist/cjs/contracts/WeETH.js.map +0 -1
  103. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  104. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js +0 -598
  105. package/dist/cjs/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  106. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  107. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  108. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  109. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  110. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5617
  111. package/dist/cjs/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  112. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  113. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -304
  114. package/dist/cjs/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  115. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  116. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  117. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  118. package/dist/cjs/contracts/factories/MockToken__factory.d.ts +0 -273
  119. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  120. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  121. package/dist/cjs/contracts/factories/MockUSD__factory.d.ts +0 -320
  122. package/dist/cjs/contracts/factories/MockUSD__factory.js +0 -431
  123. package/dist/cjs/contracts/factories/MockUSD__factory.js.map +0 -1
  124. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  125. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  126. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  127. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  128. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  129. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  130. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  131. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  132. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  133. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  134. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  135. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  136. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  137. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  138. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  139. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  140. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  141. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  142. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  143. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  144. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  145. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  146. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  147. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  148. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  149. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  150. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  151. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  152. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  153. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  154. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  155. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  156. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  157. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  158. package/dist/cjs/contracts/lean0/index.js +0 -3
  159. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  160. package/dist/esm/abi/AMMPerpLogic.json +0 -580
  161. package/dist/esm/abi/BeaconProxy.json +0 -71
  162. package/dist/esm/abi/IPerpetualManager copy.json +0 -5599
  163. package/dist/esm/abi/IPerpetualMarginViewLogic.json +0 -286
  164. package/dist/esm/abi/Maintainer.json +0 -774
  165. package/dist/esm/abi/MockToken.json +0 -347
  166. package/dist/esm/abi/MockUSD.json +0 -413
  167. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  168. package/dist/esm/abi/WeETH.json +0 -310
  169. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  170. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  171. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  172. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  173. package/dist/esm/abi-zkevm/IPerpetualManager.json +0 -5366
  174. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  175. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  176. package/dist/esm/contracts/AMMPerpLogic.d.ts +0 -303
  177. package/dist/esm/contracts/AMMPerpLogic.js +0 -2
  178. package/dist/esm/contracts/AMMPerpLogic.js.map +0 -1
  179. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  180. package/dist/esm/contracts/BeaconProxy.js +0 -2
  181. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  182. package/dist/esm/contracts/IPerpetualManagerCopy.d.ts +0 -3223
  183. package/dist/esm/contracts/IPerpetualManagerCopy.js +0 -2
  184. package/dist/esm/contracts/IPerpetualManagerCopy.js.map +0 -1
  185. package/dist/esm/contracts/IPerpetualMarginViewLogic.d.ts +0 -183
  186. package/dist/esm/contracts/IPerpetualMarginViewLogic.js +0 -2
  187. package/dist/esm/contracts/IPerpetualMarginViewLogic.js.map +0 -1
  188. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  189. package/dist/esm/contracts/Maintainer.js +0 -2
  190. package/dist/esm/contracts/Maintainer.js.map +0 -1
  191. package/dist/esm/contracts/MockToken.d.ts +0 -263
  192. package/dist/esm/contracts/MockToken.js +0 -2
  193. package/dist/esm/contracts/MockToken.js.map +0 -1
  194. package/dist/esm/contracts/MockUSD.d.ts +0 -186
  195. package/dist/esm/contracts/MockUSD.js +0 -2
  196. package/dist/esm/contracts/MockUSD.js.map +0 -1
  197. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  198. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  199. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  200. package/dist/esm/contracts/WeETH.d.ts +0 -503
  201. package/dist/esm/contracts/WeETH.js +0 -2
  202. package/dist/esm/contracts/WeETH.js.map +0 -1
  203. package/dist/esm/contracts/factories/AMMPerpLogic__factory.d.ts +0 -452
  204. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js +0 -594
  205. package/dist/esm/contracts/factories/AMMPerpLogic__factory.js.map +0 -1
  206. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  207. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  208. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  209. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.d.ts +0 -4358
  210. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js +0 -5613
  211. package/dist/esm/contracts/factories/IPerpetualManagerCopy__factory.js.map +0 -1
  212. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.d.ts +0 -221
  213. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js +0 -300
  214. package/dist/esm/contracts/factories/IPerpetualMarginViewLogic__factory.js.map +0 -1
  215. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  216. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  217. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  218. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  219. package/dist/esm/contracts/factories/MockToken__factory.js +0 -361
  220. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  221. package/dist/esm/contracts/factories/MockUSD__factory.d.ts +0 -320
  222. package/dist/esm/contracts/factories/MockUSD__factory.js +0 -427
  223. package/dist/esm/contracts/factories/MockUSD__factory.js.map +0 -1
  224. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  225. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  226. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  227. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  228. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  229. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  230. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  231. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  232. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  233. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  234. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  235. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  236. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  237. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  238. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  239. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  240. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  241. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  242. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  243. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  244. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  245. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  246. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  247. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  248. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  249. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  250. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  251. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  252. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  253. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  254. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  255. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  256. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  257. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  258. package/dist/esm/contracts/lean0/index.js +0 -2
  259. package/dist/esm/contracts/lean0/index.js.map +0 -1
  260. package/src/contracts/IPerpetualMarginViewLogic.ts +0 -347
  261. package/src/contracts/MockUSD.ts +0 -378
  262. package/src/contracts/factories/IPerpetualMarginViewLogic__factory.ts +0 -313
  263. 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": 1,
32
- "proxyAddr": "0xa7868558E094E58251c6D12f407294c11522E88D",
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":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
@@ -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 {boolean} isPredMkt - true if prediction market
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, isPredMkt: boolean): 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
- * Maintenance margin rate for prediction markets.
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 m max margin rate from fInitialMarginRate
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 pmMaintenanceMarginRate(posSign: number, sm: number, m?: number | undefined): number;
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 | undefined): number;
229
- export declare function pmFindLiquidationPrice(pos: number, s3: number, ell: number, mc: number, baseMarginRate: number | undefined, s2Start?: number | undefined): number;
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 Maintenance margin rate
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;
@@ -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.expectedLoss = exports.pmInitialMarginRate = exports.pmMaintenanceMarginRate = exports.entropy = exports.probToPrice = exports.priceToProb = 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;
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 {boolean} isPredMkt - true if prediction market
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, isPredMkt) {
359
- let pnl = (tradeAmnt * (S2Mark - price)) / S3;
360
- let S2MarkBefore = S2Mark;
361
- if (isPredMkt) {
362
- // adjust mark price to 'probability'
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) * S2MarkBefore) / S3 / b0;
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 = 0.18) {
415
- let p = s2 - 1;
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 posSign sign of position in base currency (can be signed position or -1, 1)
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 max margin rate from fInitialMarginRate
428
- * @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3;
429
- */
430
- function pmMaintenanceMarginRate(posSign, sm, m = 0.18) {
431
- let p = sm - 1;
432
- if (posSign < 0) {
433
- p = 1 - p;
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
- * Maintenance margin rate for prediction markets.
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 m max margin rate from fMaintenanceMarginRate
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, m = 0.2) {
447
- let p = sm - 1;
522
+ function pmInitialMarginRate(posSign, s0, sm, cmin) {
523
+ let pm = sm - 1;
524
+ let p0 = s0 - 1;
448
525
  if (posSign < 0) {
449
- p = 1 - p;
526
+ pm = 1 - pm; // R(p_mark, sign(pos))
527
+ p0 = 1 - p0; // R(p_entry, sign(pos))
450
528
  }
451
- const h = entropy(p);
452
- return m + (0.5 - m) * h;
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
- equivalent:
528
- const el0 = expectedLoss(prob, m, totLong, totShort, 0, 0);
529
- const el1 = expectedLoss(prob, m, totLong, totShort, tradeAmt, tradeMgnRate);
530
- const fee = (el1 - el0) / Math.abs(tradeAmt);
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
- // finds the liquidation price for prediction markets
554
- // using Newton's algorithm
555
- function pmFindLiquidationPrice(pos, s3, ell, mc, baseMarginRate, s2Start = 0.5) {
556
- const delta_s = 0.01;
557
- let s = 100;
558
- let s_new = s2Start;
559
- while (Math.abs(s_new - s) > 0.01) {
560
- s = s_new;
561
- const f = Math.pow(pmExcessBalance(pos, s, s3, ell, mc, baseMarginRate), 2);
562
- const ds = (Math.pow(pmExcessBalance(pos, s + delta_s, s3, ell, mc, baseMarginRate), 2) - f) / delta_s;
563
- s_new = s - f / ds;
564
- if (s_new < 1) {
565
- return 1;
566
- }
567
- if (s_new > 2) {
568
- return 2;
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
- return s;
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 pnl = (tradeAmt * (S2Mark - price)) / S3;
617
- let p = S2Mark - 1;
618
- if (tradeAmt < 0) {
619
- p = 1 - p;
620
- }
621
- const b = (Math.abs(tradeAmt) * p) / S3 / targetLvg;
622
- const amt = -(pnl - b);
623
- // check:
624
- //bal = amt+pnl
625
- //pos_val = (np.abs(trade_amt) * p) / S3
626
- //lvg = pos_val/bal
627
- //assert(np.abs(lvg-targetLvg)<0.1)
628
- return amt;
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, m0, tradeAmt, 1 / lvg)) / S3;
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 = 2 - Sm;
758
+ p = 1 - Sm;
759
+ entryP = 1 - entryP;
668
760
  }
669
- const h = entropy(p);
670
- const tau = m0 + (0.5 - m0) * h;
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 Maintenance margin rate
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 < 1) {
878
+ if (sm <= 1 || sm >= 2) {
879
+ // closed
788
880
  return 0;
789
881
  }
790
- const m = pmMaintenanceMarginRate(isBuy ? 1 : -1, sm, mr);
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;