@quantform/core 0.6.6 → 0.7.0-beta.4

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 (521) hide show
  1. package/dist/as-readonly.d.ts +3 -0
  2. package/dist/as-readonly.d.ts.map +1 -0
  3. package/dist/as-readonly.js +8 -0
  4. package/dist/{domain → asset}/asset.d.ts +6 -1
  5. package/dist/asset/asset.d.ts.map +1 -0
  6. package/dist/{domain → asset}/asset.js +16 -7
  7. package/dist/asset/asset.spec.d.ts +2 -0
  8. package/dist/asset/asset.spec.d.ts.map +1 -0
  9. package/dist/asset/asset.spec.js +54 -0
  10. package/dist/asset/index.d.ts +2 -0
  11. package/dist/asset/index.d.ts.map +1 -0
  12. package/dist/{adapter/paper → asset}/index.js +1 -2
  13. package/dist/cli/build.js +1 -1
  14. package/dist/cli/dev.d.ts.map +1 -1
  15. package/dist/cli/dev.js +15 -11
  16. package/dist/cli/index.js +8 -8
  17. package/dist/cli/internal/workspace.js +1 -1
  18. package/dist/cli/pull.d.ts.map +1 -1
  19. package/dist/cli/pull.js +50 -20
  20. package/dist/cli/{test.d.ts → replay.d.ts} +1 -1
  21. package/dist/cli/replay.d.ts.map +1 -0
  22. package/dist/cli/{test.js → replay.js} +18 -20
  23. package/dist/cli/run.d.ts.map +1 -1
  24. package/dist/cli/run.js +16 -11
  25. package/dist/component/distinct-until-timesamp-changed.d.ts +5 -0
  26. package/dist/component/distinct-until-timesamp-changed.d.ts.map +1 -0
  27. package/dist/component/distinct-until-timesamp-changed.js +9 -0
  28. package/dist/component/error.d.ts +17 -0
  29. package/dist/component/error.d.ts.map +1 -0
  30. package/dist/component/error.js +33 -0
  31. package/dist/component/index.d.ts +8 -0
  32. package/dist/component/index.d.ts.map +1 -0
  33. package/dist/{store → component}/index.js +7 -9
  34. package/dist/{domain → component}/ohlc-operator.d.ts +1 -1
  35. package/dist/component/ohlc-operator.d.ts.map +1 -0
  36. package/dist/{domain → component}/ohlc-operator.js +4 -5
  37. package/dist/component/ohlc-operator.spec.d.ts +2 -0
  38. package/dist/component/ohlc-operator.spec.d.ts.map +1 -0
  39. package/dist/component/ohlc-operator.spec.js +110 -0
  40. package/dist/component/ohlc.d.ts.map +1 -0
  41. package/dist/component/ohlc.spec.d.ts +2 -0
  42. package/dist/component/ohlc.spec.d.ts.map +1 -0
  43. package/dist/component/ohlc.spec.js +25 -0
  44. package/dist/component/timeframe.d.ts.map +1 -0
  45. package/dist/core.d.ts +3 -0
  46. package/dist/core.d.ts.map +1 -0
  47. package/dist/core.js +15 -0
  48. package/dist/defined.d.ts +3 -0
  49. package/dist/defined.d.ts.map +1 -0
  50. package/dist/defined.js +8 -0
  51. package/dist/exclude.d.ts +3 -0
  52. package/dist/exclude.d.ts.map +1 -0
  53. package/dist/exclude.js +8 -0
  54. package/dist/index.d.ts +25 -27
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +25 -66
  57. package/dist/{domain → instrument/commission}/commission.d.ts +1 -1
  58. package/dist/instrument/commission/commission.d.ts.map +1 -0
  59. package/dist/{domain → instrument/commission}/commission.js +2 -2
  60. package/dist/instrument/commission/commission.spec.d.ts +2 -0
  61. package/dist/instrument/commission/commission.spec.d.ts.map +1 -0
  62. package/dist/instrument/commission/commission.spec.js +30 -0
  63. package/dist/instrument/index.d.ts +3 -0
  64. package/dist/instrument/index.d.ts.map +1 -0
  65. package/dist/{adapter → instrument}/index.js +2 -4
  66. package/dist/{domain → instrument}/instrument.d.ts +4 -4
  67. package/dist/instrument/instrument.d.ts.map +1 -0
  68. package/dist/{domain → instrument}/instrument.js +8 -5
  69. package/dist/instrument/instrument.spec.d.ts +2 -0
  70. package/dist/instrument/instrument.spec.d.ts.map +1 -0
  71. package/dist/instrument/instrument.spec.js +51 -0
  72. package/dist/make-test-module.d.ts +13 -0
  73. package/dist/make-test-module.d.ts.map +1 -0
  74. package/dist/make-test-module.js +46 -0
  75. package/dist/module.d.ts +57 -0
  76. package/dist/module.d.ts.map +1 -0
  77. package/dist/module.js +136 -0
  78. package/dist/module.spec.d.ts +2 -0
  79. package/dist/module.spec.d.ts.map +1 -0
  80. package/dist/module.spec.js +86 -0
  81. package/dist/not-found.d.ts +2 -0
  82. package/dist/not-found.d.ts.map +1 -0
  83. package/dist/{domain/component.js → not-found.js} +2 -0
  84. package/dist/replay/index.d.ts +7 -0
  85. package/dist/replay/index.d.ts.map +1 -0
  86. package/dist/replay/index.js +22 -0
  87. package/dist/replay/use-replay-coordinator.d.ts +10 -0
  88. package/dist/replay/use-replay-coordinator.d.ts.map +1 -0
  89. package/dist/replay/use-replay-coordinator.js +119 -0
  90. package/dist/replay/use-replay-options.d.ts +15 -0
  91. package/dist/replay/use-replay-options.d.ts.map +1 -0
  92. package/dist/replay/use-replay-options.js +20 -0
  93. package/dist/replay/use-replay-reader.d.ts +7 -0
  94. package/dist/replay/use-replay-reader.d.ts.map +1 -0
  95. package/dist/replay/use-replay-reader.js +32 -0
  96. package/dist/replay/use-replay-reader.spec.d.ts +2 -0
  97. package/dist/replay/use-replay-reader.spec.d.ts.map +1 -0
  98. package/dist/replay/use-replay-reader.spec.js +58 -0
  99. package/dist/replay/use-replay-storage.d.ts +10 -0
  100. package/dist/replay/use-replay-storage.d.ts.map +1 -0
  101. package/dist/replay/use-replay-storage.js +10 -0
  102. package/dist/replay/use-replay-writer.d.ts +6 -0
  103. package/dist/replay/use-replay-writer.d.ts.map +1 -0
  104. package/dist/replay/use-replay-writer.js +14 -0
  105. package/dist/replay/use-replay-writer.spec.d.ts +2 -0
  106. package/dist/replay/use-replay-writer.spec.d.ts.map +1 -0
  107. package/dist/replay/use-replay-writer.spec.js +53 -0
  108. package/dist/replay/use-replay.d.ts +10 -0
  109. package/dist/replay/use-replay.d.ts.map +1 -0
  110. package/dist/replay/use-replay.js +32 -0
  111. package/dist/replay/use-replay.spec.d.ts +2 -0
  112. package/dist/replay/use-replay.spec.d.ts.map +1 -0
  113. package/dist/replay/use-replay.spec.js +106 -0
  114. package/dist/replay/with-replay.d.ts +4 -0
  115. package/dist/replay/with-replay.d.ts.map +1 -0
  116. package/dist/replay/with-replay.js +8 -0
  117. package/dist/session/index.d.ts +4 -0
  118. package/dist/session/index.d.ts.map +1 -0
  119. package/dist/session/index.js +19 -0
  120. package/dist/session/use-session-object.d.ts +18 -0
  121. package/dist/session/use-session-object.d.ts.map +1 -0
  122. package/dist/session/use-session-object.js +13 -0
  123. package/dist/session/use-session-storage.d.ts +2 -0
  124. package/dist/session/use-session-storage.d.ts.map +1 -0
  125. package/dist/session/use-session-storage.js +10 -0
  126. package/dist/session/use-session.d.ts +4 -0
  127. package/dist/session/use-session.d.ts.map +1 -0
  128. package/dist/session/use-session.js +7 -0
  129. package/dist/shared/datetime.d.ts +1 -1
  130. package/dist/shared/datetime.d.ts.map +1 -1
  131. package/dist/shared/decimals.d.ts.map +1 -1
  132. package/dist/shared/decimals.js +5 -0
  133. package/dist/shared/decimals.spec.d.ts +2 -0
  134. package/dist/shared/decimals.spec.d.ts.map +1 -0
  135. package/dist/shared/decimals.spec.js +28 -0
  136. package/dist/shared/index.d.ts +3 -7
  137. package/dist/shared/index.d.ts.map +1 -1
  138. package/dist/shared/index.js +3 -7
  139. package/dist/simulator/index.d.ts +2 -0
  140. package/dist/simulator/index.d.ts.map +1 -0
  141. package/dist/{adapter/backtester → simulator}/index.js +1 -2
  142. package/dist/simulator/use-simulator.d.ts +2 -0
  143. package/dist/simulator/use-simulator.d.ts.map +1 -0
  144. package/dist/simulator/use-simulator.js +9 -0
  145. package/dist/simulator/use-simulator.spec.d.ts +2 -0
  146. package/dist/simulator/use-simulator.spec.d.ts.map +1 -0
  147. package/dist/simulator/use-simulator.spec.js +49 -0
  148. package/dist/storage/in-memory/in-memory-storage.d.ts +9 -0
  149. package/dist/storage/in-memory/in-memory-storage.d.ts.map +1 -0
  150. package/dist/storage/in-memory/in-memory-storage.factory.d.ts +6 -0
  151. package/dist/storage/in-memory/in-memory-storage.factory.d.ts.map +1 -0
  152. package/dist/storage/in-memory/in-memory-storage.factory.js +23 -0
  153. package/dist/storage/in-memory/in-memory-storage.js +72 -0
  154. package/dist/storage/in-memory/in-memory-storage.spec.d.ts +2 -0
  155. package/dist/storage/in-memory/in-memory-storage.spec.d.ts.map +1 -0
  156. package/dist/storage/in-memory/in-memory-storage.spec.js +167 -0
  157. package/dist/storage/in-memory/index.d.ts +3 -0
  158. package/dist/storage/in-memory/index.d.ts.map +1 -0
  159. package/dist/storage/in-memory/index.js +18 -0
  160. package/dist/storage/index.d.ts +3 -3
  161. package/dist/storage/index.d.ts.map +1 -1
  162. package/dist/storage/index.js +3 -3
  163. package/dist/storage/storage.d.ts +51 -61
  164. package/dist/storage/storage.d.ts.map +1 -1
  165. package/dist/storage/storage.js +20 -85
  166. package/dist/storage/use-cache.d.ts +4 -0
  167. package/dist/storage/use-cache.d.ts.map +1 -0
  168. package/dist/storage/use-cache.js +34 -0
  169. package/dist/storage/use-cache.spec.d.ts +2 -0
  170. package/dist/storage/use-cache.spec.d.ts.map +1 -0
  171. package/dist/storage/use-cache.spec.js +36 -0
  172. package/dist/storage/use-storage-factory.d.ts +10 -0
  173. package/dist/storage/use-storage-factory.d.ts.map +1 -0
  174. package/dist/storage/use-storage-factory.js +14 -0
  175. package/dist/storage/use-storage.d.ts +3 -0
  176. package/dist/storage/use-storage.d.ts.map +1 -0
  177. package/dist/storage/use-storage.js +11 -0
  178. package/dist/strat.d.ts +7 -0
  179. package/dist/strat.d.ts.map +1 -0
  180. package/dist/strat.js +7 -0
  181. package/dist/use-execution-mode.d.ts +29 -0
  182. package/dist/use-execution-mode.d.ts.map +1 -0
  183. package/dist/use-execution-mode.js +37 -0
  184. package/dist/use-hash.d.ts +5 -0
  185. package/dist/use-hash.d.ts.map +1 -0
  186. package/dist/use-hash.js +7 -0
  187. package/dist/use-hash.spec.d.ts +2 -0
  188. package/dist/use-hash.spec.d.ts.map +1 -0
  189. package/dist/use-hash.spec.js +16 -0
  190. package/dist/use-lock.d.ts +9 -0
  191. package/dist/use-lock.d.ts.map +1 -0
  192. package/dist/use-lock.js +40 -0
  193. package/dist/use-logger.d.ts +10 -0
  194. package/dist/use-logger.d.ts.map +1 -0
  195. package/dist/use-logger.js +37 -0
  196. package/dist/use-memo.d.ts +21 -0
  197. package/dist/use-memo.d.ts.map +1 -0
  198. package/dist/use-memo.js +35 -0
  199. package/dist/use-memo.spec.d.ts +2 -0
  200. package/dist/use-memo.spec.d.ts.map +1 -0
  201. package/dist/use-memo.spec.js +35 -0
  202. package/dist/use-request.d.ts +16 -0
  203. package/dist/use-request.d.ts.map +1 -0
  204. package/dist/use-request.js +27 -0
  205. package/dist/use-socket.d.ts +6 -0
  206. package/dist/use-socket.d.ts.map +1 -0
  207. package/dist/use-socket.js +52 -0
  208. package/dist/use-state.d.ts +4 -0
  209. package/dist/use-state.d.ts.map +1 -0
  210. package/dist/use-state.js +24 -0
  211. package/dist/use-state.spec.d.ts +2 -0
  212. package/dist/use-state.spec.d.ts.map +1 -0
  213. package/dist/use-state.spec.js +36 -0
  214. package/dist/use-timestamp.d.ts +2 -0
  215. package/dist/use-timestamp.d.ts.map +1 -0
  216. package/dist/use-timestamp.js +13 -0
  217. package/dist/use.d.ts +5 -0
  218. package/dist/use.d.ts.map +1 -0
  219. package/dist/use.js +20 -0
  220. package/dist/use.spec.d.ts +2 -0
  221. package/dist/use.spec.d.ts.map +1 -0
  222. package/dist/use.spec.js +47 -0
  223. package/jest.config.ts +23 -2
  224. package/package.json +14 -11
  225. package/src/as-readonly.ts +5 -0
  226. package/src/{domain → asset}/asset.spec.ts +4 -4
  227. package/src/{domain → asset}/asset.ts +17 -6
  228. package/src/asset/index.ts +1 -0
  229. package/src/cli/build.ts +1 -1
  230. package/src/cli/dev.ts +18 -13
  231. package/src/cli/index.ts +7 -7
  232. package/src/cli/internal/workspace.ts +1 -1
  233. package/src/cli/pull.ts +22 -10
  234. package/src/cli/replay.ts +31 -0
  235. package/src/cli/run.ts +17 -13
  236. package/src/component/distinct-until-timesamp-changed.ts +11 -0
  237. package/src/component/error.ts +32 -0
  238. package/src/component/index.ts +7 -0
  239. package/src/{domain → component}/ohlc-operator.spec.ts +5 -6
  240. package/src/{domain → component}/ohlc-operator.ts +2 -3
  241. package/src/{domain → component}/ohlc.spec.ts +2 -2
  242. package/src/{domain → component}/ohlc.ts +2 -2
  243. package/src/core.ts +14 -0
  244. package/src/defined.ts +6 -0
  245. package/src/exclude.ts +9 -0
  246. package/src/index.ts +27 -80
  247. package/src/{domain → instrument/commission}/commission.spec.ts +4 -3
  248. package/src/{domain → instrument/commission}/commission.ts +1 -1
  249. package/src/instrument/index.ts +2 -0
  250. package/src/{domain → instrument}/instrument.spec.ts +11 -6
  251. package/src/{domain → instrument}/instrument.ts +12 -8
  252. package/src/make-test-module.ts +46 -0
  253. package/src/module.spec.ts +74 -0
  254. package/src/module.ts +156 -0
  255. package/src/not-found.ts +1 -0
  256. package/src/replay/index.ts +6 -0
  257. package/src/replay/use-replay-coordinator.ts +142 -0
  258. package/src/replay/use-replay-options.ts +23 -0
  259. package/src/replay/use-replay-reader.spec.ts +64 -0
  260. package/src/replay/use-replay-reader.ts +23 -0
  261. package/src/replay/use-replay-storage.ts +8 -0
  262. package/src/replay/use-replay-writer.spec.ts +56 -0
  263. package/src/replay/use-replay-writer.ts +17 -0
  264. package/src/replay/use-replay.spec.ts +132 -0
  265. package/src/replay/use-replay.ts +34 -0
  266. package/src/replay/with-replay.ts +10 -0
  267. package/src/session/index.ts +3 -0
  268. package/src/session/use-session-object.ts +26 -0
  269. package/src/session/use-session-storage.ts +9 -0
  270. package/src/session/use-session.ts +5 -0
  271. package/src/shared/decimals.spec.ts +1 -1
  272. package/src/shared/decimals.ts +5 -0
  273. package/src/shared/index.ts +3 -7
  274. package/src/simulator/index.ts +1 -0
  275. package/src/simulator/use-simulator.spec.ts +54 -0
  276. package/src/simulator/use-simulator.ts +7 -0
  277. package/src/storage/in-memory/in-memory-storage.factory.ts +16 -0
  278. package/src/storage/in-memory/in-memory-storage.spec.ts +193 -0
  279. package/src/storage/in-memory/in-memory-storage.ts +80 -0
  280. package/src/storage/in-memory/index.ts +2 -0
  281. package/src/storage/index.ts +3 -3
  282. package/src/storage/storage.ts +63 -119
  283. package/src/storage/use-cache.spec.ts +31 -0
  284. package/src/storage/use-cache.ts +50 -0
  285. package/src/storage/use-storage-factory.ts +17 -0
  286. package/src/storage/use-storage.ts +11 -0
  287. package/src/strat.ts +7 -0
  288. package/src/use-execution-mode.ts +41 -0
  289. package/src/use-hash.spec.ts +16 -0
  290. package/src/use-hash.ts +5 -0
  291. package/src/use-lock.ts +52 -0
  292. package/src/use-logger.ts +47 -0
  293. package/src/use-memo.spec.ts +30 -0
  294. package/src/use-memo.ts +35 -0
  295. package/src/use-request.ts +47 -0
  296. package/src/use-socket.ts +59 -0
  297. package/src/use-state.spec.ts +31 -0
  298. package/src/use-state.ts +30 -0
  299. package/src/use-timestamp.ts +12 -0
  300. package/src/use.spec.ts +46 -0
  301. package/src/use.ts +33 -0
  302. package/tsconfig.json +7 -4
  303. package/dist/adapter/adapter-aggregate.d.ts +0 -57
  304. package/dist/adapter/adapter-aggregate.d.ts.map +0 -1
  305. package/dist/adapter/adapter-aggregate.js +0 -157
  306. package/dist/adapter/adapter.d.ts +0 -54
  307. package/dist/adapter/adapter.d.ts.map +0 -1
  308. package/dist/adapter/adapter.js +0 -20
  309. package/dist/adapter/backtester/backtester-adapter.d.ts +0 -30
  310. package/dist/adapter/backtester/backtester-adapter.d.ts.map +0 -1
  311. package/dist/adapter/backtester/backtester-adapter.js +0 -67
  312. package/dist/adapter/backtester/backtester-cursor.d.ts +0 -16
  313. package/dist/adapter/backtester/backtester-cursor.d.ts.map +0 -1
  314. package/dist/adapter/backtester/backtester-cursor.js +0 -52
  315. package/dist/adapter/backtester/backtester-streamer.d.ts +0 -50
  316. package/dist/adapter/backtester/backtester-streamer.d.ts.map +0 -1
  317. package/dist/adapter/backtester/backtester-streamer.js +0 -119
  318. package/dist/adapter/backtester/error.d.ts +0 -3
  319. package/dist/adapter/backtester/error.d.ts.map +0 -1
  320. package/dist/adapter/backtester/error.js +0 -11
  321. package/dist/adapter/backtester/index.d.ts +0 -3
  322. package/dist/adapter/backtester/index.d.ts.map +0 -1
  323. package/dist/adapter/error.d.ts +0 -4
  324. package/dist/adapter/error.d.ts.map +0 -1
  325. package/dist/adapter/error.js +0 -15
  326. package/dist/adapter/index.d.ts +0 -5
  327. package/dist/adapter/index.d.ts.map +0 -1
  328. package/dist/adapter/paper/engine/paper-engine.d.ts +0 -12
  329. package/dist/adapter/paper/engine/paper-engine.d.ts.map +0 -1
  330. package/dist/adapter/paper/engine/paper-engine.js +0 -109
  331. package/dist/adapter/paper/index.d.ts +0 -3
  332. package/dist/adapter/paper/index.d.ts.map +0 -1
  333. package/dist/adapter/paper/paper-adapter.d.ts +0 -30
  334. package/dist/adapter/paper/paper-adapter.d.ts.map +0 -1
  335. package/dist/adapter/paper/paper-adapter.js +0 -87
  336. package/dist/cli/error.d.ts +0 -2
  337. package/dist/cli/error.d.ts.map +0 -1
  338. package/dist/cli/error.js +0 -7
  339. package/dist/cli/test.d.ts.map +0 -1
  340. package/dist/domain/asset.d.ts.map +0 -1
  341. package/dist/domain/balance-operator.d.ts +0 -7
  342. package/dist/domain/balance-operator.d.ts.map +0 -1
  343. package/dist/domain/balance-operator.js +0 -9
  344. package/dist/domain/balance.d.ts +0 -47
  345. package/dist/domain/balance.d.ts.map +0 -1
  346. package/dist/domain/balance.js +0 -97
  347. package/dist/domain/commission.d.ts.map +0 -1
  348. package/dist/domain/component.d.ts +0 -6
  349. package/dist/domain/component.d.ts.map +0 -1
  350. package/dist/domain/error.d.ts +0 -7
  351. package/dist/domain/error.d.ts.map +0 -1
  352. package/dist/domain/error.js +0 -23
  353. package/dist/domain/index.d.ts +0 -22
  354. package/dist/domain/index.d.ts.map +0 -1
  355. package/dist/domain/index.js +0 -37
  356. package/dist/domain/instrument-operator.d.ts +0 -7
  357. package/dist/domain/instrument-operator.d.ts.map +0 -1
  358. package/dist/domain/instrument-operator.js +0 -13
  359. package/dist/domain/instrument.d.ts.map +0 -1
  360. package/dist/domain/ohlc-operator.d.ts.map +0 -1
  361. package/dist/domain/ohlc.d.ts.map +0 -1
  362. package/dist/domain/order-operator.d.ts +0 -8
  363. package/dist/domain/order-operator.d.ts.map +0 -1
  364. package/dist/domain/order-operator.js +0 -16
  365. package/dist/domain/order.d.ts +0 -24
  366. package/dist/domain/order.d.ts.map +0 -1
  367. package/dist/domain/order.js +0 -49
  368. package/dist/domain/orderbook-operator.d.ts +0 -7
  369. package/dist/domain/orderbook-operator.d.ts.map +0 -1
  370. package/dist/domain/orderbook-operator.js +0 -9
  371. package/dist/domain/orderbook.d.ts +0 -30
  372. package/dist/domain/orderbook.d.ts.map +0 -1
  373. package/dist/domain/orderbook.js +0 -20
  374. package/dist/domain/position-operator.d.ts +0 -13
  375. package/dist/domain/position-operator.d.ts.map +0 -1
  376. package/dist/domain/position-operator.js +0 -45
  377. package/dist/domain/position.d.ts +0 -18
  378. package/dist/domain/position.d.ts.map +0 -1
  379. package/dist/domain/position.js +0 -23
  380. package/dist/domain/session-builder.d.ts +0 -54
  381. package/dist/domain/session-builder.d.ts.map +0 -1
  382. package/dist/domain/session-builder.js +0 -106
  383. package/dist/domain/session.d.ts +0 -77
  384. package/dist/domain/session.d.ts.map +0 -1
  385. package/dist/domain/session.js +0 -162
  386. package/dist/domain/timeframe.d.ts.map +0 -1
  387. package/dist/domain/trade-operator.d.ts +0 -7
  388. package/dist/domain/trade-operator.d.ts.map +0 -1
  389. package/dist/domain/trade-operator.js +0 -9
  390. package/dist/domain/trade.d.ts +0 -16
  391. package/dist/domain/trade.d.ts.map +0 -1
  392. package/dist/domain/trade.js +0 -17
  393. package/dist/shared/collections.d.ts +0 -29
  394. package/dist/shared/collections.d.ts.map +0 -1
  395. package/dist/shared/collections.js +0 -123
  396. package/dist/shared/logger.d.ts +0 -8
  397. package/dist/shared/logger.d.ts.map +0 -1
  398. package/dist/shared/logger.js +0 -33
  399. package/dist/shared/pipe.d.ts +0 -5
  400. package/dist/shared/pipe.d.ts.map +0 -1
  401. package/dist/shared/pipe.js +0 -8
  402. package/dist/shared/policy.d.ts +0 -2
  403. package/dist/shared/policy.d.ts.map +0 -1
  404. package/dist/shared/policy.js +0 -8
  405. package/dist/storage/cache.d.ts +0 -10
  406. package/dist/storage/cache.d.ts.map +0 -1
  407. package/dist/storage/cache.js +0 -43
  408. package/dist/storage/feed.d.ts +0 -38
  409. package/dist/storage/feed.d.ts.map +0 -1
  410. package/dist/storage/feed.js +0 -108
  411. package/dist/storage/measurement.d.ts +0 -34
  412. package/dist/storage/measurement.d.ts.map +0 -1
  413. package/dist/storage/measurement.js +0 -59
  414. package/dist/store/error.d.ts +0 -9
  415. package/dist/store/error.d.ts.map +0 -1
  416. package/dist/store/error.js +0 -31
  417. package/dist/store/index.d.ts +0 -10
  418. package/dist/store/index.d.ts.map +0 -1
  419. package/dist/store/store-balance-event.d.ts +0 -46
  420. package/dist/store/store-balance-event.d.ts.map +0 -1
  421. package/dist/store/store-balance-event.js +0 -134
  422. package/dist/store/store-event.d.ts +0 -7
  423. package/dist/store/store-event.d.ts.map +0 -1
  424. package/dist/store/store-event.js +0 -2
  425. package/dist/store/store-instrument-event.d.ts +0 -22
  426. package/dist/store/store-instrument-event.d.ts.map +0 -1
  427. package/dist/store/store-instrument-event.js +0 -60
  428. package/dist/store/store-order-event.d.ts +0 -64
  429. package/dist/store/store-order-event.d.ts.map +0 -1
  430. package/dist/store/store-order-event.js +0 -185
  431. package/dist/store/store-orderbook-event.d.ts +0 -13
  432. package/dist/store/store-orderbook-event.d.ts.map +0 -1
  433. package/dist/store/store-orderbook-event.js +0 -43
  434. package/dist/store/store-position-event.d.ts +0 -22
  435. package/dist/store/store-position-event.d.ts.map +0 -1
  436. package/dist/store/store-position-event.js +0 -96
  437. package/dist/store/store-state.d.ts +0 -28
  438. package/dist/store/store-state.d.ts.map +0 -1
  439. package/dist/store/store-state.js +0 -29
  440. package/dist/store/store-trade-event.d.ts +0 -17
  441. package/dist/store/store-trade-event.d.ts.map +0 -1
  442. package/dist/store/store-trade-event.js +0 -34
  443. package/dist/store/store.d.ts +0 -15
  444. package/dist/store/store.d.ts.map +0 -1
  445. package/dist/store/store.js +0 -32
  446. package/src/adapter/adapter-aggregate.ts +0 -171
  447. package/src/adapter/adapter.ts +0 -83
  448. package/src/adapter/backtester/backtester-adapter.ts +0 -96
  449. package/src/adapter/backtester/backtester-cursor.spec.ts +0 -44
  450. package/src/adapter/backtester/backtester-cursor.ts +0 -47
  451. package/src/adapter/backtester/backtester-streamer.spec.ts +0 -60
  452. package/src/adapter/backtester/backtester-streamer.ts +0 -155
  453. package/src/adapter/backtester/error.ts +0 -7
  454. package/src/adapter/backtester/index.ts +0 -2
  455. package/src/adapter/error.ts +0 -13
  456. package/src/adapter/index.ts +0 -4
  457. package/src/adapter/paper/engine/paper-engine.spec.ts +0 -116
  458. package/src/adapter/paper/engine/paper-engine.ts +0 -151
  459. package/src/adapter/paper/index.ts +0 -2
  460. package/src/adapter/paper/paper-adapter.ts +0 -111
  461. package/src/cli/error.ts +0 -5
  462. package/src/cli/test.ts +0 -40
  463. package/src/domain/balance-operator.spec.ts +0 -26
  464. package/src/domain/balance-operator.ts +0 -15
  465. package/src/domain/balance.spec.ts +0 -116
  466. package/src/domain/balance.ts +0 -123
  467. package/src/domain/component.ts +0 -6
  468. package/src/domain/error.ts +0 -27
  469. package/src/domain/index.ts +0 -21
  470. package/src/domain/instrument-operator.spec.ts +0 -35
  471. package/src/domain/instrument-operator.ts +0 -25
  472. package/src/domain/order-operator.spec.ts +0 -85
  473. package/src/domain/order-operator.ts +0 -23
  474. package/src/domain/order.spec.ts +0 -43
  475. package/src/domain/order.ts +0 -68
  476. package/src/domain/orderbook-operator.spec.ts +0 -40
  477. package/src/domain/orderbook-operator.ts +0 -15
  478. package/src/domain/orderbook.spec.ts +0 -26
  479. package/src/domain/orderbook.ts +0 -30
  480. package/src/domain/position-operator.spec.ts +0 -64
  481. package/src/domain/position-operator.ts +0 -71
  482. package/src/domain/position.spec.ts +0 -43
  483. package/src/domain/position.ts +0 -31
  484. package/src/domain/session-builder.ts +0 -158
  485. package/src/domain/session.spec.ts +0 -33
  486. package/src/domain/session.ts +0 -256
  487. package/src/domain/trade-operator.spec.ts +0 -35
  488. package/src/domain/trade-operator.ts +0 -15
  489. package/src/domain/trade.spec.ts +0 -21
  490. package/src/domain/trade.ts +0 -20
  491. package/src/shared/collections.spec.ts +0 -34
  492. package/src/shared/collections.ts +0 -154
  493. package/src/shared/logger.ts +0 -39
  494. package/src/shared/pipe.ts +0 -12
  495. package/src/shared/policy.ts +0 -5
  496. package/src/storage/cache.spec.ts +0 -18
  497. package/src/storage/cache.ts +0 -37
  498. package/src/storage/feed.ts +0 -124
  499. package/src/storage/measurement.ts +0 -56
  500. package/src/store/error.ts +0 -36
  501. package/src/store/index.ts +0 -9
  502. package/src/store/store-balance-event.spec.ts +0 -30
  503. package/src/store/store-balance-event.ts +0 -167
  504. package/src/store/store-event.ts +0 -8
  505. package/src/store/store-instrument-event.spec.ts +0 -26
  506. package/src/store/store-instrument-event.ts +0 -83
  507. package/src/store/store-order-event.spec.ts +0 -32
  508. package/src/store/store-order-event.ts +0 -219
  509. package/src/store/store-orderbook-event.spec.ts +0 -39
  510. package/src/store/store-orderbook-event.ts +0 -56
  511. package/src/store/store-position-event.ts +0 -121
  512. package/src/store/store-state.ts +0 -48
  513. package/src/store/store-trade-event.spec.ts +0 -62
  514. package/src/store/store-trade-event.ts +0 -42
  515. package/src/store/store.spec.ts +0 -182
  516. package/src/store/store.ts +0 -37
  517. package/dist/{domain → component}/ohlc.d.ts +0 -0
  518. package/dist/{domain → component}/ohlc.js +0 -0
  519. package/dist/{domain → component}/timeframe.d.ts +0 -0
  520. package/dist/{domain → component}/timeframe.js +1 -1
  521. /package/src/{domain → component}/timeframe.ts +0 -0
@@ -1,171 +0,0 @@
1
- import { InstrumentSelector, Ohlc, Order } from '../domain';
2
- import { Logger, timestamp } from '../shared';
3
- import { Cache } from '../storage';
4
- import { Store } from '../store';
5
- import { Adapter } from '.';
6
- import { AdapterFactory, AdapterTimeProvider, FeedAsyncCallback } from './adapter';
7
- import { adapterNotFoundError } from './error';
8
-
9
- /**
10
- * Manages instances of all adapters provided in session descriptor.
11
- * Awakes and disposes adapters, routes and executes commands.
12
- */
13
- export class AdapterAggregate {
14
- private readonly adapter: Record<string, Adapter> = {};
15
-
16
- constructor(
17
- private readonly factories: AdapterFactory[],
18
- private readonly timeProvider: AdapterTimeProvider,
19
- private readonly store: Store,
20
- private readonly cache: Cache
21
- ) { }
22
-
23
- /**
24
- * Returns adapter by name.
25
- * @param adapterName adapter name.
26
- * @returns
27
- */
28
- get(adapterName: string): Adapter {
29
- const adapter = this.adapter[adapterName];
30
-
31
- if (!adapter) {
32
- throw adapterNotFoundError(adapterName);
33
- }
34
-
35
- return adapter;
36
- }
37
-
38
- /**
39
- * Sets up all adapters.
40
- */
41
- async awake(): Promise<void> {
42
- for (const factory of this.factories) {
43
- const adapter = factory(this.timeProvider, this.store, this.cache);
44
-
45
- try {
46
- await adapter.awake();
47
- await adapter.account();
48
- } catch (error) {
49
- Logger.error(adapter.name, error);
50
- }
51
-
52
- this.adapter[adapter.name] = adapter;
53
- }
54
- }
55
-
56
- /**
57
- * Disposes all adapters.
58
- */
59
- async dispose(): Promise<void> {
60
- for (const adapter of Object.values(this.adapter)) {
61
- try {
62
- await adapter.dispose();
63
- } catch (error) {
64
- Logger.error(adapter.name, error);
65
- }
66
- }
67
- }
68
-
69
- /**
70
- * Subscribe to collection of instruments.
71
- * @param selectors
72
- */
73
- async subscribe(selectors: InstrumentSelector[]): Promise<void> {
74
- const grouped = selectors.reduce((aggregate, it) => {
75
- const adapter = it.base.adapterName;
76
-
77
- if (aggregate[adapter]) {
78
- aggregate[adapter].push(it);
79
- } else {
80
- aggregate[adapter] = [it];
81
- }
82
-
83
- return aggregate;
84
- }, {} as Record<string, InstrumentSelector[]>);
85
-
86
- for (const adapterName in grouped) {
87
- try {
88
- await this.get(adapterName).subscribe(grouped[adapterName]);
89
- } catch (error) {
90
- Logger.error(adapterName, error);
91
-
92
- throw error;
93
- }
94
- }
95
- }
96
-
97
- /**
98
- * Opens new order.
99
- * @param order an order to open.
100
- */
101
- async open(order: Order): Promise<void> {
102
- const { adapterName } = order.instrument.base;
103
-
104
- Logger.debug(
105
- adapterName,
106
- `opening a new order on ${order.instrument.id} as ${order.id}`
107
- );
108
-
109
- try {
110
- await this.get(adapterName).open(order);
111
- } catch (error) {
112
- Logger.error(adapterName, error);
113
-
114
- throw error;
115
- }
116
- }
117
-
118
- /**
119
- * Cancels specific order.
120
- */
121
- cancel(order: Order): Promise<void> {
122
- const { adapterName } = order.instrument.base;
123
-
124
- Logger.debug(adapterName, `canceling a ${order.id} order`);
125
-
126
- try {
127
- return this.get(adapterName).cancel(order);
128
- } catch (error) {
129
- Logger.error(adapterName, error);
130
-
131
- throw error;
132
- }
133
- }
134
-
135
- /**
136
- *
137
- * @returns
138
- */
139
- history(
140
- instrument: InstrumentSelector,
141
- timeframe: number,
142
- length: number
143
- ): Promise<Ohlc[]> {
144
- try {
145
- return this.get(instrument.base.adapterName).history(instrument, timeframe, length);
146
- } catch (error) {
147
- Logger.error(instrument.base.adapterName, error);
148
-
149
- throw error;
150
- }
151
- }
152
-
153
- /**
154
- * Feeds a storage with historical instrument data.
155
- * @returns
156
- */
157
- feed(
158
- instrument: InstrumentSelector,
159
- from: timestamp,
160
- to: timestamp,
161
- callback: FeedAsyncCallback
162
- ): Promise<void> {
163
- try {
164
- return this.get(instrument.base.adapterName).feed(instrument, from, to, callback);
165
- } catch (error) {
166
- Logger.error(instrument.base.adapterName, error);
167
-
168
- throw error;
169
- }
170
- }
171
- }
@@ -1,83 +0,0 @@
1
- import { Ohlc, InstrumentSelector, Order } from '../domain';
2
- import { now, timestamp } from '../shared';
3
- import { Cache, StorageEvent } from '../storage';
4
- import { Store } from '../store';
5
- import { PaperAdapter } from './paper';
6
- import { PaperEngine } from './paper/engine/paper-engine';
7
-
8
- export type AdapterTimeProvider = {
9
- timestamp: () => number;
10
- };
11
-
12
- export const DefaultTimeProvider = {
13
- timestamp: () => now()
14
- };
15
-
16
- export type FeedAsyncCallback = (timestamp: number, chunk: StorageEvent[]) => void;
17
-
18
- export type AdapterFactory = (
19
- timeProvider: AdapterTimeProvider,
20
- store: Store,
21
- cache: Cache
22
- ) => Adapter;
23
-
24
- /**
25
- * Base adapter class, you should derive your own adapter from this class.
26
- * @abstract
27
- */
28
- export abstract class Adapter {
29
- abstract name: string;
30
-
31
- timestamp(): timestamp {
32
- return this.timeProvider.timestamp();
33
- }
34
-
35
- constructor(private readonly timeProvider: AdapterTimeProvider) { }
36
-
37
- /**
38
- * Setup an adapter.
39
- */
40
- abstract awake(): Promise<void>;
41
-
42
- /**
43
- * Dispose an adapter.
44
- */
45
- abstract dispose(): Promise<void>;
46
-
47
- /**
48
- * Subscribe to collection of instruments.
49
- * @param instruments
50
- */
51
- abstract subscribe(instruments: InstrumentSelector[]): Promise<void>;
52
-
53
- /**
54
- *
55
- */
56
- abstract account(): Promise<void>;
57
-
58
- /**
59
- * Opens new order.
60
- * @param order an order to open.
61
- */
62
- abstract open(order: Order): Promise<void>;
63
-
64
- /**
65
- * Cancels specific order.
66
- */
67
- abstract cancel(order: Order): Promise<void>;
68
-
69
- abstract history(
70
- instrument: InstrumentSelector,
71
- timeframe: number,
72
- length: number
73
- ): Promise<Ohlc[]>;
74
-
75
- abstract feed(
76
- instrument: InstrumentSelector,
77
- from: timestamp,
78
- to: timestamp,
79
- callback: FeedAsyncCallback
80
- ): Promise<void>;
81
-
82
- abstract createPaperEngine(adapter: PaperAdapter): PaperEngine;
83
- }
@@ -1,96 +0,0 @@
1
- import { InstrumentSelector, Ohlc, Order } from '../../domain';
2
- import { timestamp } from '../../shared';
3
- import { InstrumentSubscriptionEvent, Store } from '../../store';
4
- import { Adapter } from '..';
5
- import { AdapterFactory, FeedAsyncCallback } from '../adapter';
6
- import { PaperAdapter, PaperOptions } from '../paper';
7
- import { PaperEngine } from '../paper/engine/paper-engine';
8
- import { BacktesterStreamer } from './backtester-streamer';
9
-
10
- export interface BacktesterOptions extends PaperOptions {
11
- from: timestamp;
12
- to: timestamp;
13
- }
14
-
15
- export function createBacktesterAdapterFactory(
16
- decoratedAdapterFactory: AdapterFactory,
17
- streamer: BacktesterStreamer
18
- ): AdapterFactory {
19
- return (timeProvider, store, cache) =>
20
- new BacktesterAdapter(
21
- decoratedAdapterFactory(timeProvider, store, cache),
22
- streamer,
23
- store
24
- );
25
- }
26
-
27
- export class BacktesterAdapter extends Adapter {
28
- readonly name = this.decoratedAdapter.name;
29
-
30
- constructor(
31
- readonly decoratedAdapter: Adapter,
32
- readonly streamer: BacktesterStreamer,
33
- readonly store: Store
34
- ) {
35
- super(streamer.getTimeProvider());
36
- }
37
-
38
- async awake(): Promise<void> {
39
- await this.decoratedAdapter.awake();
40
- }
41
-
42
- dispose(): Promise<void> {
43
- return this.decoratedAdapter.dispose();
44
- }
45
-
46
- async subscribe(instruments: InstrumentSelector[]): Promise<void> {
47
- instruments.forEach(it => {
48
- this.streamer.subscribe(it);
49
- });
50
-
51
- this.store.dispatch(
52
- ...instruments.map(
53
- it => new InstrumentSubscriptionEvent(this.timestamp(), it, true)
54
- )
55
- );
56
- }
57
-
58
- account(): Promise<void> {
59
- return this.decoratedAdapter.account();
60
- }
61
-
62
- open(order: Order): Promise<void> {
63
- return this.decoratedAdapter.open(order);
64
- }
65
-
66
- cancel(order: Order): Promise<void> {
67
- return this.decoratedAdapter.cancel(order);
68
- }
69
-
70
- async history(
71
- instrument: InstrumentSelector,
72
- timeframe: number,
73
- length: number
74
- ): Promise<Ohlc[]> {
75
- this.streamer.stop();
76
-
77
- const response = await this.decoratedAdapter.history(instrument, timeframe, length);
78
-
79
- this.streamer.tryContinue();
80
-
81
- return response;
82
- }
83
-
84
- feed(
85
- instrument: InstrumentSelector,
86
- from: timestamp,
87
- to: timestamp,
88
- callback: FeedAsyncCallback
89
- ): Promise<void> {
90
- return this.decoratedAdapter.feed(instrument, from, to, callback);
91
- }
92
-
93
- createPaperEngine(adapter: PaperAdapter): PaperEngine {
94
- return this.decoratedAdapter.createPaperEngine(adapter);
95
- }
96
- }
@@ -1,44 +0,0 @@
1
- import { instrumentOf } from '../../domain';
2
- import { d } from '../../shared';
3
- import { Feed, InMemoryStorage } from '../../storage';
4
- import { TradePatchEvent } from '../../store';
5
- import { BacktesterCursor } from './backtester-cursor';
6
-
7
- describe('BacktesterCursor', () => {
8
- test('should repeat specific events', async () => {
9
- const instrument = instrumentOf('binance:btc-usdt');
10
- const feed = new Feed(new InMemoryStorage());
11
- const cursor = new BacktesterCursor(instrument, feed);
12
-
13
- feed.save([
14
- new TradePatchEvent(instrument, d(1), d(1), 1),
15
- new TradePatchEvent(instrument, d(2), d(2), 2),
16
- new TradePatchEvent(instrument, d(3), d(3), 3),
17
- new TradePatchEvent(instrument, d(4), d(4), 4),
18
- new TradePatchEvent(instrument, d(5), d(5), 5),
19
- new TradePatchEvent(instrument, d(6), d(6), 6),
20
- new TradePatchEvent(instrument, d(7), d(7), 7),
21
- new TradePatchEvent(instrument, d(8), d(8), 8)
22
- ]);
23
-
24
- await cursor.fetchNextPage(0, 4);
25
-
26
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(1), d(1), 1));
27
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(2), d(2), 2));
28
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(3), d(3), 3));
29
- expect(cursor.peek()).toEqual(undefined);
30
-
31
- await cursor.fetchNextPage(3, 7);
32
-
33
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(4), d(4), 4));
34
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(5), d(5), 5));
35
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(6), d(6), 6));
36
- expect(cursor.peek()).toEqual(undefined);
37
-
38
- await cursor.fetchNextPage(6, 10);
39
-
40
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(7), d(7), 7));
41
- expect(cursor.dequeue()).toEqual(new TradePatchEvent(instrument, d(8), d(8), 8));
42
- expect(cursor.peek()).toEqual(undefined);
43
- });
44
- });
@@ -1,47 +0,0 @@
1
- import { InstrumentSelector } from '../../domain';
2
- import { timestamp } from '../../shared';
3
- import { Feed, StorageEvent } from '../../storage';
4
- import { backtestPageNotEmpty } from '../error';
5
-
6
- export class BacktesterCursor {
7
- private page = new Array<StorageEvent>();
8
- private pageIndex = 0;
9
- completed = false;
10
-
11
- get size(): number {
12
- return this.page.length - this.pageIndex;
13
- }
14
-
15
- constructor(readonly instrument: InstrumentSelector, private readonly feed: Feed) {}
16
-
17
- peek(): StorageEvent | undefined {
18
- if (!this.page) {
19
- return undefined;
20
- }
21
-
22
- return this.page[this.pageIndex];
23
- }
24
-
25
- dequeue(): StorageEvent {
26
- return this.page[this.pageIndex++];
27
- }
28
-
29
- async fetchNextPage(from: timestamp, to: number): Promise<void> {
30
- if (this.completed) {
31
- return;
32
- }
33
-
34
- if (this.size > 0) {
35
- throw backtestPageNotEmpty();
36
- }
37
-
38
- this.pageIndex = 0;
39
- this.page = await this.feed.query(this.instrument, {
40
- from,
41
- to,
42
- count: 10000
43
- });
44
-
45
- this.completed = this.page.length == 0;
46
- }
47
- }
@@ -1,60 +0,0 @@
1
- import { Asset, Commission, Instrument } from '../../domain';
2
- import { d } from '../../shared';
3
- import { Feed, InMemoryStorage } from '../../storage';
4
- import { Store, TradePatchEvent } from '../../store';
5
- import { BacktesterStreamer } from './backtester-streamer';
6
-
7
- describe('BacktesterStreamer', () => {
8
- const instrument = new Instrument(
9
- 0,
10
- new Asset('btc', 'binance', 8),
11
- new Asset('usdt', 'binance', 2),
12
- 'binance:btc-usdt',
13
- Commission.Zero
14
- );
15
-
16
- test('should repeat specific events', done => {
17
- const feed = new Feed(new InMemoryStorage());
18
- const store = new Store();
19
-
20
- store.snapshot.universe.instrument.upsert(instrument);
21
- store.snapshot.subscription.instrument.upsert(instrument);
22
-
23
- const streamer = new BacktesterStreamer(
24
- store,
25
- feed,
26
- {
27
- from: 0,
28
- to: 10
29
- },
30
- {
31
- onBacktestCompleted: () => {
32
- const trade = store.snapshot.trade.get(instrument.id) ?? fail();
33
-
34
- expect(trade.timestamp).toEqual(8);
35
- expect(trade.rate).toEqual(d(8));
36
- expect(trade.quantity).toEqual(d(8));
37
- expect(store.snapshot.timestamp).toEqual(8);
38
-
39
- done();
40
- }
41
- }
42
- );
43
-
44
- feed
45
- .save([
46
- new TradePatchEvent(instrument, d(1), d(1), 1),
47
- new TradePatchEvent(instrument, d(2), d(2), 2),
48
- new TradePatchEvent(instrument, d(3), d(3), 3),
49
- new TradePatchEvent(instrument, d(4), d(4), 4),
50
- new TradePatchEvent(instrument, d(5), d(5), 5),
51
- new TradePatchEvent(instrument, d(6), d(6), 6),
52
- new TradePatchEvent(instrument, d(7), d(7), 7),
53
- new TradePatchEvent(instrument, d(8), d(8), 8)
54
- ])
55
- .then(() => {
56
- streamer.subscribe(instrument);
57
- streamer.tryContinue();
58
- });
59
- });
60
- });
@@ -1,155 +0,0 @@
1
- import { InstrumentSelector } from '../../domain';
2
- import { timestamp } from '../../shared';
3
- import { Feed } from '../../storage';
4
- import { Store } from '../../store';
5
- import { AdapterTimeProvider } from '../adapter';
6
- import { BacktesterCursor } from './backtester-cursor';
7
- import { invalidEventSequenceError, missingPeriodParametersError } from './error';
8
-
9
- /**
10
- * Listen to backtest session events.
11
- */
12
- export interface BacktesterListener {
13
- /**
14
- * Called once when backtest started.
15
- */
16
- onBacktestStarted?(streamer: BacktesterStreamer): void;
17
-
18
- /**
19
- * Called every time when backtest progress updated.
20
- */
21
- onBacktestUpdated?(streamer: BacktesterStreamer): void;
22
-
23
- /**
24
- * Called once when backtest completed.
25
- */
26
- onBacktestCompleted?(streamer: BacktesterStreamer): void;
27
- }
28
-
29
- export class BacktesterStreamer {
30
- private sequenceUpdateBatch = 10000;
31
- private cursor: Record<string, BacktesterCursor> = {};
32
- private stopAcquire = 1;
33
-
34
- timestamp: timestamp;
35
- sequence = 0;
36
-
37
- constructor(
38
- private readonly store: Store,
39
- private readonly feed: Feed,
40
- private readonly period: { from: number; to: number },
41
- private readonly listener?: BacktesterListener
42
- ) {
43
- if (period.from == undefined || period.to == undefined) {
44
- throw missingPeriodParametersError();
45
- }
46
-
47
- this.timestamp = period.from;
48
- }
49
-
50
- getTimeProvider(): AdapterTimeProvider {
51
- const provider = {
52
- timestamp: () => this.timestamp
53
- };
54
-
55
- return provider;
56
- }
57
-
58
- subscribe(instrument: InstrumentSelector) {
59
- if (instrument.id in this.cursor) {
60
- return;
61
- }
62
-
63
- const cursor = new BacktesterCursor(instrument, this.feed);
64
-
65
- this.cursor[instrument.id] = cursor;
66
- }
67
-
68
- /**
69
- * Increments stop counter.
70
- */
71
- stop() {
72
- this.stopAcquire++;
73
- }
74
-
75
- /**
76
- * Decreases stop counter and continues execution if no more stops requested.
77
- */
78
- tryContinue() {
79
- if (this.stopAcquire == 0) {
80
- return;
81
- }
82
-
83
- this.stopAcquire = Math.max(0, this.stopAcquire - 1);
84
-
85
- if (this.stopAcquire != 0) {
86
- return;
87
- }
88
-
89
- if (this.sequence == 0) {
90
- if (this.listener?.onBacktestStarted) {
91
- this.listener.onBacktestStarted(this);
92
- }
93
- }
94
-
95
- const next = async () => {
96
- if (await this.processNext()) {
97
- if (this.sequence % this.sequenceUpdateBatch == 0) {
98
- if (this.listener?.onBacktestUpdated) {
99
- this.listener.onBacktestUpdated(this);
100
- }
101
- }
102
-
103
- if (this.stopAcquire === 0) {
104
- setImmediate(next);
105
- }
106
- } else {
107
- if (this.listener?.onBacktestCompleted) {
108
- this.listener.onBacktestCompleted(this);
109
- }
110
- }
111
- };
112
-
113
- next();
114
- }
115
-
116
- private async processNext(): Promise<boolean> {
117
- const cursor = await this.current(this.timestamp, this.period.to);
118
- if (!cursor) {
119
- return false;
120
- }
121
-
122
- const event = cursor.peek();
123
-
124
- if (!event) {
125
- return false;
126
- }
127
-
128
- this.timestamp = event.timestamp;
129
- this.sequence++;
130
-
131
- this.store.dispatch(event);
132
-
133
- if (cursor.dequeue().timestamp != event.timestamp) {
134
- throw invalidEventSequenceError();
135
- }
136
-
137
- return true;
138
- }
139
-
140
- private async current(
141
- from: timestamp,
142
- to: timestamp
143
- ): Promise<BacktesterCursor | undefined> {
144
- for (const cursor of Object.values(this.cursor)) {
145
- if (cursor.size == 0 && !cursor.completed) {
146
- await cursor.fetchNextPage(from, to);
147
- }
148
- }
149
-
150
- return Object.values(this.cursor)
151
- .filter(it => it !== undefined)
152
- .sort((lhs, rhs) => (lhs?.peek()?.timestamp ?? 0) - (rhs?.peek()?.timestamp ?? 0))
153
- .find(() => true);
154
- }
155
- }
@@ -1,7 +0,0 @@
1
- export function missingPeriodParametersError() {
2
- return new Error('invalid backtest options, please provide from and to period.');
3
- }
4
-
5
- export function invalidEventSequenceError() {
6
- return new Error('invalid event to consume');
7
- }
@@ -1,2 +0,0 @@
1
- export * from './backtester-adapter';
2
- export * from './backtester-streamer';
@@ -1,13 +0,0 @@
1
- export function adapterNotFoundError(adapterName: string) {
2
- return new Error(
3
- `Unknown adapter: ${adapterName}. You should provide adapter in session descriptor.`
4
- );
5
- }
6
-
7
- export function noPaperEngineProvidedError() {
8
- return new Error('No paper engine provided.');
9
- }
10
-
11
- export function backtestPageNotEmpty() {
12
- return new Error('Backtest page is not empty');
13
- }
@@ -1,4 +0,0 @@
1
- export * from './adapter';
2
- export * from './adapter-aggregate';
3
- export * from './backtester';
4
- export * from './paper';