@catalyst-team/poly-sdk 0.3.0 → 0.4.3

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 (317) hide show
  1. package/README.md +133 -1
  2. package/README.zh-CN.md +2 -0
  3. package/dist/scripts/dip-arb/auto-trade.d.ts +20 -0
  4. package/dist/scripts/dip-arb/auto-trade.d.ts.map +1 -0
  5. package/dist/scripts/dip-arb/auto-trade.js +373 -0
  6. package/dist/scripts/dip-arb/auto-trade.js.map +1 -0
  7. package/dist/scripts/dip-arb/example-basic.d.ts +30 -0
  8. package/dist/scripts/dip-arb/example-basic.d.ts.map +1 -0
  9. package/dist/scripts/dip-arb/example-basic.js +222 -0
  10. package/dist/scripts/dip-arb/example-basic.js.map +1 -0
  11. package/dist/scripts/dip-arb/redeem-positions.d.ts +11 -0
  12. package/dist/scripts/dip-arb/redeem-positions.d.ts.map +1 -0
  13. package/dist/scripts/dip-arb/redeem-positions.js +201 -0
  14. package/dist/scripts/dip-arb/redeem-positions.js.map +1 -0
  15. package/dist/scripts/dip-arb/scan-markets.d.ts +6 -0
  16. package/dist/scripts/dip-arb/scan-markets.d.ts.map +1 -0
  17. package/dist/scripts/dip-arb/scan-markets.js +73 -0
  18. package/dist/scripts/dip-arb/scan-markets.js.map +1 -0
  19. package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  20. package/dist/src/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  21. package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  22. package/dist/src/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  23. package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  24. package/dist/src/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  25. package/dist/src/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  26. package/dist/{__tests__ → src/__tests__}/integration/data-api.integration.test.js +21 -18
  27. package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -0
  28. package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  29. package/dist/src/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  30. package/dist/src/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  31. package/dist/{__tests__ → src/__tests__}/integration/market-service.integration.test.js +7 -0
  32. package/dist/src/__tests__/integration/market-service.integration.test.js.map +1 -0
  33. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  34. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  35. package/dist/src/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  36. package/dist/src/__tests__/integration/trading-service.integration.test.js.map +1 -0
  37. package/dist/src/__tests__/test-utils.d.ts.map +1 -0
  38. package/dist/src/__tests__/test-utils.js.map +1 -0
  39. package/dist/src/catalyst/catalyst-query-service.d.ts +109 -0
  40. package/dist/src/catalyst/catalyst-query-service.d.ts.map +1 -0
  41. package/dist/src/catalyst/catalyst-query-service.js +141 -0
  42. package/dist/src/catalyst/catalyst-query-service.js.map +1 -0
  43. package/dist/src/catalyst/catalyst-realtime-service.d.ts +40 -0
  44. package/dist/src/catalyst/catalyst-realtime-service.d.ts.map +1 -0
  45. package/dist/src/catalyst/catalyst-realtime-service.js +125 -0
  46. package/dist/src/catalyst/catalyst-realtime-service.js.map +1 -0
  47. package/dist/src/catalyst/index.d.ts +4 -0
  48. package/dist/src/catalyst/index.d.ts.map +1 -0
  49. package/dist/src/catalyst/index.js +4 -0
  50. package/dist/src/catalyst/index.js.map +1 -0
  51. package/dist/src/catalyst/types.d.ts +178 -0
  52. package/dist/src/catalyst/types.d.ts.map +1 -0
  53. package/dist/src/catalyst/types.js +2 -0
  54. package/dist/src/catalyst/types.js.map +1 -0
  55. package/dist/src/clients/bridge-client.d.ts.map +1 -0
  56. package/dist/src/clients/bridge-client.js.map +1 -0
  57. package/dist/{clients → src/clients}/ctf-client.d.ts +6 -4
  58. package/dist/src/clients/ctf-client.d.ts.map +1 -0
  59. package/dist/src/clients/ctf-client.js.map +1 -0
  60. package/dist/{clients → src/clients}/data-api.d.ts +94 -20
  61. package/dist/src/clients/data-api.d.ts.map +1 -0
  62. package/dist/{clients → src/clients}/data-api.js +119 -52
  63. package/dist/src/clients/data-api.js.map +1 -0
  64. package/dist/{clients → src/clients}/gamma-api.d.ts +74 -0
  65. package/dist/src/clients/gamma-api.d.ts.map +1 -0
  66. package/dist/{clients → src/clients}/gamma-api.js +7 -0
  67. package/dist/src/clients/gamma-api.js.map +1 -0
  68. package/dist/src/clients/subgraph.d.ts.map +1 -0
  69. package/dist/src/clients/subgraph.js.map +1 -0
  70. package/dist/src/core/cache-adapter-bridge.d.ts.map +1 -0
  71. package/dist/src/core/cache-adapter-bridge.js.map +1 -0
  72. package/dist/{core → src/core}/cache.d.ts +2 -0
  73. package/dist/src/core/cache.d.ts.map +1 -0
  74. package/dist/{core → src/core}/cache.js +4 -0
  75. package/dist/src/core/cache.js.map +1 -0
  76. package/dist/src/core/errors.d.ts.map +1 -0
  77. package/dist/src/core/errors.js.map +1 -0
  78. package/dist/{core → src/core}/rate-limiter.d.ts +2 -1
  79. package/dist/src/core/rate-limiter.d.ts.map +1 -0
  80. package/dist/{core → src/core}/rate-limiter.js +7 -0
  81. package/dist/src/core/rate-limiter.js.map +1 -0
  82. package/dist/{core → src/core}/types.d.ts +105 -1
  83. package/dist/src/core/types.d.ts.map +1 -0
  84. package/dist/src/core/types.js +49 -0
  85. package/dist/src/core/types.js.map +1 -0
  86. package/dist/src/core/types.test.d.ts.map +1 -0
  87. package/dist/src/core/types.test.js.map +1 -0
  88. package/dist/src/core/unified-cache.d.ts.map +1 -0
  89. package/dist/src/core/unified-cache.js.map +1 -0
  90. package/dist/{index.d.ts → src/index.d.ts} +24 -5
  91. package/dist/src/index.d.ts.map +1 -0
  92. package/dist/{index.js → src/index.js} +38 -4
  93. package/dist/src/index.js.map +1 -0
  94. package/dist/src/insider-scan/index.d.ts +3 -0
  95. package/dist/src/insider-scan/index.d.ts.map +1 -0
  96. package/dist/src/insider-scan/index.js +3 -0
  97. package/dist/src/insider-scan/index.js.map +1 -0
  98. package/dist/src/insider-scan/insider-scan-service.d.ts +63 -0
  99. package/dist/src/insider-scan/insider-scan-service.d.ts.map +1 -0
  100. package/dist/src/insider-scan/insider-scan-service.js +153 -0
  101. package/dist/src/insider-scan/insider-scan-service.js.map +1 -0
  102. package/dist/src/insider-scan/types.d.ts +205 -0
  103. package/dist/src/insider-scan/types.d.ts.map +1 -0
  104. package/dist/src/insider-scan/types.js +7 -0
  105. package/dist/src/insider-scan/types.js.map +1 -0
  106. package/dist/src/services/arbitrage-service.d.ts.map +1 -0
  107. package/dist/{services → src/services}/arbitrage-service.js +14 -4
  108. package/dist/src/services/arbitrage-service.js.map +1 -0
  109. package/dist/src/services/authorization-service.d.ts.map +1 -0
  110. package/dist/src/services/authorization-service.js.map +1 -0
  111. package/dist/src/services/binance-service.d.ts +154 -0
  112. package/dist/src/services/binance-service.d.ts.map +1 -0
  113. package/dist/src/services/binance-service.js +266 -0
  114. package/dist/src/services/binance-service.js.map +1 -0
  115. package/dist/src/services/dip-arb-service.d.ts +245 -0
  116. package/dist/src/services/dip-arb-service.d.ts.map +1 -0
  117. package/dist/src/services/dip-arb-service.js +1865 -0
  118. package/dist/src/services/dip-arb-service.js.map +1 -0
  119. package/dist/src/services/dip-arb-types.d.ts +553 -0
  120. package/dist/src/services/dip-arb-types.d.ts.map +1 -0
  121. package/dist/src/services/dip-arb-types.js +164 -0
  122. package/dist/src/services/dip-arb-types.js.map +1 -0
  123. package/dist/src/services/market-service.d.ts +431 -0
  124. package/dist/src/services/market-service.d.ts.map +1 -0
  125. package/dist/{services → src/services}/market-service.js +501 -17
  126. package/dist/src/services/market-service.js.map +1 -0
  127. package/dist/{services → src/services}/onchain-service.d.ts +10 -2
  128. package/dist/src/services/onchain-service.d.ts.map +1 -0
  129. package/dist/{services → src/services}/onchain-service.js +8 -0
  130. package/dist/src/services/onchain-service.js.map +1 -0
  131. package/dist/{services → src/services}/realtime-service-v2.d.ts +6 -0
  132. package/dist/src/services/realtime-service-v2.d.ts.map +1 -0
  133. package/dist/{services → src/services}/realtime-service-v2.js +44 -8
  134. package/dist/src/services/realtime-service-v2.js.map +1 -0
  135. package/dist/src/services/smart-money-service.d.ts +769 -0
  136. package/dist/src/services/smart-money-service.d.ts.map +1 -0
  137. package/dist/src/services/smart-money-service.js +1448 -0
  138. package/dist/src/services/smart-money-service.js.map +1 -0
  139. package/dist/src/services/swap-service.d.ts.map +1 -0
  140. package/dist/src/services/swap-service.js.map +1 -0
  141. package/dist/{services → src/services}/trading-service.d.ts +26 -0
  142. package/dist/src/services/trading-service.d.ts.map +1 -0
  143. package/dist/{services → src/services}/trading-service.js +72 -1
  144. package/dist/src/services/trading-service.js.map +1 -0
  145. package/dist/{services → src/services}/wallet-service.d.ts +81 -4
  146. package/dist/src/services/wallet-service.d.ts.map +1 -0
  147. package/dist/{services → src/services}/wallet-service.js +126 -8
  148. package/dist/src/services/wallet-service.js.map +1 -0
  149. package/dist/src/signal/index.d.ts +8 -0
  150. package/dist/src/signal/index.d.ts.map +1 -0
  151. package/dist/src/signal/index.js +7 -0
  152. package/dist/src/signal/index.js.map +1 -0
  153. package/dist/src/signal/signal-service.d.ts +89 -0
  154. package/dist/src/signal/signal-service.d.ts.map +1 -0
  155. package/dist/src/signal/signal-service.js +226 -0
  156. package/dist/src/signal/signal-service.js.map +1 -0
  157. package/dist/src/signal/types.d.ts +280 -0
  158. package/dist/src/signal/types.d.ts.map +1 -0
  159. package/dist/src/signal/types.js +7 -0
  160. package/dist/src/signal/types.js.map +1 -0
  161. package/dist/src/utils/price-utils.d.ts.map +1 -0
  162. package/dist/src/utils/price-utils.js.map +1 -0
  163. package/dist/src/utils/price-utils.test.d.ts.map +1 -0
  164. package/dist/src/utils/price-utils.test.js.map +1 -0
  165. package/dist/src/wallet-report/index.d.ts +3 -0
  166. package/dist/src/wallet-report/index.d.ts.map +1 -0
  167. package/dist/src/wallet-report/index.js +3 -0
  168. package/dist/src/wallet-report/index.js.map +1 -0
  169. package/dist/src/wallet-report/types.d.ts +187 -0
  170. package/dist/src/wallet-report/types.d.ts.map +1 -0
  171. package/dist/src/wallet-report/types.js +7 -0
  172. package/dist/src/wallet-report/types.js.map +1 -0
  173. package/dist/src/wallet-report/wallet-report-service.d.ts +91 -0
  174. package/dist/src/wallet-report/wallet-report-service.d.ts.map +1 -0
  175. package/dist/src/wallet-report/wallet-report-service.js +208 -0
  176. package/dist/src/wallet-report/wallet-report-service.js.map +1 -0
  177. package/dist/src/wallets/hot-wallet-service.d.ts +162 -0
  178. package/dist/src/wallets/hot-wallet-service.d.ts.map +1 -0
  179. package/dist/src/wallets/hot-wallet-service.js +251 -0
  180. package/dist/src/wallets/hot-wallet-service.js.map +1 -0
  181. package/dist/src/wallets/index.d.ts +15 -0
  182. package/dist/src/wallets/index.d.ts.map +1 -0
  183. package/dist/src/wallets/index.js +26 -0
  184. package/dist/src/wallets/index.js.map +1 -0
  185. package/package.json +7 -7
  186. package/dist/__tests__/clob-api.test.d.ts +0 -5
  187. package/dist/__tests__/clob-api.test.d.ts.map +0 -1
  188. package/dist/__tests__/clob-api.test.js +0 -240
  189. package/dist/__tests__/clob-api.test.js.map +0 -1
  190. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +0 -1
  191. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +0 -1
  192. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +0 -1
  193. package/dist/__tests__/integration/bridge-client.integration.test.js.map +0 -1
  194. package/dist/__tests__/integration/clob-api.integration.test.d.ts +0 -13
  195. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +0 -1
  196. package/dist/__tests__/integration/clob-api.integration.test.js +0 -170
  197. package/dist/__tests__/integration/clob-api.integration.test.js.map +0 -1
  198. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +0 -1
  199. package/dist/__tests__/integration/ctf-client.integration.test.js.map +0 -1
  200. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +0 -1
  201. package/dist/__tests__/integration/data-api.integration.test.js.map +0 -1
  202. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +0 -1
  203. package/dist/__tests__/integration/gamma-api.integration.test.js.map +0 -1
  204. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +0 -1
  205. package/dist/__tests__/integration/market-service.integration.test.js.map +0 -1
  206. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +0 -1
  207. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +0 -1
  208. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +0 -1
  209. package/dist/__tests__/integration/trading-service.integration.test.js.map +0 -1
  210. package/dist/__tests__/test-utils.d.ts.map +0 -1
  211. package/dist/__tests__/test-utils.js.map +0 -1
  212. package/dist/clients/bridge-client.d.ts.map +0 -1
  213. package/dist/clients/bridge-client.js.map +0 -1
  214. package/dist/clients/clob-api.d.ts +0 -391
  215. package/dist/clients/clob-api.d.ts.map +0 -1
  216. package/dist/clients/clob-api.js +0 -448
  217. package/dist/clients/clob-api.js.map +0 -1
  218. package/dist/clients/ctf-client.d.ts.map +0 -1
  219. package/dist/clients/ctf-client.js.map +0 -1
  220. package/dist/clients/data-api.d.ts.map +0 -1
  221. package/dist/clients/data-api.js.map +0 -1
  222. package/dist/clients/gamma-api.d.ts.map +0 -1
  223. package/dist/clients/gamma-api.js.map +0 -1
  224. package/dist/clients/subgraph.d.ts.map +0 -1
  225. package/dist/clients/subgraph.js.map +0 -1
  226. package/dist/clients/trading-client.d.ts +0 -252
  227. package/dist/clients/trading-client.d.ts.map +0 -1
  228. package/dist/clients/trading-client.js +0 -543
  229. package/dist/clients/trading-client.js.map +0 -1
  230. package/dist/clients/websocket-manager.d.ts +0 -103
  231. package/dist/clients/websocket-manager.d.ts.map +0 -1
  232. package/dist/clients/websocket-manager.js +0 -200
  233. package/dist/clients/websocket-manager.js.map +0 -1
  234. package/dist/core/cache-adapter-bridge.d.ts.map +0 -1
  235. package/dist/core/cache-adapter-bridge.js.map +0 -1
  236. package/dist/core/cache.d.ts.map +0 -1
  237. package/dist/core/cache.js.map +0 -1
  238. package/dist/core/errors.d.ts.map +0 -1
  239. package/dist/core/errors.js.map +0 -1
  240. package/dist/core/rate-limiter.d.ts.map +0 -1
  241. package/dist/core/rate-limiter.js.map +0 -1
  242. package/dist/core/types.d.ts.map +0 -1
  243. package/dist/core/types.js +0 -19
  244. package/dist/core/types.js.map +0 -1
  245. package/dist/core/types.test.d.ts.map +0 -1
  246. package/dist/core/types.test.js.map +0 -1
  247. package/dist/core/unified-cache.d.ts.map +0 -1
  248. package/dist/core/unified-cache.js.map +0 -1
  249. package/dist/index.d.ts.map +0 -1
  250. package/dist/index.js.map +0 -1
  251. package/dist/services/arbitrage-service.d.ts.map +0 -1
  252. package/dist/services/arbitrage-service.js.map +0 -1
  253. package/dist/services/authorization-service.d.ts.map +0 -1
  254. package/dist/services/authorization-service.js.map +0 -1
  255. package/dist/services/market-service.d.ts +0 -208
  256. package/dist/services/market-service.d.ts.map +0 -1
  257. package/dist/services/market-service.js.map +0 -1
  258. package/dist/services/onchain-service.d.ts.map +0 -1
  259. package/dist/services/onchain-service.js.map +0 -1
  260. package/dist/services/realtime-service-v2.d.ts.map +0 -1
  261. package/dist/services/realtime-service-v2.js.map +0 -1
  262. package/dist/services/realtime-service.d.ts +0 -82
  263. package/dist/services/realtime-service.d.ts.map +0 -1
  264. package/dist/services/realtime-service.js +0 -182
  265. package/dist/services/realtime-service.js.map +0 -1
  266. package/dist/services/smart-money-service.d.ts +0 -196
  267. package/dist/services/smart-money-service.d.ts.map +0 -1
  268. package/dist/services/smart-money-service.js +0 -358
  269. package/dist/services/smart-money-service.js.map +0 -1
  270. package/dist/services/swap-service.d.ts.map +0 -1
  271. package/dist/services/swap-service.js.map +0 -1
  272. package/dist/services/trading-service.d.ts.map +0 -1
  273. package/dist/services/trading-service.js.map +0 -1
  274. package/dist/services/wallet-service.d.ts.map +0 -1
  275. package/dist/services/wallet-service.js.map +0 -1
  276. package/dist/utils/price-utils.d.ts.map +0 -1
  277. package/dist/utils/price-utils.js.map +0 -1
  278. package/dist/utils/price-utils.test.d.ts.map +0 -1
  279. package/dist/utils/price-utils.test.js.map +0 -1
  280. /package/dist/{__tests__ → src/__tests__}/integration/arbitrage-service.integration.test.d.ts +0 -0
  281. /package/dist/{__tests__ → src/__tests__}/integration/arbitrage-service.integration.test.js +0 -0
  282. /package/dist/{__tests__ → src/__tests__}/integration/bridge-client.integration.test.d.ts +0 -0
  283. /package/dist/{__tests__ → src/__tests__}/integration/bridge-client.integration.test.js +0 -0
  284. /package/dist/{__tests__ → src/__tests__}/integration/ctf-client.integration.test.d.ts +0 -0
  285. /package/dist/{__tests__ → src/__tests__}/integration/ctf-client.integration.test.js +0 -0
  286. /package/dist/{__tests__ → src/__tests__}/integration/data-api.integration.test.d.ts +0 -0
  287. /package/dist/{__tests__ → src/__tests__}/integration/gamma-api.integration.test.d.ts +0 -0
  288. /package/dist/{__tests__ → src/__tests__}/integration/gamma-api.integration.test.js +0 -0
  289. /package/dist/{__tests__ → src/__tests__}/integration/market-service.integration.test.d.ts +0 -0
  290. /package/dist/{__tests__ → src/__tests__}/integration/realtime-service-v2.integration.test.d.ts +0 -0
  291. /package/dist/{__tests__ → src/__tests__}/integration/realtime-service-v2.integration.test.js +0 -0
  292. /package/dist/{__tests__ → src/__tests__}/integration/trading-service.integration.test.d.ts +0 -0
  293. /package/dist/{__tests__ → src/__tests__}/integration/trading-service.integration.test.js +0 -0
  294. /package/dist/{__tests__ → src/__tests__}/test-utils.d.ts +0 -0
  295. /package/dist/{__tests__ → src/__tests__}/test-utils.js +0 -0
  296. /package/dist/{clients → src/clients}/bridge-client.d.ts +0 -0
  297. /package/dist/{clients → src/clients}/bridge-client.js +0 -0
  298. /package/dist/{clients → src/clients}/ctf-client.js +0 -0
  299. /package/dist/{clients → src/clients}/subgraph.d.ts +0 -0
  300. /package/dist/{clients → src/clients}/subgraph.js +0 -0
  301. /package/dist/{core → src/core}/cache-adapter-bridge.d.ts +0 -0
  302. /package/dist/{core → src/core}/cache-adapter-bridge.js +0 -0
  303. /package/dist/{core → src/core}/errors.d.ts +0 -0
  304. /package/dist/{core → src/core}/errors.js +0 -0
  305. /package/dist/{core → src/core}/types.test.d.ts +0 -0
  306. /package/dist/{core → src/core}/types.test.js +0 -0
  307. /package/dist/{core → src/core}/unified-cache.d.ts +0 -0
  308. /package/dist/{core → src/core}/unified-cache.js +0 -0
  309. /package/dist/{services → src/services}/arbitrage-service.d.ts +0 -0
  310. /package/dist/{services → src/services}/authorization-service.d.ts +0 -0
  311. /package/dist/{services → src/services}/authorization-service.js +0 -0
  312. /package/dist/{services → src/services}/swap-service.d.ts +0 -0
  313. /package/dist/{services → src/services}/swap-service.js +0 -0
  314. /package/dist/{utils → src/utils}/price-utils.d.ts +0 -0
  315. /package/dist/{utils → src/utils}/price-utils.js +0 -0
  316. /package/dist/{utils → src/utils}/price-utils.test.d.ts +0 -0
  317. /package/dist/{utils → src/utils}/price-utils.test.js +0 -0
package/README.md CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
  **Builder**: [@hhhx402](https://x.com/hhhx402) | **Project**: [Catalyst.fun](https://x.com/catalystdotfun)
9
9
 
10
+ ☕ **Buy Me a Coffee (Polygon):** `0x58d2ff253998bc2f3b8f5bdbe9c52cad7b022739`
11
+
10
12
  [中文文档](README.zh-CN.md)
11
13
 
12
14
  ---
@@ -26,6 +28,7 @@
26
28
  - [WalletService](#walletservice)
27
29
  - [SmartMoneyService](#smartmoneyservice)
28
30
  - [ArbitrageService](#arbitrageservice)
31
+ - [DipArbService](#diparbservice)
29
32
  - [Low-Level Clients](#low-level-clients)
30
33
  - [Breaking Changes (v0.3.0)](#breaking-changes-v030)
31
34
  - [Examples](#examples)
@@ -110,6 +113,12 @@ poly-sdk Architecture
110
113
  │ │ • Market scanning • Auto execution • Rebalancer • Smart clearing │ │
111
114
  │ └─────────────────────────────────────────────────────────────────────────┘ │
112
115
  │ │
116
+ │ ┌─────────────────────────────────────────────────────────────────────────┐ │
117
+ │ │ DipArbService │ │
118
+ │ │ ───────────────────────────────────────────────────────────────────── │ │
119
+ │ │ • 15m crypto UP/DOWN • Dip detection • Auto-rotate • Background redeem│
120
+ │ └─────────────────────────────────────────────────────────────────────────┘ │
121
+ │ │
113
122
  ├──────────────────────────────────────────────────────────────────────────────┤
114
123
  │ │
115
124
  │ Layer 2: Low-Level Clients (Advanced Users / Raw API Access) │
@@ -152,6 +161,7 @@ poly-sdk Architecture
152
161
  | **WalletService** | Wallet/trader analysis |
153
162
  | **SmartMoneyService** | Smart money tracking |
154
163
  | **ArbitrageService** | Arbitrage detection & execution |
164
+ | **DipArbService** | Dip arbitrage for 15m crypto markets |
155
165
 
156
166
  ---
157
167
 
@@ -247,6 +257,7 @@ sdk.markets // Market data
247
257
  sdk.wallets // Wallet analysis
248
258
  sdk.realtime // WebSocket real-time data
249
259
  sdk.smartMoney // Smart money tracking & copy trading
260
+ sdk.dipArb // Dip arbitrage for 15m crypto markets
250
261
  sdk.dataApi // Direct Data API access
251
262
  sdk.gammaApi // Direct Gamma API access
252
263
  sdk.subgraph // On-chain data via Goldsky
@@ -266,8 +277,13 @@ sdk.stop(); // Disconnect all services
266
277
 
267
278
  Order management using `@polymarket/clob-client`.
268
279
 
280
+ **Important: Polymarket Order Minimums**
281
+ - **Minimum order size**: 5 shares (`MIN_ORDER_SIZE_SHARES`)
282
+ - **Minimum order value**: $1 USDC (`MIN_ORDER_VALUE_USDC`)
283
+ - Orders below these limits are validated and rejected before sending to API
284
+
269
285
  ```typescript
270
- import { TradingService } from '@catalyst-team/poly-sdk';
286
+ import { TradingService, MIN_ORDER_SIZE_SHARES, MIN_ORDER_VALUE_USDC } from '@catalyst-team/poly-sdk';
271
287
 
272
288
  const trading = new TradingService(rateLimiter, cache, {
273
289
  privateKey: process.env.POLYMARKET_PRIVATE_KEY!,
@@ -639,6 +655,107 @@ console.log(`Recovered: $${clearResult.totalUsdcRecovered.toFixed(2)}`);
639
655
 
640
656
  ---
641
657
 
658
+ ### DipArbService
659
+
660
+ **Dip Arbitrage** for Polymarket 15-minute crypto UP/DOWN markets (BTC, ETH, SOL, XRP).
661
+
662
+ **Strategy**: Detect sudden price dips → Buy dipped side (Leg1) → Wait for opposite to drop → Buy opposite (Leg2) → Lock profit (UP + DOWN = $1)
663
+
664
+ #### Quick Start
665
+
666
+ ```bash
667
+ # One command to start auto trading
668
+ PRIVATE_KEY=0x... npx tsx scripts/dip-arb/auto-trade.ts
669
+ ```
670
+
671
+ #### Features
672
+
673
+ | Feature | Description |
674
+ |---------|-------------|
675
+ | **Dip Detection** | Detects 15%+ price drops within 10s sliding window |
676
+ | **Two-Leg Execution** | Leg1 (buy dip) + Leg2 (buy opposite when cost < target) |
677
+ | **Auto-Rotate** | Automatically switches to next market when current ends |
678
+ | **Background Redeem** | Waits for Oracle resolution (~5min) then redeems winning positions |
679
+ | **WebSocket Reconnect** | Auto re-subscribes on disconnect |
680
+
681
+ #### Programmatic Usage
682
+
683
+ ```typescript
684
+ import { PolymarketSDK } from '@catalyst-team/poly-sdk';
685
+
686
+ const sdk = new PolymarketSDK({ privateKey: '0x...' });
687
+
688
+ // Configure strategy
689
+ sdk.dipArb.updateConfig({
690
+ shares: 10, // Shares per trade
691
+ sumTarget: 0.9, // Leg2 triggers when cost ≤ 0.9 (11% profit)
692
+ dipThreshold: 0.15, // 15% dip triggers Leg1
693
+ windowMinutes: 14, // Trade window after round start
694
+ autoExecute: true, // Auto-execute signals
695
+ });
696
+
697
+ // Listen to events
698
+ sdk.dipArb.on('signal', (signal) => {
699
+ console.log(`${signal.type}: ${signal.side} @ ${signal.price}`);
700
+ });
701
+
702
+ sdk.dipArb.on('execution', (result) => {
703
+ console.log(`${result.leg} ${result.success ? '✅' : '❌'}`);
704
+ });
705
+
706
+ sdk.dipArb.on('roundComplete', (result) => {
707
+ console.log(`Profit: $${result.profit?.toFixed(2)}`);
708
+ });
709
+
710
+ // Find and start monitoring
711
+ const market = await sdk.dipArb.findAndStart({
712
+ coin: 'ETH',
713
+ preferDuration: '15m',
714
+ });
715
+
716
+ // Enable auto-rotate with redemption
717
+ sdk.dipArb.enableAutoRotate({
718
+ enabled: true,
719
+ underlyings: ['ETH'],
720
+ duration: '15m',
721
+ settleStrategy: 'redeem',
722
+ redeemWaitMinutes: 5,
723
+ });
724
+
725
+ // Get stats
726
+ const stats = sdk.dipArb.getStats();
727
+ console.log(`Signals: ${stats.signalsDetected}, L1: ${stats.leg1Filled}, L2: ${stats.leg2Filled}`);
728
+
729
+ // Cleanup
730
+ await sdk.dipArb.stop();
731
+ sdk.stop();
732
+ ```
733
+
734
+ #### Events
735
+
736
+ | Event | Data | Description |
737
+ |-------|------|-------------|
738
+ | `started` | `DipArbMarketConfig` | Started monitoring market |
739
+ | `stopped` | - | Stopped monitoring |
740
+ | `newRound` | `{ roundId, upOpen, downOpen }` | New trading round |
741
+ | `signal` | `DipArbSignalEvent` | Leg1/Leg2 signal detected |
742
+ | `execution` | `DipArbExecutionResult` | Trade execution result |
743
+ | `roundComplete` | `{ profit, profitRate }` | Round finished |
744
+ | `rotate` | `{ reason, newMarket }` | Switched to new market |
745
+ | `settled` | `{ success, amountReceived }` | Position redeemed |
746
+
747
+ #### Scripts
748
+
749
+ ```bash
750
+ # Auto trading (monitors + trades)
751
+ PRIVATE_KEY=0x... npx tsx scripts/dip-arb/auto-trade.ts
752
+
753
+ # Redeem ended positions
754
+ PRIVATE_KEY=0x... npx tsx scripts/dip-arb/redeem-positions.ts
755
+ ```
756
+
757
+ ---
758
+
642
759
  ## Low-Level Clients
643
760
 
644
761
  For advanced users who need direct API access:
@@ -736,6 +853,13 @@ pnpm example:arb-service # Arbitrage service
736
853
  | [11-live-arbitrage-scan.ts](examples/11-live-arbitrage-scan.ts) | Scan markets for opportunities |
737
854
  | [12-trending-arb-monitor.ts](examples/12-trending-arb-monitor.ts) | Real-time trending monitor |
738
855
  | [13-arbitrage-service.ts](examples/13-arbitrage-service.ts) | Full arbitrage workflow |
856
+ | [14-dip-arb-service.ts](examples/14-dip-arb-service.ts) | Dip arbitrage for 15m crypto |
857
+
858
+ **DipArb Scripts** (in `scripts/dip-arb/`):
859
+ | Script | Description |
860
+ |--------|-------------|
861
+ | [auto-trade.ts](scripts/dip-arb/auto-trade.ts) | One-click auto trading with rotation |
862
+ | [redeem-positions.ts](scripts/dip-arb/redeem-positions.ts) | Redeem ended market positions |
739
863
 
740
864
  ---
741
865
 
@@ -798,6 +922,14 @@ import type {
798
922
  ArbitrageServiceConfig,
799
923
  ScanResult,
800
924
  ClearPositionResult,
925
+
926
+ // DipArb
927
+ DipArbServiceConfig,
928
+ DipArbMarketConfig,
929
+ DipArbSignalEvent,
930
+ DipArbExecutionResult,
931
+ DipArbRoundState,
932
+ DipArbStats,
801
933
  } from '@catalyst-team/poly-sdk';
802
934
  ```
803
935
 
package/README.zh-CN.md CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
  **开发者**: [@hhhx402](https://x.com/hhhx402) | **项目**: [Catalyst.fun](https://x.com/catalystdotfun)
9
9
 
10
+ ☕ **请我喝杯咖啡 (Polygon):** `0x58d2ff253998bc2f3b8f5bdbe9c52cad7b022739`
11
+
10
12
  [English](README.md)
11
13
 
12
14
  ---
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * DipArb Auto Trading - 15m Crypto Markets
4
+ *
5
+ * 策略原理:
6
+ * 1. 检测 10 秒内 5% 以上的瞬时暴跌
7
+ * 2. 买入暴跌侧 (Leg1)
8
+ * 3. 等待对侧价格下降,满足 sumTarget 后买入 (Leg2)
9
+ * 4. 双持仓锁定利润:UP + DOWN = $1
10
+ *
11
+ * 日志:每个市场单独一个日志文件,存放在 /tmp/dip-arb-logs/
12
+ *
13
+ * Run with:
14
+ * npx tsx scripts/dip-arb/auto-trade.ts --eth
15
+ * npx tsx scripts/dip-arb/auto-trade.ts --btc
16
+ * npx tsx scripts/dip-arb/auto-trade.ts --sol
17
+ * npx tsx scripts/dip-arb/auto-trade.ts --xrp
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=auto-trade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-trade.d.ts","sourceRoot":"","sources":["../../../scripts/dip-arb/auto-trade.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,373 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * DipArb Auto Trading - 15m Crypto Markets
4
+ *
5
+ * 策略原理:
6
+ * 1. 检测 10 秒内 5% 以上的瞬时暴跌
7
+ * 2. 买入暴跌侧 (Leg1)
8
+ * 3. 等待对侧价格下降,满足 sumTarget 后买入 (Leg2)
9
+ * 4. 双持仓锁定利润:UP + DOWN = $1
10
+ *
11
+ * 日志:每个市场单独一个日志文件,存放在 /tmp/dip-arb-logs/
12
+ *
13
+ * Run with:
14
+ * npx tsx scripts/dip-arb/auto-trade.ts --eth
15
+ * npx tsx scripts/dip-arb/auto-trade.ts --btc
16
+ * npx tsx scripts/dip-arb/auto-trade.ts --sol
17
+ * npx tsx scripts/dip-arb/auto-trade.ts --xrp
18
+ */
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ import { PolymarketSDK } from '../../src/index.js';
22
+ function parseArgs() {
23
+ const args = process.argv.slice(2);
24
+ // 解析币种
25
+ let coin = 'ETH';
26
+ if (args.includes('--btc') || args.includes('-b'))
27
+ coin = 'BTC';
28
+ else if (args.includes('--eth') || args.includes('-e'))
29
+ coin = 'ETH';
30
+ else if (args.includes('--sol') || args.includes('-s'))
31
+ coin = 'SOL';
32
+ else if (args.includes('--xrp') || args.includes('-x'))
33
+ coin = 'XRP';
34
+ // 解析数值参数
35
+ const getArgValue = (name, defaultVal) => {
36
+ const arg = args.find(a => a.startsWith(`--${name}=`));
37
+ if (arg) {
38
+ const val = parseFloat(arg.split('=')[1]);
39
+ return isNaN(val) ? defaultVal : val;
40
+ }
41
+ return defaultVal;
42
+ };
43
+ // 币种默认参数
44
+ const coinDefaults = {
45
+ XRP: { dipThreshold: 0.40, slidingWindowMs: 3000, leg2TimeoutSeconds: 60, sumTarget: 0.85 },
46
+ SOL: { dipThreshold: 0.40, slidingWindowMs: 3000, leg2TimeoutSeconds: 60, sumTarget: 0.85 },
47
+ ETH: { dipThreshold: 0.30, slidingWindowMs: 5000, leg2TimeoutSeconds: 60, sumTarget: 0.93 },
48
+ BTC: { dipThreshold: 0.20, slidingWindowMs: 5000, leg2TimeoutSeconds: 60, sumTarget: 0.95 },
49
+ };
50
+ const defaults = coinDefaults[coin];
51
+ return {
52
+ coin,
53
+ dipThreshold: getArgValue('dip', defaults.dipThreshold),
54
+ slidingWindowMs: getArgValue('window', defaults.slidingWindowMs),
55
+ leg2TimeoutSeconds: getArgValue('timeout', defaults.leg2TimeoutSeconds),
56
+ sumTarget: getArgValue('target', defaults.sumTarget),
57
+ shares: getArgValue('shares', 25),
58
+ };
59
+ }
60
+ const CLI_ARGS = parseArgs();
61
+ const SELECTED_COIN = CLI_ARGS.coin;
62
+ // Config
63
+ const PRIVATE_KEY = process.env.PRIVATE_KEY || '';
64
+ const MONITOR_DURATION_MS = 60 * 60 * 1000; // 1 hour
65
+ const LOG_DIR = '/tmp/dip-arb-logs';
66
+ if (!PRIVATE_KEY) {
67
+ console.error('Error: PRIVATE_KEY environment variable is required');
68
+ process.exit(1);
69
+ }
70
+ // Ensure log directory exists
71
+ if (!fs.existsSync(LOG_DIR)) {
72
+ fs.mkdirSync(LOG_DIR, { recursive: true });
73
+ }
74
+ // ========================================
75
+ // Per-Market Logging
76
+ // ========================================
77
+ let currentMarketSlug = null;
78
+ let currentLogs = [];
79
+ let currentLogPath = null;
80
+ function getLogFilename(marketSlug) {
81
+ const date = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
82
+ const time = new Date().toISOString().slice(11, 19).replace(/:/g, ''); // HHMMSS
83
+ return path.join(LOG_DIR, `${date}_${time}_${marketSlug}.log`);
84
+ }
85
+ function log(msg) {
86
+ const timestamp = new Date().toISOString().slice(11, 19);
87
+ const line = `[${timestamp}] ${msg}`;
88
+ console.log(line);
89
+ currentLogs.push(line);
90
+ }
91
+ function sdkLogHandler(message) {
92
+ const timestamp = new Date().toISOString().slice(11, 19);
93
+ const line = `[${timestamp}] ${message}`;
94
+ console.log(line);
95
+ currentLogs.push(line);
96
+ }
97
+ function saveCurrentLog(suffix) {
98
+ if (currentLogs.length === 0)
99
+ return;
100
+ const logPath = currentLogPath || path.join(LOG_DIR, `unknown_${Date.now()}.log`);
101
+ const finalPath = suffix ? logPath.replace('.log', `_${suffix}.log`) : logPath;
102
+ fs.writeFileSync(finalPath, currentLogs.join('\n'));
103
+ console.log(`📁 Log saved: ${finalPath} (${currentLogs.length} lines)`);
104
+ }
105
+ function startNewMarketLog(marketSlug) {
106
+ // Save previous market log if exists
107
+ if (currentLogs.length > 0 && currentMarketSlug) {
108
+ saveCurrentLog();
109
+ }
110
+ // Start new log
111
+ currentMarketSlug = marketSlug;
112
+ currentLogs = [];
113
+ currentLogPath = getLogFilename(marketSlug);
114
+ log(`📝 New log file: ${currentLogPath}`);
115
+ }
116
+ // ========================================
117
+ // Main
118
+ // ========================================
119
+ async function main() {
120
+ // ========================================
121
+ // Configuration
122
+ // ========================================
123
+ const config = {
124
+ // 交易参数 (支持命令行覆盖)
125
+ shares: CLI_ARGS.shares, // --shares=25
126
+ sumTarget: CLI_ARGS.sumTarget, // --target=0.95
127
+ // 订单拆分参数
128
+ splitOrders: 1, // 单笔下单,避免份额不匹配
129
+ orderIntervalMs: 500, // 订单间隔 500ms (仅在 splitOrders > 1 时使用)
130
+ // 信号检测参数 (支持命令行覆盖)
131
+ slidingWindowMs: CLI_ARGS.slidingWindowMs, // --window=10000 (毫秒)
132
+ dipThreshold: CLI_ARGS.dipThreshold, // --dip=0.30 (30%)
133
+ windowMinutes: 14, // 轮次开始后 14 分钟内可交易
134
+ // 执行参数
135
+ maxSlippage: 0.02, // 2% 滑点
136
+ autoExecute: true, // 自动执行
137
+ executionCooldown: 500, // 冷却时间 500ms
138
+ // 其他
139
+ enableSurge: false, // 禁用暴涨检测
140
+ autoMerge: true, // 自动 merge
141
+ leg2TimeoutSeconds: CLI_ARGS.leg2TimeoutSeconds, // --timeout=60 (秒)
142
+ debug: true, // 调试日志
143
+ // 日志处理器 - 将 SDK 日志也写入当前 market 的 logs 数组
144
+ logHandler: sdkLogHandler,
145
+ };
146
+ // 计算预期利润率
147
+ const expectedProfit = ((1 - config.sumTarget) / config.sumTarget * 100).toFixed(1);
148
+ // Start initial log
149
+ startNewMarketLog('init');
150
+ log('');
151
+ log('╔══════════════════════════════════════════════════════════╗');
152
+ log(`║ DipArb Auto Trading - ${SELECTED_COIN} Markets ║`);
153
+ log('╠══════════════════════════════════════════════════════════╣');
154
+ log(`║ Dip Threshold: ${(config.dipThreshold * 100).toFixed(0)}% in ${config.slidingWindowMs / 1000}s window ║`);
155
+ log(`║ Sum Target: ${config.sumTarget} (profit >= ${expectedProfit}%) ║`);
156
+ log(`║ Stop Loss: ${config.leg2TimeoutSeconds}s after Leg1 ║`);
157
+ log(`║ Shares/Trade: ${config.shares} ║`);
158
+ log(`║ Order Type: Market Order (Leg1 + Leg2 + Exit) ║`);
159
+ log(`║ Log Directory: ${LOG_DIR}`);
160
+ log('╚══════════════════════════════════════════════════════════╝');
161
+ log('');
162
+ log('Usage: npx tsx auto-trade.ts --xrp [--dip=0.40] [--window=3000] [--timeout=60] [--shares=25] [--target=0.95]');
163
+ log('');
164
+ // Initialize SDK
165
+ log('Initializing SDK...');
166
+ const sdk = new PolymarketSDK({
167
+ privateKey: PRIVATE_KEY,
168
+ });
169
+ sdk.dipArb.updateConfig(config);
170
+ // ========================================
171
+ // Event Listeners
172
+ // ========================================
173
+ sdk.dipArb.on('started', (market) => {
174
+ // Start new log for this market
175
+ startNewMarketLog(market.slug || market.conditionId.slice(0, 20));
176
+ log('');
177
+ log('┌──────────────────────────────────────────────────────────┐');
178
+ log('│ MARKET STARTED │');
179
+ log('├──────────────────────────────────────────────────────────┤');
180
+ log(`│ ${market.name.slice(0, 56)}`);
181
+ log(`│ ${market.underlying} ${market.durationMinutes}m`);
182
+ log(`│ End Time: ${market.endTime.toISOString()}`);
183
+ log(`│ Condition: ${market.conditionId.slice(0, 30)}...`);
184
+ log('└──────────────────────────────────────────────────────────┘');
185
+ });
186
+ sdk.dipArb.on('stopped', () => {
187
+ log('>>> SERVICE STOPPED');
188
+ });
189
+ sdk.dipArb.on('newRound', (event) => {
190
+ const sum = event.upOpen + event.downOpen;
191
+ log(`>>> NEW ROUND | UP: ${event.upOpen.toFixed(3)} | DOWN: ${event.downOpen.toFixed(3)} | Sum: ${sum.toFixed(3)}`);
192
+ });
193
+ sdk.dipArb.on('signal', (signal) => {
194
+ log('');
195
+ log('╔══════════════════════════════════════════════════════════╗');
196
+ if (signal.type === 'leg1') {
197
+ log(`║ LEG1 SIGNAL: Buy ${signal.dipSide} @ ${signal.currentPrice.toFixed(4)}`);
198
+ log(`║ Drop: ${(signal.dropPercent * 100).toFixed(1)}% | Opposite: ${signal.oppositeAsk.toFixed(4)}`);
199
+ }
200
+ else {
201
+ log(`║ LEG2 SIGNAL: Buy ${signal.hedgeSide} @ ${signal.currentPrice.toFixed(4)}`);
202
+ log(`║ Total Cost: ${signal.totalCost.toFixed(4)} | Profit: ${(signal.expectedProfitRate * 100).toFixed(2)}%`);
203
+ }
204
+ log('╚══════════════════════════════════════════════════════════╝');
205
+ });
206
+ sdk.dipArb.on('execution', (result) => {
207
+ if (result.success) {
208
+ log(`✅ ${result.leg.toUpperCase()} FILLED: ${result.side} @ ${result.price?.toFixed(4)} x${result.shares}`);
209
+ }
210
+ else {
211
+ log(`❌ ${result.leg.toUpperCase()} FAILED: ${result.error}`);
212
+ }
213
+ });
214
+ sdk.dipArb.on('roundComplete', (result) => {
215
+ log('');
216
+ log('┌──────────────────────────────────────────────────────────┐');
217
+ log(`│ ROUND ${result.status.toUpperCase()}`);
218
+ if (result.profit !== undefined) {
219
+ log(`│ Profit: $${result.profit.toFixed(4)} (${(result.profitRate * 100).toFixed(2)}%)`);
220
+ }
221
+ log('└──────────────────────────────────────────────────────────┘');
222
+ });
223
+ sdk.dipArb.on('rotate', (event) => {
224
+ // Save current market log before rotation
225
+ log('');
226
+ log('╔══════════════════════════════════════════════════════════╗');
227
+ log(`║ 🔄 MARKET ROTATION ║`);
228
+ log(`║ Reason: ${event.reason}`);
229
+ log(`║ Previous: ${event.previousMarket?.slice(0, 40) || 'none'}...`);
230
+ log(`║ New: ${event.newMarket.slice(0, 40)}...`);
231
+ log('╚══════════════════════════════════════════════════════════╝');
232
+ // Save old log and start new one
233
+ // Note: 'started' event will be triggered after rotate, which will start new log
234
+ });
235
+ sdk.dipArb.on('settled', (result) => {
236
+ log(`>>> SETTLED: ${result.strategy} | Success: ${result.success}`);
237
+ if (result.amountReceived) {
238
+ log(` Amount: $${result.amountReceived.toFixed(2)}`);
239
+ }
240
+ if (result.error) {
241
+ log(` Error: ${result.error}`);
242
+ }
243
+ });
244
+ sdk.dipArb.on('error', (error) => {
245
+ log(`[ERROR] ${error.message}`);
246
+ });
247
+ // ========================================
248
+ // Scan and Start
249
+ // ========================================
250
+ log(`Scanning for ${SELECTED_COIN} 15m markets...`);
251
+ const markets = await sdk.dipArb.scanUpcomingMarkets({
252
+ coin: SELECTED_COIN,
253
+ duration: '15m',
254
+ limit: 5,
255
+ });
256
+ log(`Found ${markets.length} markets:`);
257
+ for (const m of markets) {
258
+ const endIn = Math.round((m.endTime.getTime() - Date.now()) / 60000);
259
+ const status = endIn <= 0 ? '(ENDED)' : `(ends in ${endIn}m)`;
260
+ log(` - ${m.name.slice(0, 50)} ${status}`);
261
+ log(` Condition: ${m.conditionId.slice(0, 30)}...`);
262
+ log(` End: ${m.endTime.toISOString()}`);
263
+ }
264
+ if (markets.length === 0) {
265
+ log('No markets found. Exiting.');
266
+ saveCurrentLog('no-markets');
267
+ return;
268
+ }
269
+ // Filter out already ended markets
270
+ const activeMarkets = markets.filter(m => m.endTime.getTime() > Date.now());
271
+ if (activeMarkets.length === 0) {
272
+ log('All markets have ended. Waiting for new markets...');
273
+ }
274
+ else {
275
+ log(`Active markets: ${activeMarkets.length}`);
276
+ }
277
+ // Start
278
+ const market = await sdk.dipArb.findAndStart({
279
+ coin: SELECTED_COIN,
280
+ preferDuration: '15m',
281
+ });
282
+ if (!market) {
283
+ log('Failed to start. Exiting.');
284
+ saveCurrentLog('failed');
285
+ return;
286
+ }
287
+ log(`Selected market ends at: ${market.endTime.toISOString()}`);
288
+ const timeUntilEnd = Math.round((market.endTime.getTime() - Date.now()) / 1000);
289
+ log(`Time until market end: ${timeUntilEnd}s (${Math.round(timeUntilEnd / 60)}m)`);
290
+ // Enable auto-rotate with redeem strategy
291
+ sdk.dipArb.enableAutoRotate({
292
+ enabled: true,
293
+ underlyings: [SELECTED_COIN],
294
+ duration: '15m',
295
+ settleStrategy: 'redeem', // 等待市场结算后赎回 (5分钟后)
296
+ autoSettle: true,
297
+ preloadMinutes: 2,
298
+ redeemWaitMinutes: 5, // 市场结束后等待 5 分钟再赎回
299
+ redeemRetryIntervalSeconds: 30, // 每 30 秒检查一次
300
+ });
301
+ log(`Auto-rotate enabled for ${SELECTED_COIN} (with background redemption)`);
302
+ log('');
303
+ log('═══════════════════════════════════════════════════════════');
304
+ log(' AUTO TRADING ACTIVE - Press Ctrl+C to stop');
305
+ log('═══════════════════════════════════════════════════════════');
306
+ log('');
307
+ // Status update every 30 seconds (more frequent to catch rotation)
308
+ let statusCount = 0;
309
+ const statusInterval = setInterval(() => {
310
+ const stats = sdk.dipArb.getStats();
311
+ const round = sdk.dipArb.getCurrentRound();
312
+ const currentMarket = sdk.dipArb.getMarket();
313
+ statusCount++;
314
+ // Check if market has ended
315
+ if (currentMarket) {
316
+ const timeLeft = Math.round((currentMarket.endTime.getTime() - Date.now()) / 1000);
317
+ const timeLeftStr = timeLeft > 0 ? `${timeLeft}s left` : `ENDED ${-timeLeft}s ago`;
318
+ log(`[Status #${statusCount}] Market: ${currentMarket.underlying} | ${timeLeftStr} | Signals: ${stats.signalsDetected} | L1: ${stats.leg1Filled} | L2: ${stats.leg2Filled}`);
319
+ }
320
+ else {
321
+ log(`[Status #${statusCount}] No market active | Signals: ${stats.signalsDetected}`);
322
+ }
323
+ // Show current position
324
+ if (round) {
325
+ if (round.phase === 'leg1_filled' && round.leg1) {
326
+ log(` 📊 Position: ${round.leg1.shares}x ${round.leg1.side} @ ${round.leg1.price.toFixed(4)} | Waiting for Leg2...`);
327
+ }
328
+ else if (round.phase === 'completed' && round.leg1 && round.leg2) {
329
+ const totalCost = round.leg1.price + round.leg2.price;
330
+ const profit = (1 - totalCost) * round.leg1.shares;
331
+ log(` 📊 Position: ${round.leg1.shares}x UP + ${round.leg2.shares}x DOWN | Cost: ${totalCost.toFixed(4)} | Profit: $${profit.toFixed(2)}`);
332
+ }
333
+ else if (round.phase === 'waiting') {
334
+ log(` 📊 Position: None (waiting for signal)`);
335
+ }
336
+ }
337
+ }, 30000);
338
+ // Wait
339
+ await new Promise(resolve => setTimeout(resolve, MONITOR_DURATION_MS));
340
+ // Cleanup
341
+ clearInterval(statusInterval);
342
+ // Final stats
343
+ const stats = sdk.dipArb.getStats();
344
+ log('');
345
+ log('╔══════════════════════════════════════════════════════════╗');
346
+ log('║ FINAL STATS ║');
347
+ log('╠══════════════════════════════════════════════════════════╣');
348
+ log(`║ Running Time: ${Math.round(stats.runningTimeMs / 1000)}s`);
349
+ log(`║ Rounds Monitored: ${stats.roundsMonitored}`);
350
+ log(`║ Signals Detected: ${stats.signalsDetected}`);
351
+ log(`║ Leg1 Filled: ${stats.leg1Filled}`);
352
+ log(`║ Leg2 Filled: ${stats.leg2Filled}`);
353
+ log(`║ Total Profit: $${stats.totalProfit.toFixed(2)}`);
354
+ log('╚══════════════════════════════════════════════════════════╝');
355
+ await sdk.dipArb.stop();
356
+ sdk.stop();
357
+ // Save final log
358
+ saveCurrentLog('final');
359
+ }
360
+ // Handle Ctrl+C
361
+ process.on('SIGINT', async () => {
362
+ log('');
363
+ log('Interrupted. Saving logs...');
364
+ saveCurrentLog('interrupted');
365
+ process.exit(0);
366
+ });
367
+ main().catch((err) => {
368
+ log(`Fatal error: ${err.message}`);
369
+ console.error(err);
370
+ saveCurrentLog('error');
371
+ process.exit(1);
372
+ });
373
+ //# sourceMappingURL=auto-trade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-trade.js","sourceRoot":"","sources":["../../../scripts/dip-arb/auto-trade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Example 14: DipArbService - Dip Arbitrage for 15m/5m UP/DOWN Markets
4
+ *
5
+ * Demonstrates the dip arbitrage workflow for Polymarket's short-term crypto markets:
6
+ * 1. Scan for upcoming BTC/ETH/SOL/XRP UP/DOWN markets
7
+ * 2. Auto-select and start monitoring a market
8
+ * 3. Detect dip signals (price drops > threshold)
9
+ * 4. Execute Leg1 + Leg2 trades for risk-free profit
10
+ * 5. Auto-rotate to next market when current ends
11
+ *
12
+ * Strategy Overview:
13
+ * - Leg1: Buy the dipped side when price drops >= dipThreshold (default 15%)
14
+ * - Leg2: Buy the opposite side when combined cost < sumTarget (default 0.95)
15
+ * - Profit: Total cost < $1 means guaranteed profit at settlement
16
+ *
17
+ * Environment variables:
18
+ * POLY_PRIVKEY - Private key for trading (required for execution)
19
+ *
20
+ * Run with:
21
+ * pnpm example:dip-arb
22
+ *
23
+ * Or monitor-only (no trading):
24
+ * npx tsx examples/14-dip-arb-service.ts --monitor-only
25
+ *
26
+ * With auto-rotate:
27
+ * npx tsx examples/14-dip-arb-service.ts --auto-rotate
28
+ */
29
+ export {};
30
+ //# sourceMappingURL=example-basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-basic.d.ts","sourceRoot":"","sources":["../../../scripts/dip-arb/example-basic.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG"}