@quantform/core 0.6.6 → 0.7.0-beta.10

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/errored.d.ts +2 -0
  52. package/dist/errored.d.ts.map +1 -0
  53. package/dist/{domain/component.js → errored.js} +2 -0
  54. package/dist/exclude.d.ts +3 -0
  55. package/dist/exclude.d.ts.map +1 -0
  56. package/dist/exclude.js +8 -0
  57. package/dist/index.d.ts +25 -27
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +25 -66
  60. package/dist/{domain → instrument/commission}/commission.d.ts +1 -1
  61. package/dist/instrument/commission/commission.d.ts.map +1 -0
  62. package/dist/{domain → instrument/commission}/commission.js +2 -2
  63. package/dist/instrument/commission/commission.spec.d.ts +2 -0
  64. package/dist/instrument/commission/commission.spec.d.ts.map +1 -0
  65. package/dist/instrument/commission/commission.spec.js +30 -0
  66. package/dist/instrument/index.d.ts +3 -0
  67. package/dist/instrument/index.d.ts.map +1 -0
  68. package/dist/{adapter → instrument}/index.js +2 -4
  69. package/dist/{domain → instrument}/instrument.d.ts +4 -4
  70. package/dist/instrument/instrument.d.ts.map +1 -0
  71. package/dist/{domain → instrument}/instrument.js +8 -5
  72. package/dist/instrument/instrument.spec.d.ts +2 -0
  73. package/dist/instrument/instrument.spec.d.ts.map +1 -0
  74. package/dist/instrument/instrument.spec.js +51 -0
  75. package/dist/make-test-module.d.ts +13 -0
  76. package/dist/make-test-module.d.ts.map +1 -0
  77. package/dist/make-test-module.js +46 -0
  78. package/dist/module.d.ts +57 -0
  79. package/dist/module.d.ts.map +1 -0
  80. package/dist/module.js +136 -0
  81. package/dist/module.spec.d.ts +2 -0
  82. package/dist/module.spec.d.ts.map +1 -0
  83. package/dist/module.spec.js +86 -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 +53 -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/errored.ts +1 -0
  246. package/src/exclude.ts +9 -0
  247. package/src/index.ts +27 -80
  248. package/src/{domain → instrument/commission}/commission.spec.ts +4 -3
  249. package/src/{domain → instrument/commission}/commission.ts +1 -1
  250. package/src/instrument/index.ts +2 -0
  251. package/src/{domain → instrument}/instrument.spec.ts +11 -6
  252. package/src/{domain → instrument}/instrument.ts +12 -8
  253. package/src/make-test-module.ts +46 -0
  254. package/src/module.spec.ts +74 -0
  255. package/src/module.ts +156 -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 +60 -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,30 +0,0 @@
1
- import { Instrument } from '../domain';
2
- import { decimal } from '../shared';
3
- import { Component } from './component';
4
- export interface Liquidity {
5
- rate: decimal;
6
- quantity: decimal;
7
- next: this | undefined;
8
- }
9
- export declare const LiquidityAskComparer: (lhs: {
10
- rate: decimal;
11
- }, rhs: {
12
- rate: decimal;
13
- }) => number;
14
- export declare const LiquidityBidComparer: (lhs: {
15
- rate: decimal;
16
- }, rhs: {
17
- rate: decimal;
18
- }) => number;
19
- /**
20
- * Provides an access to pending buy and sell orders on the specific market.
21
- */
22
- export declare class Orderbook implements Component {
23
- timestamp: number;
24
- readonly instrument: Instrument;
25
- asks: Liquidity;
26
- bids: Liquidity;
27
- readonly id: string;
28
- constructor(timestamp: number, instrument: Instrument, asks: Liquidity, bids: Liquidity);
29
- }
30
- //# sourceMappingURL=orderbook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/domain/orderbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAChC,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAEhC;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IAIhC,SAAS,EAAE,MAAM;aACR,UAAU,EAAE,UAAU;IAC/B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IANxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAGX,SAAS,EAAE,MAAM,EACR,UAAU,EAAE,UAAU,EAC/B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS;CAIzB"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Orderbook = exports.LiquidityBidComparer = exports.LiquidityAskComparer = void 0;
4
- const LiquidityAskComparer = (lhs, rhs) => lhs.rate.comparedTo(rhs.rate);
5
- exports.LiquidityAskComparer = LiquidityAskComparer;
6
- const LiquidityBidComparer = (lhs, rhs) => rhs.rate.comparedTo(lhs.rate);
7
- exports.LiquidityBidComparer = LiquidityBidComparer;
8
- /**
9
- * Provides an access to pending buy and sell orders on the specific market.
10
- */
11
- class Orderbook {
12
- constructor(timestamp, instrument, asks, bids) {
13
- this.timestamp = timestamp;
14
- this.instrument = instrument;
15
- this.asks = asks;
16
- this.bids = bids;
17
- this.id = instrument.id;
18
- }
19
- }
20
- exports.Orderbook = Orderbook;
@@ -1,13 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { decimal } from '../shared';
3
- import { State } from '../store';
4
- import { Component } from './component';
5
- import { InstrumentSelector } from './instrument';
6
- import { Position } from './position';
7
- export declare function position(selector: InstrumentSelector): (source: Observable<Component>) => Observable<Readonly<Position>>;
8
- export declare function positions(selector: InstrumentSelector, state: State): (source: Observable<Component>) => Observable<Readonly<Position>[]>;
9
- export declare function flatten(): (source: Observable<Position[]>) => Observable<{
10
- size: decimal;
11
- rate: decimal;
12
- }>;
13
- //# sourceMappingURL=position-operator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"position-operator.d.ts","sourceRoot":"","sources":["../../src/domain/position-operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAoB,MAAM,MAAM,CAAC;AAEjE,OAAO,EAAK,OAAO,EAAgB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,YACnC,WAAW,SAAS,CAAC,oCAKtC;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,YAWlD,WAAW,SAAS,CAAC,sCAMtC;AAED,wBAAgB,OAAO,aAEX,WAAW,QAAQ,EAAE,CAAC,KAC7B,WAAW;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA+BhD"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.flatten = exports.positions = exports.position = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const shared_1 = require("../shared");
6
- const error_1 = require("./error");
7
- const position_1 = require("./position");
8
- function position(selector) {
9
- return (source) => source.pipe((0, rxjs_1.filter)(it => it instanceof position_1.Position && it.instrument.id == selector.id), (0, rxjs_1.map)(it => it));
10
- }
11
- exports.position = position;
12
- function positions(selector, state) {
13
- const balance = state.balance.get(selector.quote.id);
14
- if (!balance) {
15
- throw (0, error_1.invalidInstrumentSelectorError)(selector.id);
16
- }
17
- const getter = () => Object.values(balance.position)
18
- .filter(it => it.instrument.id == selector.id)
19
- .map(it => it);
20
- return (source) => source.pipe(position(selector), (0, rxjs_1.map)(() => getter()), (0, rxjs_1.startWith)(getter()));
21
- }
22
- exports.positions = positions;
23
- function flatten() {
24
- return function (source) {
25
- return source.pipe((0, rxjs_1.map)(it => {
26
- if (it.length > 1) {
27
- return {
28
- size: it.reduce((aggregate, position) => aggregate.add(position.size), shared_1.d.Zero),
29
- rate: (0, shared_1.weightedMean)(it.map(x => x.averageExecutionRate), it.map(x => x.size))
30
- };
31
- }
32
- if (it.length == 1) {
33
- return {
34
- size: it[0].size,
35
- rate: it[0].averageExecutionRate
36
- };
37
- }
38
- return {
39
- size: shared_1.d.Zero,
40
- rate: shared_1.d.Zero
41
- };
42
- }), (0, rxjs_1.share)());
43
- };
44
- }
45
- exports.flatten = flatten;
@@ -1,18 +0,0 @@
1
- import { Instrument } from '../domain';
2
- import { decimal } from '../shared';
3
- import { Component } from './component';
4
- export declare type PositionMode = 'CROSS' | 'ISOLATED';
5
- export declare class Position implements Component {
6
- timestamp: number;
7
- readonly id: string;
8
- readonly instrument: Instrument;
9
- readonly mode: PositionMode;
10
- averageExecutionRate: decimal;
11
- size: decimal;
12
- leverage: number;
13
- estimatedUnrealizedPnL?: decimal;
14
- get margin(): decimal;
15
- constructor(timestamp: number, id: string, instrument: Instrument, mode: PositionMode, averageExecutionRate: decimal, size: decimal, leverage: number);
16
- calculateEstimatedUnrealizedPnL(rate: decimal): decimal;
17
- }
18
- //# sourceMappingURL=position.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/domain/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,oBAAY,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,qBAAa,QAAS,YAAW,SAAS;IAQ/B,SAAS,EAAE,MAAM;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY;IACpB,oBAAoB,EAAE,OAAO;IAC7B,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,MAAM;IAbzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,IAAI,MAAM,IAAI,OAAO,CAEpB;gBAGQ,SAAS,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,YAAY,EACpB,oBAAoB,EAAE,OAAO,EAC7B,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM;IAGzB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAOxD"}
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Position = void 0;
4
- const shared_1 = require("../shared");
5
- class Position {
6
- constructor(timestamp, id, instrument, mode, averageExecutionRate, size, leverage) {
7
- this.timestamp = timestamp;
8
- this.id = id;
9
- this.instrument = instrument;
10
- this.mode = mode;
11
- this.averageExecutionRate = averageExecutionRate;
12
- this.size = size;
13
- this.leverage = leverage;
14
- }
15
- get margin() {
16
- return this.instrument.quote.floor(this.size.abs().div(this.leverage));
17
- }
18
- calculateEstimatedUnrealizedPnL(rate) {
19
- this.estimatedUnrealizedPnL = this.instrument.quote.floor((0, shared_1.pnl)(this.averageExecutionRate, rate, this.size));
20
- return this.estimatedUnrealizedPnL;
21
- }
22
- }
23
- exports.Position = Position;
@@ -1,54 +0,0 @@
1
- import { AdapterFactory, BacktesterListener, BacktesterStreamer } from '../adapter';
2
- import { decimal } from '../shared';
3
- import { StorageFactory } from '../storage';
4
- import { AssetSelector } from './asset';
5
- import { Session } from './session';
6
- export declare type SessionFeature = (builder: SessionBuilder) => void;
7
- export declare function deposit(selector: AssetSelector, amount: decimal): SessionFeature;
8
- export declare function period(from: Date, to?: Date): SessionFeature;
9
- export declare class SessionBuilder {
10
- id: number;
11
- adapter: AdapterFactory[];
12
- storage: StorageFactory;
13
- balance: Record<string, decimal>;
14
- period: {
15
- from: number;
16
- to: number;
17
- };
18
- /**
19
- * Unique session identifier, used to identify session in the storage.
20
- * You can generate new id every time you start the new session or provide
21
- * session id explicitly to resume previous session (in code or via CLI).
22
- * If you don't provide session id, it will generate new one based on time.
23
- */
24
- useSessionId(id: number): SessionBuilder;
25
- /**
26
- * Collection of adapters used to connect to the exchanges.
27
- */
28
- useAdapter(adapter: AdapterFactory): SessionBuilder;
29
- /**
30
- * Provides historical data for backtest, it's not required for live and paper
31
- * sessions. Stores session variables i.e. indicators, orders, or any other type of time
32
- * series data. You can install @quantform/editor to render this data in your browser.
33
- */
34
- useStorage(storage: StorageFactory): SessionBuilder;
35
- useBalance(selector: AssetSelector, amount: decimal): SessionBuilder;
36
- usePeriod(from: number, to: number): SessionBuilder;
37
- /**
38
- * Starts a new backtest session.
39
- * @param listener backtest event listener.
40
- * @returns new session object.
41
- */
42
- backtest(listener?: BacktesterListener): [Session, BacktesterStreamer];
43
- /**
44
- * Starts a new paper session.
45
- * @returns new session object.
46
- */
47
- paper(): Session;
48
- /**
49
- * Starts a new live session.
50
- * @returns new session object.
51
- */
52
- live(): Session;
53
- }
54
- //# sourceMappingURL=session-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-builder.d.ts","sourceRoot":"","sources":["../../src/domain/session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAKL,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oBAAY,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAE/D,wBAAgB,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc,CAIhF;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,cAAc,CAI5D;AAED,qBAAa,cAAc;IAClB,EAAE,EAAE,MAAM,CAAS;IACnB,OAAO,mBAA+B;IACtC,OAAO,EAAE,cAAc,CAA4B;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACtC,MAAM;;;MAGX;IAEF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;IAMxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAMnD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAMnD,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc;IAMpE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc;IAOnD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAyBtE;;;OAGG;IACH,KAAK,IAAI,OAAO;IAehB;;;OAGG;IACH,IAAI,IAAI,OAAO;CAchB"}
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionBuilder = exports.period = exports.deposit = void 0;
4
- const adapter_1 = require("../adapter");
5
- const shared_1 = require("../shared");
6
- const storage_1 = require("../storage");
7
- const store_1 = require("../store");
8
- const session_1 = require("./session");
9
- function deposit(selector, amount) {
10
- return (builder) => {
11
- builder.useBalance(selector, amount);
12
- };
13
- }
14
- exports.deposit = deposit;
15
- function period(from, to) {
16
- return (builder) => {
17
- var _a;
18
- builder.usePeriod(from.getTime(), (_a = to === null || to === void 0 ? void 0 : to.getTime()) !== null && _a !== void 0 ? _a : (0, shared_1.now)());
19
- };
20
- }
21
- exports.period = period;
22
- class SessionBuilder {
23
- constructor() {
24
- this.id = (0, shared_1.now)();
25
- this.adapter = new Array();
26
- this.storage = (0, storage_1.inMemoryStorageFactory)();
27
- this.balance = {};
28
- this.period = {
29
- from: 0,
30
- to: Number.MAX_VALUE
31
- };
32
- }
33
- /**
34
- * Unique session identifier, used to identify session in the storage.
35
- * You can generate new id every time you start the new session or provide
36
- * session id explicitly to resume previous session (in code or via CLI).
37
- * If you don't provide session id, it will generate new one based on time.
38
- */
39
- useSessionId(id) {
40
- this.id = id;
41
- return this;
42
- }
43
- /**
44
- * Collection of adapters used to connect to the exchanges.
45
- */
46
- useAdapter(adapter) {
47
- this.adapter.push(adapter);
48
- return this;
49
- }
50
- /**
51
- * Provides historical data for backtest, it's not required for live and paper
52
- * sessions. Stores session variables i.e. indicators, orders, or any other type of time
53
- * series data. You can install @quantform/editor to render this data in your browser.
54
- */
55
- useStorage(storage) {
56
- this.storage = storage;
57
- return this;
58
- }
59
- useBalance(selector, amount) {
60
- this.balance[selector.id] = amount;
61
- return this;
62
- }
63
- usePeriod(from, to) {
64
- this.period.from = from;
65
- this.period.to = to;
66
- return this;
67
- }
68
- /**
69
- * Starts a new backtest session.
70
- * @param listener backtest event listener.
71
- * @returns new session object.
72
- */
73
- backtest(listener) {
74
- const store = new store_1.Store();
75
- const feed = new storage_1.Feed(this.storage('feed'));
76
- const cache = new storage_1.Cache(this.storage('cache'));
77
- const measurement = new storage_1.Measurement(this.storage('measurement'));
78
- const streamer = new adapter_1.BacktesterStreamer(store, feed, this.period, listener);
79
- const aggregate = new adapter_1.AdapterAggregate(this.adapter.map(it => (0, adapter_1.createBacktesterAdapterFactory)((0, adapter_1.createPaperAdapterFactory)(it, { balance: this.balance }), streamer)), streamer.getTimeProvider(), store, cache);
80
- const session = new session_1.Session(this.id, store, aggregate, measurement);
81
- return [session, streamer];
82
- }
83
- /**
84
- * Starts a new paper session.
85
- * @returns new session object.
86
- */
87
- paper() {
88
- const store = new store_1.Store();
89
- const cache = new storage_1.Cache(this.storage('cache'));
90
- const measurement = new storage_1.Measurement(this.storage('measurement'));
91
- const aggregate = new adapter_1.AdapterAggregate(this.adapter.map(it => (0, adapter_1.createPaperAdapterFactory)(it, { balance: this.balance })), adapter_1.DefaultTimeProvider, store, cache);
92
- return new session_1.Session(this.id, store, aggregate, measurement);
93
- }
94
- /**
95
- * Starts a new live session.
96
- * @returns new session object.
97
- */
98
- live() {
99
- const store = new store_1.Store();
100
- const cache = new storage_1.Cache(this.storage('cache'));
101
- const measurement = new storage_1.Measurement(this.storage('measurement'));
102
- const aggregate = new adapter_1.AdapterAggregate(this.adapter, adapter_1.DefaultTimeProvider, store, cache);
103
- return new session_1.Session(this.id, store, aggregate, measurement);
104
- }
105
- }
106
- exports.SessionBuilder = SessionBuilder;
@@ -1,77 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { AdapterAggregate } from '../adapter/adapter-aggregate';
3
- import { AssetSelector, Balance, Instrument, InstrumentSelector, Ohlc, Order, Orderbook, Position, Trade } from '../domain';
4
- import { decimal } from '../shared';
5
- import { Measurement } from '../storage';
6
- import { Store } from '../store';
7
- declare type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
8
- export declare class Session {
9
- readonly id: number;
10
- readonly store: Store;
11
- readonly aggregate: AdapterAggregate;
12
- readonly measurement: Measurement | undefined;
13
- private initialized;
14
- get timestamp(): number;
15
- constructor(id: number, store: Store, aggregate: AdapterAggregate, measurement: Measurement | undefined);
16
- awake(): Promise<void>;
17
- dispose(): Promise<void>;
18
- /**
19
- * Subscribes to specific instrument. Usually forces adapter to subscribe
20
- * for orderbook and ticker streams.
21
- */
22
- subscribe(instrument: Array<InstrumentSelector>): Promise<void>;
23
- /**
24
- * Opens a new order.
25
- */
26
- open(order: {
27
- instrument: InstrumentSelector;
28
- quantity: decimal;
29
- rate?: decimal;
30
- }): Observable<Readonly<Order>>;
31
- /**
32
- * Cancels specific order.
33
- */
34
- cancel(order: Order): Observable<Readonly<Order>>;
35
- /**
36
- * Subscribes to specific instrument changes.
37
- * When adapter awake then it will fetch collection of all available instruments.
38
- */
39
- instrument(selector: InstrumentSelector): Observable<Readonly<Instrument>>;
40
- /**
41
- * Subscribes to instruments changes.
42
- * When adapter awake then it will fetch collection of all available instruments.
43
- */
44
- instruments(): Observable<Readonly<Instrument[]>>;
45
- /**
46
- * Subscribes to balance changes.
47
- */
48
- balance(selector: AssetSelector): Observable<Readonly<Balance>>;
49
- /**
50
- * Subscribes to trade/ticker changes.
51
- */
52
- trade(selector: InstrumentSelector): Observable<Readonly<Trade>>;
53
- /**
54
- * Subscribes to orderbook changes.
55
- * Right now you can access only best bid and best ask.
56
- */
57
- orderbook(selector: InstrumentSelector): Observable<Readonly<Orderbook>>;
58
- /**
59
- * Subscribes to position on leveraged market.
60
- */
61
- position(selector: InstrumentSelector): Observable<Readonly<Position>>;
62
- /**
63
- * Subscribes to positions on leveraged markets.
64
- */
65
- positions(selector: InstrumentSelector): Observable<Readonly<Position[]>>;
66
- order(selector: InstrumentSelector): Observable<Readonly<Order>>;
67
- orders(selector: InstrumentSelector): Observable<Readonly<Order[]>>;
68
- history(selector: InstrumentSelector, timeframe: number, length: number): Observable<Readonly<Ohlc>>;
69
- measure<T extends {
70
- timestamp: number;
71
- }>(spec: {
72
- kind: string;
73
- timestamp?: number;
74
- }, defaultValue?: Optional<T, 'timestamp'>): [Observable<T>, (value: T) => void];
75
- }
76
- export {};
77
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/domain/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,UAAU,EAQX,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,kBAAkB,EAElB,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,KAAK,EACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAQjC,aAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE9D,qBAAa,OAAO;IAQhB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,SAAS,EAAE,gBAAgB;IACpC,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;IAV/C,OAAO,CAAC,WAAW,CAAS;IAE5B,IAAI,SAAS,IAAI,MAAM,CAEtB;gBAGU,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,WAAW,GAAG,SAAS;IAGzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE;QACV,UAAU,EAAE,kBAAkB,CAAC;QAC/B,QAAQ,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAuB/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAMjD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAM1E;;;OAGG;IACH,WAAW,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAIjD;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAI/D;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAMhE;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAMxE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAMtE;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAMzE,KAAK,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAMhE,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAMnE,OAAO,CACL,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAW7B,OAAO,CAAC,CAAC,SAAS;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EACrC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,EACD,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,GACtC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAiCvC"}
@@ -1,162 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Session = void 0;
13
- const rxjs_1 = require("rxjs");
14
- const uuid_1 = require("uuid");
15
- const domain_1 = require("../domain");
16
- const balance_operator_1 = require("./balance-operator");
17
- const instrument_operator_1 = require("./instrument-operator");
18
- const order_operator_1 = require("./order-operator");
19
- const orderbook_operator_1 = require("./orderbook-operator");
20
- const position_operator_1 = require("./position-operator");
21
- const trade_operator_1 = require("./trade-operator");
22
- class Session {
23
- constructor(id, store, aggregate, measurement) {
24
- this.id = id;
25
- this.store = store;
26
- this.aggregate = aggregate;
27
- this.measurement = measurement;
28
- this.initialized = false;
29
- }
30
- get timestamp() {
31
- return this.store.snapshot.timestamp;
32
- }
33
- awake() {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- if (this.initialized) {
36
- return;
37
- }
38
- this.initialized = true;
39
- // awake all adapters and synchronize trading accounts with store.
40
- yield this.aggregate.awake();
41
- });
42
- }
43
- dispose() {
44
- return __awaiter(this, void 0, void 0, function* () {
45
- if (!this.initialized) {
46
- return;
47
- }
48
- this.store.dispose();
49
- yield this.aggregate.dispose();
50
- this.initialized = false;
51
- });
52
- }
53
- /**
54
- * Subscribes to specific instrument. Usually forces adapter to subscribe
55
- * for orderbook and ticker streams.
56
- */
57
- subscribe(instrument) {
58
- return this.aggregate.subscribe(instrument);
59
- }
60
- /**
61
- * Opens a new order.
62
- */
63
- open(order) {
64
- const instrument = this.store.snapshot.universe.instrument.get(order.instrument.id);
65
- if (!instrument) {
66
- throw (0, domain_1.invalidInstrumentSelectorError)(order.instrument.id);
67
- }
68
- const newOrder = new domain_1.Order(this.timestamp, (0, uuid_1.v4)(), instrument, order.quantity, this.timestamp, order.rate);
69
- return (0, rxjs_1.of)(newOrder).pipe((0, rxjs_1.switchMap)(() => this.aggregate.open(newOrder)), (0, rxjs_1.switchMap)(() => this.order(order.instrument).pipe((0, rxjs_1.filter)(it => it.id == newOrder.id))));
70
- }
71
- /**
72
- * Cancels specific order.
73
- */
74
- cancel(order) {
75
- return (0, rxjs_1.defer)(() => (0, rxjs_1.from)(this.aggregate.cancel(order))).pipe((0, rxjs_1.switchMap)(() => this.order(order.instrument).pipe((0, rxjs_1.filter)(it => it.id == order.id))));
76
- }
77
- /**
78
- * Subscribes to specific instrument changes.
79
- * When adapter awake then it will fetch collection of all available instruments.
80
- */
81
- instrument(selector) {
82
- this.subscribe([selector]);
83
- return this.store.changes$.pipe((0, instrument_operator_1.instrument)(selector, this.store.snapshot));
84
- }
85
- /**
86
- * Subscribes to instruments changes.
87
- * When adapter awake then it will fetch collection of all available instruments.
88
- */
89
- instruments() {
90
- return this.store.changes$.pipe((0, instrument_operator_1.instruments)(this.store.snapshot));
91
- }
92
- /**
93
- * Subscribes to balance changes.
94
- */
95
- balance(selector) {
96
- return this.store.changes$.pipe((0, balance_operator_1.balance)(selector, this.store.snapshot));
97
- }
98
- /**
99
- * Subscribes to trade/ticker changes.
100
- */
101
- trade(selector) {
102
- this.subscribe([selector]);
103
- return this.store.changes$.pipe((0, trade_operator_1.trade)(selector, this.store.snapshot));
104
- }
105
- /**
106
- * Subscribes to orderbook changes.
107
- * Right now you can access only best bid and best ask.
108
- */
109
- orderbook(selector) {
110
- this.subscribe([selector]);
111
- return this.store.changes$.pipe((0, orderbook_operator_1.orderbook)(selector, this.store.snapshot));
112
- }
113
- /**
114
- * Subscribes to position on leveraged market.
115
- */
116
- position(selector) {
117
- this.subscribe([selector]);
118
- return this.store.changes$.pipe((0, position_operator_1.position)(selector));
119
- }
120
- /**
121
- * Subscribes to positions on leveraged markets.
122
- */
123
- positions(selector) {
124
- this.subscribe([selector]);
125
- return this.store.changes$.pipe((0, position_operator_1.positions)(selector, this.store.snapshot));
126
- }
127
- order(selector) {
128
- this.subscribe([selector]);
129
- return this.store.changes$.pipe((0, order_operator_1.order)(selector));
130
- }
131
- orders(selector) {
132
- this.subscribe([selector]);
133
- return this.store.changes$.pipe((0, order_operator_1.orders)(selector, this.store.snapshot));
134
- }
135
- history(selector, timeframe, length) {
136
- return this.store.changes$.pipe((0, rxjs_1.startWith)(this.store.snapshot.universe.instrument.get(selector.id)), (0, rxjs_1.filter)(it => it instanceof domain_1.Instrument && it.id == selector.id), (0, rxjs_1.switchMap)(() => (0, rxjs_1.from)(this.aggregate.history(selector, timeframe, length))), (0, rxjs_1.take)(1), (0, rxjs_1.shareReplay)(), (0, rxjs_1.mergeMap)(it => it));
137
- }
138
- measure(spec, defaultValue) {
139
- var _a;
140
- if (!this.measurement) {
141
- throw new Error();
142
- }
143
- const changes$ = new rxjs_1.ReplaySubject();
144
- const persisted$ = (0, rxjs_1.from)(this.measurement.query(this.id, {
145
- to: (_a = spec.timestamp) !== null && _a !== void 0 ? _a : this.timestamp,
146
- kind: spec.kind,
147
- count: 1
148
- })).pipe((0, rxjs_1.map)(it => it.length ? Object.assign({ timestamp: it[0].timestamp }, it[0].payload) : defaultValue), (0, rxjs_1.share)());
149
- const setter = (value) => {
150
- var _a, _b;
151
- const timestamp = (_a = value.timestamp) !== null && _a !== void 0 ? _a : this.timestamp;
152
- const measure = { timestamp, kind: spec.kind, payload: value };
153
- (_b = this.measurement) === null || _b === void 0 ? void 0 : _b.save(this.id, [measure]);
154
- changes$.next(Object.assign(Object.assign({}, value), { timestamp }));
155
- };
156
- return [
157
- (0, rxjs_1.concat)(persisted$, changes$.asObservable()).pipe((0, rxjs_1.filter)(it => it !== undefined)),
158
- setter
159
- ];
160
- }
161
- }
162
- exports.Session = Session;
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeframe.d.ts","sourceRoot":"","sources":["../../src/domain/timeframe.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,MAAM,CAAC,EAAE,SAAQ;IACjB,MAAM,CAAC,EAAE,SAAqB;IAC9B,MAAM,CAAC,EAAE,SAAoB;IAC7B,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,GAAG,SAAqB;IAC/B,MAAM,CAAC,EAAE,SAAqB;IAC9B,MAAM,CAAC,EAAE,SAAoB;IAC7B,MAAM,CAAC,EAAE,SAAoB;IAC7B,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,EAAE,SAAqB;IAC9B,MAAM,CAAC,EAAE,SAAoB;CAC9B;AAED,wBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D"}
@@ -1,7 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { State } from '../store';
3
- import { Component } from './component';
4
- import { InstrumentSelector } from './instrument';
5
- import { Trade } from './trade';
6
- export declare function trade(selector: InstrumentSelector, state: State): (source$: Observable<Component>) => Observable<Trade>;
7
- //# sourceMappingURL=trade-operator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trade-operator.d.ts","sourceRoot":"","sources":["../../src/domain/trade-operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAa,MAAM,MAAM,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,wBAAgB,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,aAC7C,WAAW,SAAS,CAAC,uBAMvC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trade = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const trade_1 = require("./trade");
6
- function trade(selector, state) {
7
- return (source$) => source$.pipe((0, rxjs_1.startWith)(state.trade.get(selector.id)), (0, rxjs_1.filter)(it => it instanceof trade_1.Trade && it.instrument.id == selector.id), (0, rxjs_1.map)(it => it));
8
- }
9
- exports.trade = trade;
@@ -1,16 +0,0 @@
1
- import { decimal } from '../shared';
2
- import { Instrument } from '.';
3
- import { Component } from './component';
4
- /**
5
- * Simple trade or ticker executed on the market, it's a match of buyer
6
- * and seller of the same asset.
7
- */
8
- export declare class Trade implements Component {
9
- timestamp: number;
10
- readonly instrument: Instrument;
11
- rate: decimal;
12
- quantity: decimal;
13
- readonly id: string;
14
- constructor(timestamp: number, instrument: Instrument, rate: decimal, quantity: decimal);
15
- }
16
- //# sourceMappingURL=trade.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/domain/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,KAAM,YAAW,SAAS;IAI5B,SAAS,EAAE,MAAM;aACR,UAAU,EAAE,UAAU;IAC/B,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,OAAO;IAN1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAGX,SAAS,EAAE,MAAM,EACR,UAAU,EAAE,UAAU,EAC/B,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,OAAO;CAI3B"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Trade = void 0;
4
- /**
5
- * Simple trade or ticker executed on the market, it's a match of buyer
6
- * and seller of the same asset.
7
- */
8
- class Trade {
9
- constructor(timestamp, instrument, rate, quantity) {
10
- this.timestamp = timestamp;
11
- this.instrument = instrument;
12
- this.rate = rate;
13
- this.quantity = quantity;
14
- this.id = instrument.id;
15
- }
16
- }
17
- exports.Trade = Trade;