@quantform/core 0.5.23 → 0.6.5

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 (557) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/adapter/adapter-aggregate.d.ts +38 -3
  3. package/dist/adapter/adapter-aggregate.d.ts.map +1 -0
  4. package/dist/adapter/adapter-aggregate.js +109 -50
  5. package/dist/adapter/adapter.d.ts +27 -2
  6. package/dist/adapter/adapter.d.ts.map +1 -0
  7. package/dist/adapter/adapter.js +4 -1
  8. package/dist/adapter/backtester/backtester-adapter.d.ts +3 -2
  9. package/dist/adapter/backtester/backtester-adapter.d.ts.map +1 -0
  10. package/dist/adapter/backtester/backtester-adapter.js +26 -13
  11. package/dist/adapter/backtester/backtester-cursor.d.ts +2 -1
  12. package/dist/adapter/backtester/backtester-cursor.d.ts.map +1 -0
  13. package/dist/adapter/backtester/backtester-cursor.js +24 -14
  14. package/dist/adapter/backtester/backtester-streamer.d.ts +20 -1
  15. package/dist/adapter/backtester/backtester-streamer.d.ts.map +1 -0
  16. package/dist/adapter/backtester/backtester-streamer.js +54 -30
  17. package/dist/adapter/backtester/error.d.ts +3 -0
  18. package/dist/adapter/backtester/error.d.ts.map +1 -0
  19. package/dist/adapter/backtester/error.js +11 -0
  20. package/dist/adapter/backtester/index.d.ts +1 -0
  21. package/dist/adapter/backtester/index.d.ts.map +1 -0
  22. package/dist/adapter/backtester/index.js +0 -1
  23. package/dist/adapter/error.d.ts +2 -0
  24. package/dist/adapter/error.d.ts.map +1 -0
  25. package/dist/adapter/error.js +5 -2
  26. package/dist/adapter/index.d.ts +1 -0
  27. package/dist/adapter/index.d.ts.map +1 -0
  28. package/dist/adapter/index.js +0 -1
  29. package/dist/adapter/paper/engine/paper-engine.d.ts +1 -0
  30. package/dist/adapter/paper/engine/paper-engine.d.ts.map +1 -0
  31. package/dist/adapter/paper/engine/paper-engine.js +18 -13
  32. package/dist/adapter/paper/index.d.ts +1 -0
  33. package/dist/adapter/paper/index.d.ts.map +1 -0
  34. package/dist/adapter/paper/index.js +0 -1
  35. package/dist/adapter/paper/paper-adapter.d.ts +6 -5
  36. package/dist/adapter/paper/paper-adapter.d.ts.map +1 -0
  37. package/dist/adapter/paper/paper-adapter.js +44 -21
  38. package/dist/cli/build.d.ts +1 -0
  39. package/dist/cli/build.d.ts.map +1 -0
  40. package/dist/cli/build.js +18 -8
  41. package/dist/cli/dev.d.ts +1 -0
  42. package/dist/cli/dev.d.ts.map +1 -0
  43. package/dist/cli/dev.js +52 -12
  44. package/dist/cli/error.d.ts +2 -0
  45. package/dist/cli/error.d.ts.map +1 -0
  46. package/dist/cli/error.js +7 -0
  47. package/dist/cli/index.d.ts +1 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +21 -10
  50. package/dist/cli/internal/workspace.d.ts +1 -7
  51. package/dist/cli/internal/workspace.d.ts.map +1 -0
  52. package/dist/cli/internal/workspace.js +1 -6
  53. package/dist/cli/pull.d.ts +1 -0
  54. package/dist/cli/pull.d.ts.map +1 -0
  55. package/dist/cli/pull.js +68 -38
  56. package/dist/cli/run.d.ts +2 -1
  57. package/dist/cli/run.d.ts.map +1 -0
  58. package/dist/cli/run.js +52 -14
  59. package/dist/cli/test.d.ts +2 -1
  60. package/dist/cli/test.d.ts.map +1 -0
  61. package/dist/cli/test.js +59 -34
  62. package/dist/domain/asset.d.ts +17 -1
  63. package/dist/domain/asset.d.ts.map +1 -0
  64. package/dist/domain/asset.js +16 -4
  65. package/dist/domain/{balance.operator.d.ts → balance-operator.d.ts} +1 -0
  66. package/dist/domain/balance-operator.d.ts.map +1 -0
  67. package/dist/domain/{balance.operator.js → balance-operator.js} +0 -1
  68. package/dist/domain/balance.d.ts +27 -5
  69. package/dist/domain/balance.d.ts.map +1 -0
  70. package/dist/domain/balance.js +31 -7
  71. package/dist/domain/commission.d.ts +2 -0
  72. package/dist/domain/commission.d.ts.map +1 -0
  73. package/dist/domain/commission.js +2 -1
  74. package/dist/domain/component.d.ts +1 -1
  75. package/dist/domain/component.d.ts.map +1 -0
  76. package/dist/domain/component.js +0 -1
  77. package/dist/domain/error.d.ts +4 -3
  78. package/dist/domain/error.d.ts.map +1 -0
  79. package/dist/domain/error.js +3 -4
  80. package/dist/domain/index.d.ts +10 -8
  81. package/dist/domain/index.d.ts.map +1 -0
  82. package/dist/domain/index.js +9 -9
  83. package/dist/domain/{instrument.operator.d.ts → instrument-operator.d.ts} +1 -0
  84. package/dist/domain/instrument-operator.d.ts.map +1 -0
  85. package/dist/domain/{instrument.operator.js → instrument-operator.js} +0 -1
  86. package/dist/domain/instrument.d.ts +8 -7
  87. package/dist/domain/instrument.d.ts.map +1 -0
  88. package/dist/domain/instrument.js +7 -7
  89. package/dist/domain/ohlc-operator.d.ts +11 -0
  90. package/dist/domain/ohlc-operator.d.ts.map +1 -0
  91. package/dist/domain/{candle.operator.js → ohlc-operator.js} +21 -15
  92. package/dist/domain/{candle.d.ts → ohlc.d.ts} +4 -3
  93. package/dist/domain/ohlc.d.ts.map +1 -0
  94. package/dist/domain/{candle.js → ohlc.js} +3 -4
  95. package/dist/domain/{order.operator.d.ts → order-operator.d.ts} +1 -0
  96. package/dist/domain/order-operator.d.ts.map +1 -0
  97. package/dist/domain/order-operator.js +16 -0
  98. package/dist/domain/order.d.ts +14 -21
  99. package/dist/domain/order.d.ts.map +1 -0
  100. package/dist/domain/order.js +16 -32
  101. package/dist/domain/{orderbook.operator.d.ts → orderbook-operator.d.ts} +1 -0
  102. package/dist/domain/orderbook-operator.d.ts.map +1 -0
  103. package/dist/domain/{orderbook.operator.js → orderbook-operator.js} +0 -1
  104. package/dist/domain/orderbook.d.ts +9 -7
  105. package/dist/domain/orderbook.d.ts.map +1 -0
  106. package/dist/domain/orderbook.js +7 -6
  107. package/dist/domain/{position.operator.d.ts → position-operator.d.ts} +4 -2
  108. package/dist/domain/position-operator.d.ts.map +1 -0
  109. package/dist/domain/{position.operator.js → position-operator.js} +10 -3
  110. package/dist/domain/position.d.ts +4 -5
  111. package/dist/domain/position.d.ts.map +1 -0
  112. package/dist/domain/position.js +2 -6
  113. package/dist/domain/session-builder.d.ts +54 -0
  114. package/dist/domain/session-builder.d.ts.map +1 -0
  115. package/dist/domain/session-builder.js +106 -0
  116. package/dist/domain/session.d.ts +56 -15
  117. package/dist/domain/session.d.ts.map +1 -0
  118. package/dist/domain/session.js +103 -39
  119. package/dist/domain/timeframe.d.ts +1 -0
  120. package/dist/domain/timeframe.d.ts.map +1 -0
  121. package/dist/domain/timeframe.js +0 -1
  122. package/dist/domain/{trade.operator.d.ts → trade-operator.d.ts} +1 -0
  123. package/dist/domain/trade-operator.d.ts.map +1 -0
  124. package/dist/domain/{trade.operator.js → trade-operator.js} +0 -1
  125. package/dist/domain/trade.d.ts +9 -6
  126. package/dist/domain/trade.d.ts.map +1 -0
  127. package/dist/domain/trade.js +8 -6
  128. package/dist/index.d.ts +25 -2
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +63 -3
  131. package/dist/shared/collections.d.ts +9 -6
  132. package/dist/shared/collections.d.ts.map +1 -0
  133. package/dist/shared/collections.js +21 -13
  134. package/dist/shared/datetime.d.ts +1 -0
  135. package/dist/shared/datetime.d.ts.map +1 -0
  136. package/dist/shared/datetime.js +0 -1
  137. package/dist/shared/decimals.d.ts +13 -0
  138. package/dist/shared/decimals.d.ts.map +1 -0
  139. package/dist/shared/decimals.js +12 -1
  140. package/dist/shared/environment.d.ts +3 -0
  141. package/dist/shared/environment.d.ts.map +1 -0
  142. package/dist/shared/environment.js +15 -0
  143. package/dist/shared/index.d.ts +2 -1
  144. package/dist/shared/index.d.ts.map +1 -0
  145. package/dist/shared/index.js +1 -2
  146. package/dist/shared/logger.d.ts +6 -7
  147. package/dist/shared/logger.d.ts.map +1 -0
  148. package/dist/shared/logger.js +27 -8
  149. package/dist/shared/pipe.d.ts +1 -0
  150. package/dist/shared/pipe.d.ts.map +1 -0
  151. package/dist/shared/pipe.js +0 -1
  152. package/dist/shared/policy.d.ts +1 -0
  153. package/dist/shared/policy.d.ts.map +1 -0
  154. package/dist/shared/policy.js +0 -1
  155. package/dist/storage/cache.d.ts +1 -0
  156. package/dist/storage/cache.d.ts.map +1 -0
  157. package/dist/storage/cache.js +30 -19
  158. package/dist/storage/feed.d.ts +25 -0
  159. package/dist/storage/feed.d.ts.map +1 -0
  160. package/dist/storage/feed.js +56 -19
  161. package/dist/storage/index.d.ts +1 -0
  162. package/dist/storage/index.d.ts.map +1 -0
  163. package/dist/storage/index.js +0 -1
  164. package/dist/storage/measurement.d.ts +20 -0
  165. package/dist/storage/measurement.d.ts.map +1 -0
  166. package/dist/storage/measurement.js +41 -10
  167. package/dist/storage/storage.d.ts +41 -0
  168. package/dist/storage/storage.d.ts.map +1 -0
  169. package/dist/storage/storage.js +69 -33
  170. package/dist/store/error.d.ts +9 -0
  171. package/dist/store/error.d.ts.map +1 -0
  172. package/dist/store/error.js +31 -0
  173. package/dist/store/index.d.ts +8 -7
  174. package/dist/store/index.d.ts.map +1 -0
  175. package/dist/store/index.js +7 -8
  176. package/dist/store/{store-balance.event.d.ts → store-balance-event.d.ts} +14 -1
  177. package/dist/store/store-balance-event.d.ts.map +1 -0
  178. package/dist/store/{store-balance.event.js → store-balance-event.js} +54 -10
  179. package/dist/store/{store.event.d.ts → store-event.d.ts} +1 -0
  180. package/dist/store/store-event.d.ts.map +1 -0
  181. package/dist/store/{store.event.js → store-event.js} +0 -1
  182. package/dist/store/{store-instrument.event.d.ts → store-instrument-event.d.ts} +5 -4
  183. package/dist/store/store-instrument-event.d.ts.map +1 -0
  184. package/dist/store/{store-instrument.event.js → store-instrument-event.js} +13 -5
  185. package/dist/store/{store-order.event.d.ts → store-order-event.d.ts} +7 -2
  186. package/dist/store/store-order-event.d.ts.map +1 -0
  187. package/dist/store/{store-order.event.js → store-order-event.js} +24 -20
  188. package/dist/store/{store-orderbook.event.d.ts → store-orderbook-event.d.ts} +2 -1
  189. package/dist/store/store-orderbook-event.d.ts.map +1 -0
  190. package/dist/store/{store-orderbook.event.js → store-orderbook-event.js} +6 -5
  191. package/dist/store/{store-position.event.d.ts → store-position-event.d.ts} +3 -2
  192. package/dist/store/store-position-event.d.ts.map +1 -0
  193. package/dist/store/{store-position.event.js → store-position-event.js} +13 -6
  194. package/dist/store/store-state.d.ts +3 -2
  195. package/dist/store/store-state.d.ts.map +1 -0
  196. package/dist/store/store-state.js +1 -1
  197. package/dist/store/{store-trade.event.d.ts → store-trade-event.d.ts} +6 -1
  198. package/dist/store/store-trade-event.d.ts.map +1 -0
  199. package/dist/store/{store-trade.event.js → store-trade-event.js} +12 -3
  200. package/dist/store/store.d.ts +2 -1
  201. package/dist/store/store.d.ts.map +1 -0
  202. package/dist/store/store.js +0 -1
  203. package/jest.config.ts +13 -0
  204. package/package.json +19 -32
  205. package/src/adapter/adapter-aggregate.ts +42 -21
  206. package/src/adapter/adapter.ts +3 -3
  207. package/src/adapter/backtester/backtester-adapter.ts +2 -4
  208. package/src/adapter/backtester/backtester-cursor.ts +1 -1
  209. package/src/adapter/backtester/backtester-streamer.spec.ts +5 -3
  210. package/src/adapter/backtester/backtester-streamer.ts +16 -8
  211. package/src/adapter/backtester/error.ts +7 -0
  212. package/src/adapter/error.ts +4 -0
  213. package/src/adapter/paper/engine/paper-engine.spec.ts +38 -21
  214. package/src/adapter/paper/engine/paper-engine.ts +44 -35
  215. package/src/adapter/paper/paper-adapter.ts +15 -6
  216. package/src/cli/build.ts +1 -1
  217. package/src/cli/dev.ts +15 -7
  218. package/src/cli/error.ts +5 -0
  219. package/src/cli/internal/workspace.ts +0 -11
  220. package/src/cli/pull.ts +22 -31
  221. package/src/cli/run.ts +14 -11
  222. package/src/cli/test.ts +24 -37
  223. package/src/domain/asset.ts +1 -8
  224. package/src/domain/{balance.operator.spec.ts → balance-operator.spec.ts} +4 -3
  225. package/src/domain/{balance.operator.ts → balance-operator.ts} +0 -0
  226. package/src/domain/balance.spec.ts +15 -12
  227. package/src/domain/balance.ts +7 -11
  228. package/src/domain/commission.ts +3 -1
  229. package/src/domain/component.ts +0 -1
  230. package/src/domain/error.ts +3 -3
  231. package/src/domain/index.ts +9 -8
  232. package/src/domain/{instrument.operator.spec.ts → instrument-operator.spec.ts} +9 -2
  233. package/src/domain/{instrument.operator.ts → instrument-operator.ts} +0 -0
  234. package/src/domain/instrument.spec.ts +8 -1
  235. package/src/domain/instrument.ts +10 -12
  236. package/src/domain/ohlc-operator.spec.ts +126 -0
  237. package/src/domain/{candle.operator.ts → ohlc-operator.ts} +33 -17
  238. package/src/domain/{candle.spec.ts → ohlc.spec.ts} +6 -6
  239. package/src/domain/{candle.ts → ohlc.ts} +2 -2
  240. package/src/domain/{order.operator.spec.ts → order-operator.spec.ts} +9 -6
  241. package/src/domain/{order.operator.ts → order-operator.ts} +2 -2
  242. package/src/domain/order.spec.ts +8 -9
  243. package/src/domain/order.ts +21 -56
  244. package/src/domain/{orderbook.operator.spec.ts → orderbook-operator.spec.ts} +15 -3
  245. package/src/domain/{orderbook.operator.ts → orderbook-operator.ts} +0 -0
  246. package/src/domain/orderbook.spec.ts +11 -2
  247. package/src/domain/orderbook.ts +9 -13
  248. package/src/domain/{position.operator.spec.ts → position-operator.spec.ts} +11 -6
  249. package/src/domain/{position.operator.ts → position-operator.ts} +13 -6
  250. package/src/domain/position.spec.ts +7 -4
  251. package/src/domain/position.ts +2 -7
  252. package/src/domain/session-builder.ts +158 -0
  253. package/src/domain/session.spec.ts +2 -9
  254. package/src/domain/session.ts +86 -71
  255. package/src/domain/{trade.operator.spec.ts → trade-operator.spec.ts} +7 -3
  256. package/src/domain/{trade.operator.ts → trade-operator.ts} +0 -0
  257. package/src/domain/trade.spec.ts +6 -2
  258. package/src/domain/trade.ts +8 -11
  259. package/src/index.ts +75 -2
  260. package/src/shared/collections.spec.ts +10 -6
  261. package/src/shared/collections.ts +29 -16
  262. package/src/shared/environment.ts +13 -0
  263. package/src/shared/index.ts +1 -1
  264. package/src/shared/logger.ts +37 -7
  265. package/src/shared/pipe.ts +1 -1
  266. package/src/storage/cache.ts +3 -1
  267. package/src/storage/feed.ts +2 -0
  268. package/src/storage/storage.ts +10 -8
  269. package/src/store/error.ts +36 -0
  270. package/src/store/index.ts +7 -7
  271. package/src/store/{store-balance.event.spec.ts → store-balance-event.spec.ts} +3 -3
  272. package/src/store/{store-balance.event.ts → store-balance-event.ts} +54 -11
  273. package/src/store/{store.event.ts → store-event.ts} +0 -0
  274. package/src/store/{store-instrument.event.spec.ts → store-instrument-event.spec.ts} +6 -5
  275. package/src/store/{store-instrument.event.ts → store-instrument-event.ts} +17 -6
  276. package/src/store/store-order-event.spec.ts +32 -0
  277. package/src/store/{store-order.event.ts → store-order-event.ts} +25 -20
  278. package/src/store/{store-orderbook.event.spec.ts → store-orderbook-event.spec.ts} +11 -9
  279. package/src/store/{store-orderbook.event.ts → store-orderbook-event.ts} +7 -5
  280. package/src/store/{store-position.event.ts → store-position-event.ts} +14 -7
  281. package/src/store/store-state.ts +3 -3
  282. package/src/store/{store-trade.event.spec.ts → store-trade-event.spec.ts} +7 -5
  283. package/src/store/{store-trade.event.ts → store-trade-event.ts} +10 -4
  284. package/src/store/store.spec.ts +13 -11
  285. package/src/store/store.ts +1 -1
  286. package/tsconfig.json +12 -5
  287. package/dist/adapter/adapter-aggregate.js.map +0 -1
  288. package/dist/adapter/adapter.js.map +0 -1
  289. package/dist/adapter/backtester/backtester-adapter.js.map +0 -1
  290. package/dist/adapter/backtester/backtester-adapter.spec.d.ts +0 -1
  291. package/dist/adapter/backtester/backtester-adapter.spec.js +0 -83
  292. package/dist/adapter/backtester/backtester-adapter.spec.js.map +0 -1
  293. package/dist/adapter/backtester/backtester-cursor.js.map +0 -1
  294. package/dist/adapter/backtester/backtester-cursor.spec.d.ts +0 -1
  295. package/dist/adapter/backtester/backtester-cursor.spec.js +0 -39
  296. package/dist/adapter/backtester/backtester-cursor.spec.js.map +0 -1
  297. package/dist/adapter/backtester/backtester-streamer.js.map +0 -1
  298. package/dist/adapter/backtester/backtester-streamer.spec.d.ts +0 -1
  299. package/dist/adapter/backtester/backtester-streamer.spec.js +0 -45
  300. package/dist/adapter/backtester/backtester-streamer.spec.js.map +0 -1
  301. package/dist/adapter/backtester/index.js.map +0 -1
  302. package/dist/adapter/error.js.map +0 -1
  303. package/dist/adapter/index.js.map +0 -1
  304. package/dist/adapter/paper/engine/paper-engine.js.map +0 -1
  305. package/dist/adapter/paper/engine/paper-engine.spec.d.ts +0 -1
  306. package/dist/adapter/paper/engine/paper-engine.spec.js +0 -54
  307. package/dist/adapter/paper/engine/paper-engine.spec.js.map +0 -1
  308. package/dist/adapter/paper/index.js.map +0 -1
  309. package/dist/adapter/paper/paper-adapter.js.map +0 -1
  310. package/dist/adapter/paper/paper-adapter.spec.d.ts +0 -1
  311. package/dist/adapter/paper/paper-adapter.spec.js +0 -70
  312. package/dist/adapter/paper/paper-adapter.spec.js.map +0 -1
  313. package/dist/bootstrap.d.ts +0 -11
  314. package/dist/bootstrap.js +0 -73
  315. package/dist/bootstrap.js.map +0 -1
  316. package/dist/cli/build.js.map +0 -1
  317. package/dist/cli/dev.js.map +0 -1
  318. package/dist/cli/index.js.map +0 -1
  319. package/dist/cli/internal/workspace.js.map +0 -1
  320. package/dist/cli/pull.js.map +0 -1
  321. package/dist/cli/run.js.map +0 -1
  322. package/dist/cli/test.js.map +0 -1
  323. package/dist/domain/asset.js.map +0 -1
  324. package/dist/domain/asset.spec.d.ts +0 -1
  325. package/dist/domain/asset.spec.js +0 -55
  326. package/dist/domain/asset.spec.js.map +0 -1
  327. package/dist/domain/balance.js.map +0 -1
  328. package/dist/domain/balance.operator.js.map +0 -1
  329. package/dist/domain/balance.operator.spec.d.ts +0 -1
  330. package/dist/domain/balance.operator.spec.js +0 -23
  331. package/dist/domain/balance.operator.spec.js.map +0 -1
  332. package/dist/domain/balance.spec.d.ts +0 -1
  333. package/dist/domain/balance.spec.js +0 -83
  334. package/dist/domain/balance.spec.js.map +0 -1
  335. package/dist/domain/candle.js.map +0 -1
  336. package/dist/domain/candle.operator.d.ts +0 -10
  337. package/dist/domain/candle.operator.js.map +0 -1
  338. package/dist/domain/candle.operator.spec.d.ts +0 -1
  339. package/dist/domain/candle.operator.spec.js +0 -112
  340. package/dist/domain/candle.operator.spec.js.map +0 -1
  341. package/dist/domain/candle.spec.d.ts +0 -1
  342. package/dist/domain/candle.spec.js +0 -26
  343. package/dist/domain/candle.spec.js.map +0 -1
  344. package/dist/domain/commission.js.map +0 -1
  345. package/dist/domain/commission.spec.d.ts +0 -1
  346. package/dist/domain/commission.spec.js +0 -31
  347. package/dist/domain/commission.spec.js.map +0 -1
  348. package/dist/domain/component.js.map +0 -1
  349. package/dist/domain/error.js.map +0 -1
  350. package/dist/domain/index.js.map +0 -1
  351. package/dist/domain/instrument.js.map +0 -1
  352. package/dist/domain/instrument.operator.js.map +0 -1
  353. package/dist/domain/instrument.operator.spec.d.ts +0 -1
  354. package/dist/domain/instrument.operator.spec.js +0 -24
  355. package/dist/domain/instrument.operator.spec.js.map +0 -1
  356. package/dist/domain/instrument.spec.d.ts +0 -1
  357. package/dist/domain/instrument.spec.js +0 -49
  358. package/dist/domain/instrument.spec.js.map +0 -1
  359. package/dist/domain/order.js.map +0 -1
  360. package/dist/domain/order.operator.js +0 -14
  361. package/dist/domain/order.operator.js.map +0 -1
  362. package/dist/domain/order.operator.spec.d.ts +0 -1
  363. package/dist/domain/order.operator.spec.js +0 -65
  364. package/dist/domain/order.operator.spec.js.map +0 -1
  365. package/dist/domain/order.spec.d.ts +0 -1
  366. package/dist/domain/order.spec.js +0 -34
  367. package/dist/domain/order.spec.js.map +0 -1
  368. package/dist/domain/orderbook.js.map +0 -1
  369. package/dist/domain/orderbook.operator.js.map +0 -1
  370. package/dist/domain/orderbook.operator.spec.d.ts +0 -1
  371. package/dist/domain/orderbook.operator.spec.js +0 -22
  372. package/dist/domain/orderbook.operator.spec.js.map +0 -1
  373. package/dist/domain/orderbook.spec.d.ts +0 -1
  374. package/dist/domain/orderbook.spec.js +0 -13
  375. package/dist/domain/orderbook.spec.js.map +0 -1
  376. package/dist/domain/position.js.map +0 -1
  377. package/dist/domain/position.operator.js.map +0 -1
  378. package/dist/domain/position.operator.spec.d.ts +0 -1
  379. package/dist/domain/position.operator.spec.js +0 -49
  380. package/dist/domain/position.operator.spec.js.map +0 -1
  381. package/dist/domain/position.spec.d.ts +0 -1
  382. package/dist/domain/position.spec.js +0 -31
  383. package/dist/domain/position.spec.js.map +0 -1
  384. package/dist/domain/session.js.map +0 -1
  385. package/dist/domain/session.spec.d.ts +0 -1
  386. package/dist/domain/session.spec.js +0 -23
  387. package/dist/domain/session.spec.js.map +0 -1
  388. package/dist/domain/timeframe.js.map +0 -1
  389. package/dist/domain/trade.js.map +0 -1
  390. package/dist/domain/trade.operator.js.map +0 -1
  391. package/dist/domain/trade.operator.spec.d.ts +0 -1
  392. package/dist/domain/trade.operator.spec.js +0 -24
  393. package/dist/domain/trade.operator.spec.js.map +0 -1
  394. package/dist/domain/trade.spec.d.ts +0 -1
  395. package/dist/domain/trade.spec.js +0 -13
  396. package/dist/domain/trade.spec.js.map +0 -1
  397. package/dist/index.js.map +0 -1
  398. package/dist/indicator/atr.d.ts +0 -4
  399. package/dist/indicator/atr.js +0 -16
  400. package/dist/indicator/atr.js.map +0 -1
  401. package/dist/indicator/cross.d.ts +0 -4
  402. package/dist/indicator/cross.js +0 -41
  403. package/dist/indicator/cross.js.map +0 -1
  404. package/dist/indicator/cross.spec.d.ts +0 -1
  405. package/dist/indicator/cross.spec.js +0 -102
  406. package/dist/indicator/cross.spec.js.map +0 -1
  407. package/dist/indicator/donchian.d.ts +0 -10
  408. package/dist/indicator/donchian.js +0 -16
  409. package/dist/indicator/donchian.js.map +0 -1
  410. package/dist/indicator/drawdown.d.ts +0 -3
  411. package/dist/indicator/drawdown.js +0 -28
  412. package/dist/indicator/drawdown.js.map +0 -1
  413. package/dist/indicator/ema.d.ts +0 -3
  414. package/dist/indicator/ema.js +0 -24
  415. package/dist/indicator/ema.js.map +0 -1
  416. package/dist/indicator/ema.spec.d.ts +0 -1
  417. package/dist/indicator/ema.spec.js +0 -24
  418. package/dist/indicator/ema.spec.js.map +0 -1
  419. package/dist/indicator/envelope.d.ts +0 -6
  420. package/dist/indicator/envelope.js +0 -18
  421. package/dist/indicator/envelope.js.map +0 -1
  422. package/dist/indicator/index.d.ts +0 -17
  423. package/dist/indicator/index.js +0 -34
  424. package/dist/indicator/index.js.map +0 -1
  425. package/dist/indicator/macd.d.ts +0 -3
  426. package/dist/indicator/macd.js +0 -13
  427. package/dist/indicator/macd.js.map +0 -1
  428. package/dist/indicator/min-max.d.ts +0 -6
  429. package/dist/indicator/min-max.js +0 -22
  430. package/dist/indicator/min-max.js.map +0 -1
  431. package/dist/indicator/ring-buffer.d.ts +0 -16
  432. package/dist/indicator/ring-buffer.js +0 -56
  433. package/dist/indicator/ring-buffer.js.map +0 -1
  434. package/dist/indicator/rma.d.ts +0 -3
  435. package/dist/indicator/rma.js +0 -24
  436. package/dist/indicator/rma.js.map +0 -1
  437. package/dist/indicator/sma.d.ts +0 -3
  438. package/dist/indicator/sma.js +0 -17
  439. package/dist/indicator/sma.js.map +0 -1
  440. package/dist/indicator/sma.spec.d.ts +0 -1
  441. package/dist/indicator/sma.spec.js +0 -20
  442. package/dist/indicator/sma.spec.js.map +0 -1
  443. package/dist/indicator/swma.d.ts +0 -3
  444. package/dist/indicator/swma.js +0 -24
  445. package/dist/indicator/swma.js.map +0 -1
  446. package/dist/indicator/tma.d.ts +0 -3
  447. package/dist/indicator/tma.js +0 -16
  448. package/dist/indicator/tma.js.map +0 -1
  449. package/dist/indicator/tma.spec.d.ts +0 -1
  450. package/dist/indicator/tma.spec.js +0 -20
  451. package/dist/indicator/tma.spec.js.map +0 -1
  452. package/dist/indicator/trailing.d.ts +0 -14
  453. package/dist/indicator/trailing.js +0 -68
  454. package/dist/indicator/trailing.js.map +0 -1
  455. package/dist/indicator/trailing.spec.d.ts +0 -1
  456. package/dist/indicator/trailing.spec.js +0 -70
  457. package/dist/indicator/trailing.spec.js.map +0 -1
  458. package/dist/indicator/true-range.d.ts +0 -4
  459. package/dist/indicator/true-range.js +0 -20
  460. package/dist/indicator/true-range.js.map +0 -1
  461. package/dist/indicator/true-range.spec.d.ts +0 -1
  462. package/dist/indicator/true-range.spec.js +0 -28
  463. package/dist/indicator/true-range.spec.js.map +0 -1
  464. package/dist/indicator/window.d.ts +0 -3
  465. package/dist/indicator/window.js +0 -22
  466. package/dist/indicator/window.js.map +0 -1
  467. package/dist/indicator/wma.d.ts +0 -3
  468. package/dist/indicator/wma.js +0 -23
  469. package/dist/indicator/wma.js.map +0 -1
  470. package/dist/indicator/wma.spec.d.ts +0 -1
  471. package/dist/indicator/wma.spec.js +0 -20
  472. package/dist/indicator/wma.spec.js.map +0 -1
  473. package/dist/shared/collections.js.map +0 -1
  474. package/dist/shared/collections.spec.d.ts +0 -1
  475. package/dist/shared/collections.spec.js +0 -28
  476. package/dist/shared/collections.spec.js.map +0 -1
  477. package/dist/shared/datetime.js.map +0 -1
  478. package/dist/shared/decimals.js.map +0 -1
  479. package/dist/shared/decimals.spec.d.ts +0 -1
  480. package/dist/shared/decimals.spec.js +0 -29
  481. package/dist/shared/decimals.spec.js.map +0 -1
  482. package/dist/shared/index.js.map +0 -1
  483. package/dist/shared/io.d.ts +0 -1
  484. package/dist/shared/io.js +0 -8
  485. package/dist/shared/io.js.map +0 -1
  486. package/dist/shared/logger.js.map +0 -1
  487. package/dist/shared/pipe.js.map +0 -1
  488. package/dist/shared/policy.js.map +0 -1
  489. package/dist/storage/cache.js.map +0 -1
  490. package/dist/storage/cache.spec.d.ts +0 -1
  491. package/dist/storage/cache.spec.js +0 -18
  492. package/dist/storage/cache.spec.js.map +0 -1
  493. package/dist/storage/feed.js.map +0 -1
  494. package/dist/storage/index.js.map +0 -1
  495. package/dist/storage/measurement.js.map +0 -1
  496. package/dist/storage/storage.js.map +0 -1
  497. package/dist/store/index.js.map +0 -1
  498. package/dist/store/store-balance.event.js.map +0 -1
  499. package/dist/store/store-balance.event.spec.d.ts +0 -1
  500. package/dist/store/store-balance.event.spec.js +0 -26
  501. package/dist/store/store-balance.event.spec.js.map +0 -1
  502. package/dist/store/store-instrument.event.js.map +0 -1
  503. package/dist/store/store-instrument.event.spec.d.ts +0 -1
  504. package/dist/store/store-instrument.event.spec.js +0 -22
  505. package/dist/store/store-instrument.event.spec.js.map +0 -1
  506. package/dist/store/store-order.event.js.map +0 -1
  507. package/dist/store/store-order.event.spec.d.ts +0 -1
  508. package/dist/store/store-order.event.spec.js +0 -21
  509. package/dist/store/store-order.event.spec.js.map +0 -1
  510. package/dist/store/store-orderbook.event.js.map +0 -1
  511. package/dist/store/store-orderbook.event.spec.d.ts +0 -1
  512. package/dist/store/store-orderbook.event.spec.js +0 -28
  513. package/dist/store/store-orderbook.event.spec.js.map +0 -1
  514. package/dist/store/store-position.event.js.map +0 -1
  515. package/dist/store/store-state.js.map +0 -1
  516. package/dist/store/store-trade.event.js.map +0 -1
  517. package/dist/store/store-trade.event.spec.d.ts +0 -1
  518. package/dist/store/store-trade.event.spec.js +0 -44
  519. package/dist/store/store-trade.event.spec.js.map +0 -1
  520. package/dist/store/store.event.js.map +0 -1
  521. package/dist/store/store.js.map +0 -1
  522. package/dist/store/store.spec.d.ts +0 -1
  523. package/dist/store/store.spec.js +0 -119
  524. package/dist/store/store.spec.js.map +0 -1
  525. package/dist/tsconfig.tsbuildinfo +0 -1
  526. package/jestconfig.json +0 -13
  527. package/src/adapter/backtester/backtester-adapter.spec.ts +0 -133
  528. package/src/adapter/paper/paper-adapter.spec.ts +0 -114
  529. package/src/bootstrap.ts +0 -139
  530. package/src/domain/candle.operator.spec.ts +0 -126
  531. package/src/indicator/atr.ts +0 -21
  532. package/src/indicator/cross.spec.ts +0 -136
  533. package/src/indicator/cross.ts +0 -59
  534. package/src/indicator/donchian.ts +0 -38
  535. package/src/indicator/drawdown.ts +0 -29
  536. package/src/indicator/ema.spec.ts +0 -39
  537. package/src/indicator/ema.ts +0 -27
  538. package/src/indicator/envelope.ts +0 -25
  539. package/src/indicator/index.ts +0 -17
  540. package/src/indicator/macd.ts +0 -22
  541. package/src/indicator/min-max.ts +0 -28
  542. package/src/indicator/ring-buffer.ts +0 -63
  543. package/src/indicator/rma.ts +0 -26
  544. package/src/indicator/sma.spec.ts +0 -21
  545. package/src/indicator/sma.ts +0 -25
  546. package/src/indicator/swma.ts +0 -28
  547. package/src/indicator/tma.spec.ts +0 -21
  548. package/src/indicator/tma.ts +0 -20
  549. package/src/indicator/trailing.spec.ts +0 -88
  550. package/src/indicator/trailing.ts +0 -81
  551. package/src/indicator/true-range.spec.ts +0 -32
  552. package/src/indicator/true-range.ts +0 -32
  553. package/src/indicator/window.ts +0 -28
  554. package/src/indicator/wma.spec.ts +0 -20
  555. package/src/indicator/wma.ts +0 -29
  556. package/src/shared/io.ts +0 -3
  557. package/src/store/store-order.event.spec.ts +0 -28
@@ -1,11 +1,13 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { decimal } from '../shared';
3
3
  import { State } from '../store';
4
+ import { Component } from './component';
4
5
  import { InstrumentSelector } from './instrument';
5
6
  import { Position } from './position';
6
- export declare function position(selector: InstrumentSelector): (source: Observable<Position>) => Observable<Readonly<Position>>;
7
- export declare function positions(selector: InstrumentSelector, state: State): (source: Observable<Position>) => Observable<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>[]>;
8
9
  export declare function flatten(): (source: Observable<Position[]>) => Observable<{
9
10
  size: decimal;
10
11
  rate: decimal;
11
12
  }>;
13
+ //# sourceMappingURL=position-operator.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -3,12 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.flatten = exports.positions = exports.position = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const shared_1 = require("../shared");
6
+ const error_1 = require("./error");
7
+ const position_1 = require("./position");
6
8
  function position(selector) {
7
- return (source) => source.pipe((0, rxjs_1.filter)(it => it.kind == 'position' && it.instrument.id == selector.id), (0, rxjs_1.map)(it => it));
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));
8
10
  }
9
11
  exports.position = position;
10
12
  function positions(selector, state) {
11
- const getter = () => Object.values(state.balance.get(selector.quote.id).position).filter(it => it.instrument.id == selector.id);
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);
12
20
  return (source) => source.pipe(position(selector), (0, rxjs_1.map)(() => getter()), (0, rxjs_1.startWith)(getter()));
13
21
  }
14
22
  exports.positions = positions;
@@ -35,4 +43,3 @@ function flatten() {
35
43
  };
36
44
  }
37
45
  exports.flatten = flatten;
38
- //# sourceMappingURL=position.operator.js.map
@@ -1,19 +1,18 @@
1
1
  import { Instrument } from '../domain';
2
- import { decimal, timestamp } from '../shared';
2
+ import { decimal } from '../shared';
3
3
  import { Component } from './component';
4
4
  export declare type PositionMode = 'CROSS' | 'ISOLATED';
5
5
  export declare class Position implements Component {
6
+ timestamp: number;
6
7
  readonly id: string;
7
8
  readonly instrument: Instrument;
8
9
  readonly mode: PositionMode;
9
10
  averageExecutionRate: decimal;
10
11
  size: decimal;
11
12
  leverage: number;
12
- kind: string;
13
- timestamp: timestamp;
14
13
  estimatedUnrealizedPnL?: decimal;
15
14
  get margin(): decimal;
16
- constructor(id: string, instrument: Instrument, mode: PositionMode, averageExecutionRate: decimal, size: decimal, leverage: number);
15
+ constructor(timestamp: number, id: string, instrument: Instrument, mode: PositionMode, averageExecutionRate: decimal, size: decimal, leverage: number);
17
16
  calculateEstimatedUnrealizedPnL(rate: decimal): decimal;
18
- toString(): string;
19
17
  }
18
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Position = void 0;
4
4
  const shared_1 = require("../shared");
5
5
  class Position {
6
- constructor(id, instrument, mode, averageExecutionRate, size, leverage) {
6
+ constructor(timestamp, id, instrument, mode, averageExecutionRate, size, leverage) {
7
+ this.timestamp = timestamp;
7
8
  this.id = id;
8
9
  this.instrument = instrument;
9
10
  this.mode = mode;
10
11
  this.averageExecutionRate = averageExecutionRate;
11
12
  this.size = size;
12
13
  this.leverage = leverage;
13
- this.kind = 'position';
14
14
  }
15
15
  get margin() {
16
16
  return this.instrument.quote.floor(this.size.abs().div(this.leverage));
@@ -19,9 +19,5 @@ class Position {
19
19
  this.estimatedUnrealizedPnL = this.instrument.quote.floor((0, shared_1.pnl)(this.averageExecutionRate, rate, this.size));
20
20
  return this.estimatedUnrealizedPnL;
21
21
  }
22
- toString() {
23
- return this.id;
24
- }
25
22
  }
26
23
  exports.Position = Position;
27
- //# sourceMappingURL=position.js.map
@@ -0,0 +1,54 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,106 @@
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,36 +1,77 @@
1
1
  import { Observable } from 'rxjs';
2
- import { AdapterFactory, BacktesterOptions, PaperOptions } from '../adapter';
3
2
  import { AdapterAggregate } from '../adapter/adapter-aggregate';
4
- import { AssetSelector, Balance, Candle, Instrument, InstrumentSelector, Order, Orderbook, Position, Trade } from '../domain';
5
- import { StorageFactory } from '../storage';
3
+ import { AssetSelector, Balance, Instrument, InstrumentSelector, Ohlc, Order, Orderbook, Position, Trade } from '../domain';
4
+ import { decimal } from '../shared';
5
+ import { Measurement } from '../storage';
6
6
  import { Store } from '../store';
7
- export interface SessionDescriptor {
8
- id?: number;
9
- adapter: AdapterFactory[];
10
- storage?: StorageFactory;
11
- simulation?: PaperOptions & BacktesterOptions;
12
- }
7
+ declare type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
13
8
  export declare class Session {
9
+ readonly id: number;
14
10
  readonly store: Store;
15
11
  readonly aggregate: AdapterAggregate;
16
- readonly descriptor?: SessionDescriptor;
12
+ readonly measurement: Measurement | undefined;
17
13
  private initialized;
18
- private subscription;
19
14
  get timestamp(): number;
20
- constructor(store: Store, aggregate: AdapterAggregate, descriptor?: SessionDescriptor);
21
- awake(describe: (session: Session) => Observable<any>): Promise<void>;
15
+ constructor(id: number, store: Store, aggregate: AdapterAggregate, measurement: Measurement | undefined);
16
+ awake(): Promise<void>;
22
17
  dispose(): Promise<void>;
18
+ /**
19
+ * Subscribes to specific instrument. Usually forces adapter to subscribe
20
+ * for orderbook and ticker streams.
21
+ */
23
22
  subscribe(instrument: Array<InstrumentSelector>): Promise<void>;
24
- open(order: Order): Observable<Readonly<Order>>;
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
+ */
25
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
+ */
26
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
+ */
27
44
  instruments(): Observable<Readonly<Instrument[]>>;
45
+ /**
46
+ * Subscribes to balance changes.
47
+ */
28
48
  balance(selector: AssetSelector): Observable<Readonly<Balance>>;
49
+ /**
50
+ * Subscribes to trade/ticker changes.
51
+ */
29
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
+ */
30
57
  orderbook(selector: InstrumentSelector): Observable<Readonly<Orderbook>>;
58
+ /**
59
+ * Subscribes to position on leveraged market.
60
+ */
31
61
  position(selector: InstrumentSelector): Observable<Readonly<Position>>;
62
+ /**
63
+ * Subscribes to positions on leveraged markets.
64
+ */
32
65
  positions(selector: InstrumentSelector): Observable<Readonly<Position[]>>;
33
66
  order(selector: InstrumentSelector): Observable<Readonly<Order>>;
34
67
  orders(selector: InstrumentSelector): Observable<Readonly<Order[]>>;
35
- history(selector: InstrumentSelector, timeframe: number, length: number): Observable<Readonly<Candle>>;
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];
36
75
  }
76
+ export {};
77
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
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,83 +1,125 @@
1
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
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.Session = void 0;
4
13
  const rxjs_1 = require("rxjs");
14
+ const uuid_1 = require("uuid");
5
15
  const domain_1 = require("../domain");
6
- const shared_1 = require("../shared");
7
- const balance_operator_1 = require("./balance.operator");
8
- const instrument_operator_1 = require("./instrument.operator");
9
- const order_operator_1 = require("./order.operator");
10
- const orderbook_operator_1 = require("./orderbook.operator");
11
- const position_operator_1 = require("./position.operator");
12
- const trade_operator_1 = require("./trade.operator");
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");
13
22
  class Session {
14
- constructor(store, aggregate, descriptor) {
23
+ constructor(id, store, aggregate, measurement) {
24
+ this.id = id;
15
25
  this.store = store;
16
26
  this.aggregate = aggregate;
17
- this.descriptor = descriptor;
27
+ this.measurement = measurement;
18
28
  this.initialized = false;
19
- if (descriptor && !descriptor.id) {
20
- descriptor.id = (0, shared_1.now)();
21
- }
22
29
  }
23
30
  get timestamp() {
24
31
  return this.store.snapshot.timestamp;
25
32
  }
26
- async awake(describe) {
27
- if (this.initialized) {
28
- return;
29
- }
30
- this.initialized = true;
31
- await this.aggregate.awake();
32
- if (describe) {
33
- this.subscription = describe(this)
34
- .pipe((0, rxjs_1.finalize)(() => this.dispose()))
35
- .subscribe();
36
- }
37
- }
38
- async dispose() {
39
- if (!this.initialized) {
40
- return;
41
- }
42
- if (this.subscription) {
43
- this.subscription.unsubscribe();
44
- this.subscription = undefined;
45
- }
46
- this.store.dispose();
47
- await this.aggregate.dispose();
48
- this.initialized = false;
49
- }
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
+ */
50
57
  subscribe(instrument) {
51
58
  return this.aggregate.subscribe(instrument);
52
59
  }
60
+ /**
61
+ * Opens a new order.
62
+ */
53
63
  open(order) {
54
- return (0, rxjs_1.from)(this.aggregate.open(order)).pipe((0, rxjs_1.switchMap)(() => this.order(order.instrument).pipe((0, rxjs_1.filter)(it => it.id == order.id))));
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))));
55
70
  }
71
+ /**
72
+ * Cancels specific order.
73
+ */
56
74
  cancel(order) {
57
- return (0, rxjs_1.defer)(() => (0, rxjs_1.from)(this.aggregate.cancel(order))).pipe((0, rxjs_1.switchMap)(() => this.store.changes$.pipe((0, rxjs_1.filter)(it => it instanceof domain_1.Order && order.id == it.id))), (0, rxjs_1.map)(it => it));
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))));
58
76
  }
77
+ /**
78
+ * Subscribes to specific instrument changes.
79
+ * When adapter awake then it will fetch collection of all available instruments.
80
+ */
59
81
  instrument(selector) {
60
82
  this.subscribe([selector]);
61
83
  return this.store.changes$.pipe((0, instrument_operator_1.instrument)(selector, this.store.snapshot));
62
84
  }
85
+ /**
86
+ * Subscribes to instruments changes.
87
+ * When adapter awake then it will fetch collection of all available instruments.
88
+ */
63
89
  instruments() {
64
90
  return this.store.changes$.pipe((0, instrument_operator_1.instruments)(this.store.snapshot));
65
91
  }
92
+ /**
93
+ * Subscribes to balance changes.
94
+ */
66
95
  balance(selector) {
67
96
  return this.store.changes$.pipe((0, balance_operator_1.balance)(selector, this.store.snapshot));
68
97
  }
98
+ /**
99
+ * Subscribes to trade/ticker changes.
100
+ */
69
101
  trade(selector) {
70
102
  this.subscribe([selector]);
71
103
  return this.store.changes$.pipe((0, trade_operator_1.trade)(selector, this.store.snapshot));
72
104
  }
105
+ /**
106
+ * Subscribes to orderbook changes.
107
+ * Right now you can access only best bid and best ask.
108
+ */
73
109
  orderbook(selector) {
74
110
  this.subscribe([selector]);
75
111
  return this.store.changes$.pipe((0, orderbook_operator_1.orderbook)(selector, this.store.snapshot));
76
112
  }
113
+ /**
114
+ * Subscribes to position on leveraged market.
115
+ */
77
116
  position(selector) {
78
117
  this.subscribe([selector]);
79
118
  return this.store.changes$.pipe((0, position_operator_1.position)(selector));
80
119
  }
120
+ /**
121
+ * Subscribes to positions on leveraged markets.
122
+ */
81
123
  positions(selector) {
82
124
  this.subscribe([selector]);
83
125
  return this.store.changes$.pipe((0, position_operator_1.positions)(selector, this.store.snapshot));
@@ -93,6 +135,28 @@ class Session {
93
135
  history(selector, timeframe, length) {
94
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));
95
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
+ }
96
161
  }
97
162
  exports.Session = Session;
98
- //# sourceMappingURL=session.js.map
@@ -12,3 +12,4 @@ export declare class Timeframe {
12
12
  static W1: number;
13
13
  }
14
14
  export declare function tf(timestamp: number, timeframe: number): number;
15
+ //# sourceMappingURL=timeframe.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -19,4 +19,3 @@ function tf(timestamp, timeframe) {
19
19
  return timestamp - (timestamp % timeframe);
20
20
  }
21
21
  exports.tf = tf;
22
- //# sourceMappingURL=timeframe.js.map
@@ -4,3 +4,4 @@ import { Component } from './component';
4
4
  import { InstrumentSelector } from './instrument';
5
5
  import { Trade } from './trade';
6
6
  export declare function trade(selector: InstrumentSelector, state: State): (source$: Observable<Component>) => Observable<Trade>;
7
+ //# sourceMappingURL=trade-operator.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -7,4 +7,3 @@ function trade(selector, state) {
7
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
8
  }
9
9
  exports.trade = trade;
10
- //# sourceMappingURL=trade.operator.js.map
@@ -1,13 +1,16 @@
1
- import { decimal, timestamp } from '../shared';
1
+ import { decimal } from '../shared';
2
2
  import { Instrument } from '.';
3
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
+ */
4
8
  export declare class Trade implements Component {
9
+ timestamp: number;
5
10
  readonly instrument: Instrument;
6
- id: string;
7
- kind: string;
8
- timestamp: timestamp;
9
11
  rate: decimal;
10
12
  quantity: decimal;
11
- constructor(instrument: Instrument);
12
- toString(): string;
13
+ readonly id: string;
14
+ constructor(timestamp: number, instrument: Instrument, rate: decimal, quantity: decimal);
13
15
  }
16
+ //# sourceMappingURL=trade.d.ts.map
@@ -0,0 +1 @@
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,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
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
+ */
4
8
  class Trade {
5
- constructor(instrument) {
9
+ constructor(timestamp, instrument, rate, quantity) {
10
+ this.timestamp = timestamp;
6
11
  this.instrument = instrument;
7
- this.kind = 'trade';
12
+ this.rate = rate;
13
+ this.quantity = quantity;
8
14
  this.id = instrument.id;
9
15
  }
10
- toString() {
11
- return this.instrument.toString();
12
- }
13
16
  }
14
17
  exports.Trade = Trade;
15
- //# sourceMappingURL=trade.js.map