@quantform/core 0.4.11 → 0.5.15

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 (490) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +7 -3
  2. package/dist/adapter/adapter-aggregate.js +17 -18
  3. package/dist/adapter/adapter-aggregate.js.map +1 -1
  4. package/dist/adapter/adapter.d.ts +21 -21
  5. package/dist/adapter/adapter.js +8 -40
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/backtester/backtester-adapter.d.ts +9 -7
  8. package/dist/adapter/backtester/backtester-adapter.js +15 -13
  9. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  10. package/dist/{tests → adapter/backtester}/backtester-adapter.spec.d.ts +0 -0
  11. package/dist/adapter/backtester/backtester-adapter.spec.js +82 -0
  12. package/dist/adapter/backtester/backtester-adapter.spec.js.map +1 -0
  13. package/dist/adapter/backtester/backtester-cursor.d.ts +3 -4
  14. package/dist/adapter/backtester/backtester-cursor.js +2 -1
  15. package/dist/adapter/backtester/backtester-cursor.js.map +1 -1
  16. package/dist/adapter/backtester/backtester-cursor.spec.js +17 -18
  17. package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
  18. package/dist/adapter/backtester/backtester-streamer.d.ts +4 -1
  19. package/dist/adapter/backtester/backtester-streamer.js +39 -18
  20. package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
  21. package/dist/adapter/backtester/backtester-streamer.spec.js +13 -13
  22. package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
  23. package/dist/adapter/backtester/index.js +5 -1
  24. package/dist/adapter/backtester/index.js.map +1 -1
  25. package/dist/adapter/error.d.ts +2 -0
  26. package/dist/adapter/error.js +12 -0
  27. package/dist/adapter/error.js.map +1 -0
  28. package/dist/adapter/index.js +5 -1
  29. package/dist/adapter/index.js.map +1 -1
  30. package/dist/adapter/paper/engine/paper-engine.d.ts +11 -0
  31. package/dist/adapter/paper/engine/paper-engine.js +103 -0
  32. package/dist/adapter/paper/engine/paper-engine.js.map +1 -0
  33. package/dist/adapter/paper/{simulator/paper-spot-simulator.spec.d.ts → engine/paper-engine.spec.d.ts} +0 -0
  34. package/dist/adapter/paper/engine/paper-engine.spec.js +54 -0
  35. package/dist/adapter/paper/engine/paper-engine.spec.js.map +1 -0
  36. package/dist/adapter/paper/index.d.ts +1 -2
  37. package/dist/adapter/paper/index.js +6 -3
  38. package/dist/adapter/paper/index.js.map +1 -1
  39. package/dist/adapter/paper/paper-adapter.d.ts +7 -7
  40. package/dist/adapter/paper/paper-adapter.js +21 -19
  41. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  42. package/dist/adapter/paper/paper-adapter.spec.js +35 -15
  43. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  44. package/dist/bootstrap.js +32 -15
  45. package/dist/bootstrap.js.map +1 -1
  46. package/dist/cli/build.d.ts +1 -0
  47. package/dist/cli/build.js +16 -0
  48. package/dist/cli/build.js.map +1 -0
  49. package/dist/cli/dev.d.ts +1 -0
  50. package/dist/cli/dev.js +17 -0
  51. package/dist/cli/dev.js.map +1 -0
  52. package/dist/cli/index.d.ts +2 -0
  53. package/dist/cli/index.js +72 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/cli/internal/workspace.d.ts +8 -0
  56. package/dist/cli/internal/workspace.js +14 -0
  57. package/dist/cli/internal/workspace.js.map +1 -0
  58. package/dist/cli/pull.d.ts +1 -0
  59. package/dist/cli/pull.js +52 -0
  60. package/dist/cli/pull.js.map +1 -0
  61. package/dist/cli/run.d.ts +1 -0
  62. package/dist/cli/run.js +19 -0
  63. package/dist/cli/run.js.map +1 -0
  64. package/dist/cli/test.d.ts +1 -0
  65. package/dist/cli/test.js +41 -0
  66. package/dist/cli/test.js.map +1 -0
  67. package/dist/domain/asset.d.ts +6 -5
  68. package/dist/domain/asset.js +22 -16
  69. package/dist/domain/asset.js.map +1 -1
  70. package/dist/domain/asset.spec.js +32 -32
  71. package/dist/domain/asset.spec.js.map +1 -1
  72. package/dist/domain/balance.d.ts +11 -10
  73. package/dist/domain/balance.js +38 -32
  74. package/dist/domain/balance.js.map +1 -1
  75. package/dist/domain/balance.operator.d.ts +6 -0
  76. package/dist/domain/balance.operator.js +10 -0
  77. package/dist/domain/balance.operator.js.map +1 -0
  78. package/dist/{ipc.spec.d.ts → domain/balance.operator.spec.d.ts} +0 -0
  79. package/dist/domain/balance.operator.spec.js +23 -0
  80. package/dist/domain/balance.operator.spec.js.map +1 -0
  81. package/dist/domain/balance.spec.js +69 -9
  82. package/dist/domain/balance.spec.js.map +1 -1
  83. package/dist/domain/candle.d.ts +2 -15
  84. package/dist/domain/candle.js +3 -66
  85. package/dist/domain/candle.js.map +1 -1
  86. package/dist/domain/candle.operator.d.ts +9 -0
  87. package/dist/domain/candle.operator.js +64 -0
  88. package/dist/domain/candle.operator.js.map +1 -0
  89. package/dist/{shared/policy.spec.d.ts → domain/candle.operator.spec.d.ts} +0 -0
  90. package/dist/domain/candle.operator.spec.js +111 -0
  91. package/dist/domain/candle.operator.spec.js.map +1 -0
  92. package/dist/domain/candle.spec.js +11 -53
  93. package/dist/domain/candle.spec.js.map +1 -1
  94. package/dist/domain/commission.d.ts +4 -1
  95. package/dist/domain/commission.js +2 -2
  96. package/dist/domain/commission.js.map +1 -1
  97. package/dist/{shared/topic.spec.d.ts → domain/commission.spec.d.ts} +0 -0
  98. package/dist/domain/commission.spec.js +30 -0
  99. package/dist/domain/commission.spec.js.map +1 -0
  100. package/dist/domain/component.d.ts +2 -0
  101. package/dist/domain/error.d.ts +5 -0
  102. package/dist/domain/error.js +24 -0
  103. package/dist/domain/error.js.map +1 -0
  104. package/dist/domain/index.d.ts +8 -1
  105. package/dist/domain/index.js +13 -2
  106. package/dist/domain/index.js.map +1 -1
  107. package/dist/domain/instrument.d.ts +4 -2
  108. package/dist/domain/instrument.js +18 -9
  109. package/dist/domain/instrument.js.map +1 -1
  110. package/dist/domain/instrument.operator.d.ts +6 -0
  111. package/dist/domain/instrument.operator.js +14 -0
  112. package/dist/domain/instrument.operator.js.map +1 -0
  113. package/dist/{shared/worker.spec.d.ts → domain/instrument.operator.spec.d.ts} +0 -0
  114. package/dist/domain/instrument.operator.spec.js +24 -0
  115. package/dist/domain/instrument.operator.spec.js.map +1 -0
  116. package/dist/domain/instrument.spec.js +22 -30
  117. package/dist/domain/instrument.spec.js.map +1 -1
  118. package/dist/domain/order.d.ts +15 -16
  119. package/dist/domain/order.js +39 -26
  120. package/dist/domain/order.js.map +1 -1
  121. package/dist/domain/order.operator.d.ts +7 -0
  122. package/dist/domain/order.operator.js +14 -0
  123. package/dist/domain/order.operator.js.map +1 -0
  124. package/dist/{store/event/store-balance.event.spec.d.ts → domain/order.operator.spec.d.ts} +0 -0
  125. package/dist/domain/order.operator.spec.js +64 -0
  126. package/dist/domain/order.operator.spec.js.map +1 -0
  127. package/dist/{store/event/store-candle.event.spec.d.ts → domain/order.spec.d.ts} +0 -0
  128. package/dist/domain/order.spec.js +33 -0
  129. package/dist/domain/order.spec.js.map +1 -0
  130. package/dist/domain/orderbook.d.ts +2 -0
  131. package/dist/domain/orderbook.js +2 -0
  132. package/dist/domain/orderbook.js.map +1 -1
  133. package/dist/domain/orderbook.operator.d.ts +6 -0
  134. package/dist/domain/orderbook.operator.js +10 -0
  135. package/dist/domain/orderbook.operator.js.map +1 -0
  136. package/dist/{store/event/store-instrument.event.spec.d.ts → domain/orderbook.operator.spec.d.ts} +0 -0
  137. package/dist/domain/orderbook.operator.spec.js +22 -0
  138. package/dist/domain/orderbook.operator.spec.js.map +1 -0
  139. package/dist/{store/event/store-order.event.spec.d.ts → domain/orderbook.spec.d.ts} +0 -0
  140. package/dist/domain/orderbook.spec.js +13 -0
  141. package/dist/domain/orderbook.spec.js.map +1 -0
  142. package/dist/domain/position.d.ts +6 -10
  143. package/dist/domain/position.js +10 -31
  144. package/dist/domain/position.js.map +1 -1
  145. package/dist/domain/position.operator.d.ts +10 -0
  146. package/dist/domain/position.operator.js +38 -0
  147. package/dist/domain/position.operator.js.map +1 -0
  148. package/dist/{store/event/store-trade.event.spec.d.ts → domain/position.operator.spec.d.ts} +0 -0
  149. package/dist/domain/position.operator.spec.js +48 -0
  150. package/dist/domain/position.operator.spec.js.map +1 -0
  151. package/dist/domain/position.spec.js +21 -17
  152. package/dist/domain/position.spec.js.map +1 -1
  153. package/dist/domain/session.d.ts +18 -35
  154. package/dist/domain/session.js +27 -53
  155. package/dist/domain/session.js.map +1 -1
  156. package/dist/domain/session.spec.js +1 -1
  157. package/dist/domain/session.spec.js.map +1 -1
  158. package/dist/domain/trade.d.ts +3 -1
  159. package/dist/domain/trade.js +2 -0
  160. package/dist/domain/trade.js.map +1 -1
  161. package/dist/domain/trade.operator.d.ts +6 -0
  162. package/dist/domain/trade.operator.js +10 -0
  163. package/dist/domain/trade.operator.js.map +1 -0
  164. package/dist/domain/trade.operator.spec.d.ts +1 -0
  165. package/dist/domain/trade.operator.spec.js +24 -0
  166. package/dist/domain/trade.operator.spec.js.map +1 -0
  167. package/dist/domain/trade.spec.d.ts +1 -0
  168. package/dist/domain/trade.spec.js +13 -0
  169. package/dist/domain/trade.spec.js.map +1 -0
  170. package/dist/index.d.ts +0 -1
  171. package/dist/index.js +5 -2
  172. package/dist/index.js.map +1 -1
  173. package/dist/indicator/atr.js.map +1 -1
  174. package/dist/indicator/cross.spec.js +2 -2
  175. package/dist/indicator/cross.spec.js.map +1 -1
  176. package/dist/indicator/donchian.js.map +1 -1
  177. package/dist/indicator/ema.js.map +1 -1
  178. package/dist/indicator/ema.spec.js +1 -1
  179. package/dist/indicator/ema.spec.js.map +1 -1
  180. package/dist/indicator/envelope.js.map +1 -1
  181. package/dist/indicator/index.js +5 -1
  182. package/dist/indicator/index.js.map +1 -1
  183. package/dist/indicator/macd.js.map +1 -1
  184. package/dist/indicator/min-max.js.map +1 -1
  185. package/dist/indicator/rma.js.map +1 -1
  186. package/dist/indicator/sma.js.map +1 -1
  187. package/dist/indicator/sma.spec.js +1 -1
  188. package/dist/indicator/sma.spec.js.map +1 -1
  189. package/dist/indicator/swma.js.map +1 -1
  190. package/dist/indicator/tma.js.map +1 -1
  191. package/dist/indicator/tma.spec.js +1 -1
  192. package/dist/indicator/tma.spec.js.map +1 -1
  193. package/dist/indicator/trailing.spec.js +2 -2
  194. package/dist/indicator/trailing.spec.js.map +1 -1
  195. package/dist/indicator/truerange.js.map +1 -1
  196. package/dist/indicator/truerange.spec.js +1 -1
  197. package/dist/indicator/truerange.spec.js.map +1 -1
  198. package/dist/indicator/window.js.map +1 -1
  199. package/dist/indicator/wma.js.map +1 -1
  200. package/dist/indicator/wma.spec.js +1 -1
  201. package/dist/indicator/wma.spec.js.map +1 -1
  202. package/dist/shared/collections.d.ts +10 -0
  203. package/dist/shared/collections.js +33 -0
  204. package/dist/shared/collections.js.map +1 -0
  205. package/dist/shared/datetime.d.ts +0 -1
  206. package/dist/shared/datetime.js +1 -12
  207. package/dist/shared/datetime.js.map +1 -1
  208. package/dist/shared/decimals.d.ts +1 -1
  209. package/dist/shared/decimals.js +4 -5
  210. package/dist/shared/decimals.js.map +1 -1
  211. package/dist/shared/decimals.spec.js +2 -1
  212. package/dist/shared/decimals.spec.js.map +1 -1
  213. package/dist/shared/index.d.ts +1 -3
  214. package/dist/shared/index.js +6 -4
  215. package/dist/shared/index.js.map +1 -1
  216. package/dist/shared/io.js.map +1 -1
  217. package/dist/shared/policy.d.ts +0 -1
  218. package/dist/shared/policy.js +1 -11
  219. package/dist/shared/policy.js.map +1 -1
  220. package/dist/storage/cache.d.ts +9 -0
  221. package/dist/storage/cache.js +32 -0
  222. package/dist/storage/cache.js.map +1 -0
  223. package/dist/storage/cache.spec.d.ts +1 -0
  224. package/dist/storage/cache.spec.js +18 -0
  225. package/dist/storage/cache.spec.js.map +1 -0
  226. package/dist/storage/feed.d.ts +3 -4
  227. package/dist/storage/feed.js +16 -6
  228. package/dist/storage/feed.js.map +1 -1
  229. package/dist/storage/index.d.ts +1 -0
  230. package/dist/storage/index.js +6 -1
  231. package/dist/storage/index.js.map +1 -1
  232. package/dist/storage/storage.d.ts +2 -0
  233. package/dist/storage/storage.js +6 -1
  234. package/dist/storage/storage.js.map +1 -1
  235. package/dist/store/index.d.ts +8 -2
  236. package/dist/store/index.js +13 -3
  237. package/dist/store/index.js.map +1 -1
  238. package/dist/store/store-balance.event.d.ts +33 -0
  239. package/dist/store/store-balance.event.js +90 -0
  240. package/dist/store/store-balance.event.js.map +1 -0
  241. package/dist/store/store-balance.event.spec.d.ts +1 -0
  242. package/dist/store/{event/store-balance.event.spec.js → store-balance.event.spec.js} +8 -8
  243. package/dist/store/store-balance.event.spec.js.map +1 -0
  244. package/dist/store/{event/store-instrument.event.d.ts → store-instrument.event.d.ts} +5 -8
  245. package/dist/store/store-instrument.event.js +52 -0
  246. package/dist/store/store-instrument.event.js.map +1 -0
  247. package/dist/store/store-instrument.event.spec.d.ts +1 -0
  248. package/dist/store/store-instrument.event.spec.js +22 -0
  249. package/dist/store/store-instrument.event.spec.js.map +1 -0
  250. package/dist/store/store-order.event.d.ts +59 -0
  251. package/dist/store/store-order.event.js +181 -0
  252. package/dist/store/store-order.event.js.map +1 -0
  253. package/dist/store/store-order.event.spec.d.ts +1 -0
  254. package/dist/store/{event/store-order.event.spec.js → store-order.event.spec.js} +8 -8
  255. package/dist/store/store-order.event.spec.js.map +1 -0
  256. package/dist/store/{event/store-orderbook.event.d.ts → store-orderbook.event.d.ts} +4 -5
  257. package/dist/store/store-orderbook.event.js +42 -0
  258. package/dist/store/store-orderbook.event.js.map +1 -0
  259. package/dist/store/{event/store-position.event.d.ts → store-position.event.d.ts} +5 -7
  260. package/dist/store/store-position.event.js +77 -0
  261. package/dist/store/store-position.event.js.map +1 -0
  262. package/dist/store/store-state.d.ts +27 -0
  263. package/dist/store/store-state.js +29 -0
  264. package/dist/store/store-state.js.map +1 -0
  265. package/dist/store/{event/store-trade.event.d.ts → store-trade.event.d.ts} +4 -5
  266. package/dist/store/store-trade.event.js +25 -0
  267. package/dist/store/store-trade.event.js.map +1 -0
  268. package/dist/store/store-trade.event.spec.d.ts +1 -0
  269. package/dist/store/{event/store-trade.event.spec.js → store-trade.event.spec.js} +14 -14
  270. package/dist/store/store-trade.event.spec.js.map +1 -0
  271. package/dist/store/store.d.ts +4 -25
  272. package/dist/store/store.event.d.ts +6 -0
  273. package/dist/store/{event/store.event.js → store.event.js} +0 -0
  274. package/dist/store/store.event.js.map +1 -0
  275. package/dist/store/store.js +7 -195
  276. package/dist/store/store.js.map +1 -1
  277. package/dist/store/store.spec.d.ts +1 -0
  278. package/dist/store/store.spec.js +119 -0
  279. package/dist/store/store.spec.js.map +1 -0
  280. package/dist/tsconfig.tsbuildinfo +1 -1
  281. package/{jestconfig.unit.json → jestconfig.json} +1 -2
  282. package/package.json +24 -20
  283. package/src/adapter/adapter-aggregate.ts +31 -34
  284. package/src/adapter/adapter.ts +26 -49
  285. package/src/adapter/backtester/backtester-adapter.spec.ts +124 -0
  286. package/src/adapter/backtester/backtester-adapter.ts +30 -17
  287. package/src/adapter/backtester/backtester-cursor.spec.ts +18 -19
  288. package/src/adapter/backtester/backtester-cursor.ts +7 -7
  289. package/src/adapter/backtester/backtester-streamer.spec.ts +19 -19
  290. package/src/adapter/backtester/backtester-streamer.ts +50 -20
  291. package/src/adapter/error.ts +9 -0
  292. package/src/adapter/paper/engine/paper-engine.spec.ts +92 -0
  293. package/src/adapter/paper/engine/paper-engine.ts +135 -0
  294. package/src/adapter/paper/index.ts +1 -2
  295. package/src/adapter/paper/paper-adapter.spec.ts +55 -17
  296. package/src/adapter/paper/paper-adapter.ts +27 -24
  297. package/src/bootstrap.ts +57 -21
  298. package/src/cli/build.ts +15 -0
  299. package/src/cli/dev.ts +18 -0
  300. package/src/cli/index.ts +81 -0
  301. package/src/cli/internal/workspace.ts +18 -0
  302. package/src/cli/pull.ts +71 -0
  303. package/src/cli/run.ts +22 -0
  304. package/src/cli/test.ts +53 -0
  305. package/src/domain/asset.spec.ts +33 -29
  306. package/src/domain/asset.ts +27 -21
  307. package/src/domain/balance.operator.spec.ts +25 -0
  308. package/src/domain/balance.operator.ts +15 -0
  309. package/src/domain/balance.spec.ts +97 -9
  310. package/src/domain/balance.ts +48 -41
  311. package/src/domain/candle.operator.spec.ts +125 -0
  312. package/src/domain/candle.operator.ts +106 -0
  313. package/src/domain/candle.spec.ts +12 -67
  314. package/src/domain/candle.ts +2 -104
  315. package/src/domain/commission.spec.ts +33 -0
  316. package/src/domain/commission.ts +2 -2
  317. package/src/domain/component.ts +2 -0
  318. package/src/domain/error.ts +25 -0
  319. package/src/domain/index.ts +8 -1
  320. package/src/domain/instrument.operator.spec.ts +28 -0
  321. package/src/domain/instrument.operator.ts +25 -0
  322. package/src/domain/instrument.spec.ts +22 -30
  323. package/src/domain/instrument.ts +21 -11
  324. package/src/domain/order.operator.spec.ts +81 -0
  325. package/src/domain/order.operator.ts +23 -0
  326. package/src/domain/order.spec.ts +43 -0
  327. package/src/domain/order.ts +46 -47
  328. package/src/domain/orderbook.operator.spec.ts +28 -0
  329. package/src/domain/orderbook.operator.ts +15 -0
  330. package/src/domain/orderbook.spec.ts +17 -0
  331. package/src/domain/orderbook.ts +5 -1
  332. package/src/domain/position.operator.spec.ts +58 -0
  333. package/src/domain/position.operator.ts +61 -0
  334. package/src/domain/position.spec.ts +28 -24
  335. package/src/domain/position.ts +17 -47
  336. package/src/domain/session.spec.ts +1 -1
  337. package/src/domain/session.ts +57 -197
  338. package/src/domain/trade.operator.spec.ts +31 -0
  339. package/src/domain/trade.operator.ts +15 -0
  340. package/src/domain/trade.spec.ts +17 -0
  341. package/src/domain/trade.ts +6 -2
  342. package/src/index.ts +0 -1
  343. package/src/indicator/atr.ts +1 -0
  344. package/src/indicator/cross.spec.ts +3 -2
  345. package/src/indicator/donchian.ts +1 -0
  346. package/src/indicator/ema.spec.ts +2 -1
  347. package/src/indicator/ema.ts +1 -0
  348. package/src/indicator/envelope.ts +1 -0
  349. package/src/indicator/macd.ts +1 -0
  350. package/src/indicator/min-max.ts +1 -0
  351. package/src/indicator/rma.ts +1 -0
  352. package/src/indicator/sma.spec.ts +2 -1
  353. package/src/indicator/sma.ts +1 -0
  354. package/src/indicator/swma.ts +1 -0
  355. package/src/indicator/tma.spec.ts +2 -1
  356. package/src/indicator/tma.ts +1 -0
  357. package/src/indicator/trailing.spec.ts +3 -2
  358. package/src/indicator/truerange.spec.ts +2 -1
  359. package/src/indicator/truerange.ts +1 -0
  360. package/src/indicator/window.ts +1 -0
  361. package/src/indicator/wma.spec.ts +2 -1
  362. package/src/indicator/wma.ts +1 -0
  363. package/src/shared/collections.ts +35 -0
  364. package/src/shared/datetime.ts +0 -12
  365. package/src/shared/decimals.spec.ts +2 -1
  366. package/src/shared/decimals.ts +6 -6
  367. package/src/shared/index.ts +1 -3
  368. package/src/shared/io.ts +0 -2
  369. package/src/shared/policy.ts +0 -13
  370. package/src/storage/cache.spec.ts +18 -0
  371. package/src/storage/cache.ts +35 -0
  372. package/src/storage/feed.ts +26 -16
  373. package/src/storage/index.ts +1 -0
  374. package/src/storage/storage.ts +11 -0
  375. package/src/store/index.ts +8 -2
  376. package/src/store/{event/store-balance.event.spec.ts → store-balance.event.spec.ts} +7 -7
  377. package/src/store/store-balance.event.ts +124 -0
  378. package/src/store/store-instrument.event.spec.ts +25 -0
  379. package/src/store/store-instrument.event.ts +72 -0
  380. package/src/store/store-order.event.spec.ts +28 -0
  381. package/src/store/store-order.event.ts +214 -0
  382. package/src/store/store-orderbook.event.ts +54 -0
  383. package/src/store/store-position.event.ts +102 -0
  384. package/src/store/store-state.ts +48 -0
  385. package/src/store/{event/store-trade.event.spec.ts → store-trade.event.spec.ts} +15 -15
  386. package/src/store/store-trade.event.ts +36 -0
  387. package/src/store/store.event.ts +8 -0
  388. package/src/store/store.spec.ts +180 -0
  389. package/src/store/store.ts +11 -208
  390. package/tsconfig.json +2 -2
  391. package/dist/adapter/paper/simulator/paper-margin-simulator.d.ts +0 -10
  392. package/dist/adapter/paper/simulator/paper-margin-simulator.js +0 -69
  393. package/dist/adapter/paper/simulator/paper-margin-simulator.js.map +0 -1
  394. package/dist/adapter/paper/simulator/paper-simulator.d.ts +0 -16
  395. package/dist/adapter/paper/simulator/paper-simulator.js +0 -93
  396. package/dist/adapter/paper/simulator/paper-simulator.js.map +0 -1
  397. package/dist/adapter/paper/simulator/paper-spot-simulator.d.ts +0 -13
  398. package/dist/adapter/paper/simulator/paper-spot-simulator.js +0 -81
  399. package/dist/adapter/paper/simulator/paper-spot-simulator.js.map +0 -1
  400. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js +0 -49
  401. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js.map +0 -1
  402. package/dist/domain/statement.d.ts +0 -4
  403. package/dist/domain/statement.js +0 -87
  404. package/dist/domain/statement.js.map +0 -1
  405. package/dist/ipc.d.ts +0 -33
  406. package/dist/ipc.js +0 -244
  407. package/dist/ipc.js.map +0 -1
  408. package/dist/ipc.spec.js +0 -57
  409. package/dist/ipc.spec.js.map +0 -1
  410. package/dist/shared/policy.spec.js +0 -26
  411. package/dist/shared/policy.spec.js.map +0 -1
  412. package/dist/shared/task.d.ts +0 -6
  413. package/dist/shared/task.js +0 -25
  414. package/dist/shared/task.js.map +0 -1
  415. package/dist/shared/topic.d.ts +0 -14
  416. package/dist/shared/topic.js +0 -40
  417. package/dist/shared/topic.js.map +0 -1
  418. package/dist/shared/topic.spec.js +0 -43
  419. package/dist/shared/topic.spec.js.map +0 -1
  420. package/dist/shared/worker.d.ts +0 -10
  421. package/dist/shared/worker.js +0 -46
  422. package/dist/shared/worker.js.map +0 -1
  423. package/dist/shared/worker.spec.js +0 -18
  424. package/dist/shared/worker.spec.js.map +0 -1
  425. package/dist/store/event/index.d.ts +0 -8
  426. package/dist/store/event/index.js +0 -21
  427. package/dist/store/event/index.js.map +0 -1
  428. package/dist/store/event/store-balance.event.d.ts +0 -37
  429. package/dist/store/event/store-balance.event.js +0 -119
  430. package/dist/store/event/store-balance.event.js.map +0 -1
  431. package/dist/store/event/store-balance.event.spec.js.map +0 -1
  432. package/dist/store/event/store-candle.event.d.ts +0 -18
  433. package/dist/store/event/store-candle.event.js +0 -63
  434. package/dist/store/event/store-candle.event.js.map +0 -1
  435. package/dist/store/event/store-candle.event.spec.js +0 -23
  436. package/dist/store/event/store-candle.event.spec.js.map +0 -1
  437. package/dist/store/event/store-instrument.event.js +0 -78
  438. package/dist/store/event/store-instrument.event.js.map +0 -1
  439. package/dist/store/event/store-instrument.event.spec.js +0 -21
  440. package/dist/store/event/store-instrument.event.spec.js.map +0 -1
  441. package/dist/store/event/store-order.event.d.ts +0 -61
  442. package/dist/store/event/store-order.event.js +0 -205
  443. package/dist/store/event/store-order.event.js.map +0 -1
  444. package/dist/store/event/store-order.event.spec.js.map +0 -1
  445. package/dist/store/event/store-orderbook.event.js +0 -65
  446. package/dist/store/event/store-orderbook.event.js.map +0 -1
  447. package/dist/store/event/store-position.event.js +0 -97
  448. package/dist/store/event/store-position.event.js.map +0 -1
  449. package/dist/store/event/store-trade.event.js +0 -47
  450. package/dist/store/event/store-trade.event.js.map +0 -1
  451. package/dist/store/event/store-trade.event.spec.js.map +0 -1
  452. package/dist/store/event/store.event.d.ts +0 -5
  453. package/dist/store/event/store.event.js.map +0 -1
  454. package/dist/store/store.state.d.ts +0 -21
  455. package/dist/store/store.state.js +0 -21
  456. package/dist/store/store.state.js.map +0 -1
  457. package/dist/tests/backtester-adapter.spec.js +0 -60
  458. package/dist/tests/backtester-adapter.spec.js.map +0 -1
  459. package/dist/tests/session.spec.d.ts +0 -0
  460. package/dist/tests/session.spec.js +0 -1
  461. package/dist/tests/session.spec.js.map +0 -1
  462. package/jestconfig.integration.json +0 -12
  463. package/src/adapter/paper/simulator/paper-margin-simulator.ts +0 -108
  464. package/src/adapter/paper/simulator/paper-simulator.ts +0 -120
  465. package/src/adapter/paper/simulator/paper-spot-simulator.spec.ts +0 -87
  466. package/src/adapter/paper/simulator/paper-spot-simulator.ts +0 -134
  467. package/src/domain/statement.ts +0 -118
  468. package/src/ipc.spec.ts +0 -73
  469. package/src/ipc.ts +0 -321
  470. package/src/shared/policy.spec.ts +0 -29
  471. package/src/shared/task.ts +0 -30
  472. package/src/shared/topic.spec.ts +0 -34
  473. package/src/shared/topic.ts +0 -43
  474. package/src/shared/worker.spec.ts +0 -25
  475. package/src/shared/worker.ts +0 -55
  476. package/src/store/event/index.ts +0 -8
  477. package/src/store/event/store-balance.event.ts +0 -161
  478. package/src/store/event/store-candle.event.spec.ts +0 -30
  479. package/src/store/event/store-candle.event.ts +0 -71
  480. package/src/store/event/store-instrument.event.spec.ts +0 -25
  481. package/src/store/event/store-instrument.event.ts +0 -84
  482. package/src/store/event/store-order.event.spec.ts +0 -28
  483. package/src/store/event/store-order.event.ts +0 -218
  484. package/src/store/event/store-orderbook.event.ts +0 -70
  485. package/src/store/event/store-position.event.ts +0 -109
  486. package/src/store/event/store-trade.event.ts +0 -52
  487. package/src/store/event/store.event.ts +0 -6
  488. package/src/store/store.state.ts +0 -43
  489. package/src/tests/backtester-adapter.spec.ts +0 -87
  490. package/src/tests/session.spec.ts +0 -121
@@ -1,22 +1,19 @@
1
1
  import {
2
- concat,
3
2
  defer,
4
- distinctUntilChanged,
5
3
  filter,
4
+ finalize,
6
5
  from,
7
6
  map,
8
- merge,
9
7
  mergeMap,
10
8
  Observable,
11
- share,
12
9
  shareReplay,
13
10
  startWith,
14
- Subject,
15
11
  Subscription,
16
12
  switchMap,
17
13
  take
18
14
  } from 'rxjs';
19
- import { Adapter, BacktesterOptions, PaperOptions } from '../adapter';
15
+
16
+ import { AdapterFactory, BacktesterOptions, PaperOptions } from '../adapter';
20
17
  import { AdapterAggregate } from '../adapter/adapter-aggregate';
21
18
  import {
22
19
  AssetSelector,
@@ -26,28 +23,21 @@ import {
26
23
  InstrumentSelector,
27
24
  Order,
28
25
  Orderbook,
29
- OrderState,
30
- Position
26
+ Position,
27
+ Trade
31
28
  } from '../domain';
32
- import { Trade } from '../domain/trade';
33
- import { now, Worker } from '../shared';
34
- import { Feed, Measurement } from '../storage';
29
+ import { now } from '../shared';
30
+ import { StorageFactory } from '../storage';
35
31
  import { Store } from '../store';
36
-
37
- type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
32
+ import { balance } from './balance.operator';
33
+ import { instrument, instruments } from './instrument.operator';
34
+ import { order, orders } from './order.operator';
35
+ import { orderbook } from './orderbook.operator';
36
+ import { position, positions } from './position.operator';
37
+ import { trade } from './trade.operator';
38
38
 
39
39
  /**
40
40
  * Describes a single session.
41
- * You can use @run function to start a new session managed by CLI.
42
- * To start managed session you should install @quantform/cli package and run
43
- * specific command:
44
- * - qf paper (to paper trade strategy)
45
- * - qf backtest (to backtest strategy based on provided feed)
46
- * - qf live (to live trade strategy)
47
- * or run on your own in code:
48
- * - paper(descriptor, options)
49
- * - backtest(descriptor, options)
50
- * - live(descriptor)
51
41
  */
52
42
  export interface SessionDescriptor {
53
43
  /**
@@ -61,40 +51,29 @@ export interface SessionDescriptor {
61
51
  /**
62
52
  * Collection of adapters used to connect to the exchanges.
63
53
  */
64
- adapter: Adapter[];
54
+ adapter: AdapterFactory[];
65
55
 
66
56
  /**
67
57
  * Provides historical data for backtest, it's not required for live and paper
68
- * sessions.
69
- */
70
- feed?: Feed;
71
-
72
- /**
73
- * Stores session variables i.e. indicators, orders, or any other type of time
58
+ * sessions. Stores session variables i.e. indicators, orders, or any other type of time
74
59
  * series data. You can install @quantform/editor to render this data in your browser.
75
60
  */
76
- measurement?: Measurement;
61
+ storage?: StorageFactory;
77
62
 
78
63
  /**
79
64
  * Session additional options.
80
65
  */
81
- options?: {
82
- backtester?: BacktesterOptions;
83
- paper?: PaperOptions;
84
- };
66
+ simulation?: PaperOptions & BacktesterOptions;
85
67
  }
86
68
 
87
69
  export class Session {
88
70
  private initialized = false;
89
71
  private subscription: Subscription;
90
- private worker = new Worker();
91
72
 
92
73
  get timestamp(): number {
93
74
  return this.store.snapshot.timestamp;
94
75
  }
95
76
 
96
- readonly statement: Record<string, Record<string, any>> = {};
97
-
98
77
  constructor(
99
78
  readonly store: Store,
100
79
  readonly aggregate: AdapterAggregate,
@@ -117,7 +96,9 @@ export class Session {
117
96
  await this.aggregate.awake();
118
97
 
119
98
  if (describe) {
120
- this.subscription = describe(this).subscribe();
99
+ this.subscription = describe(this)
100
+ .pipe(finalize(() => this.dispose()))
101
+ .subscribe();
121
102
  }
122
103
  }
123
104
 
@@ -126,70 +107,16 @@ export class Session {
126
107
  return;
127
108
  }
128
109
 
129
- this.store.dispose();
130
-
131
110
  if (this.subscription) {
132
111
  this.subscription.unsubscribe();
112
+ this.subscription = undefined;
133
113
  }
134
114
 
135
- await this.aggregate.dispose();
136
- await this.worker.wait();
137
- }
138
-
139
- useStatement(section: string): Record<string, any> {
140
- return this.statement[section] ?? (this.statement[section] = {});
141
- }
142
-
143
- /**
144
- * Returns last stored measurement and setter for it in session.
145
- * For example you can save and restore variables in same session between runs.
146
- * Example usage:
147
- * const [order$, setOrder] = session.measurement<Order>('order');
148
- *
149
- * order.pipe(tap(it => console.log(`your last order was: ${it}`)));
150
- *
151
- * setOrder(order);
152
- */
153
- useMeasure<T extends { timestamp: number }>(
154
- params: { kind: string; timestamp?: number },
155
- defaultValue: T = undefined
156
- ): [Observable<T>, (value: Optional<T, 'timestamp'>) => void] {
157
- const stored$ = from(
158
- this.descriptor.measurement.query(this.descriptor.id, {
159
- to: params.timestamp ?? this.timestamp,
160
- kind: params.kind,
161
- count: 1
162
- })
163
- ).pipe(
164
- map(it =>
165
- it.length ? { timestamp: it[0].timestamp, ...it[0].payload } : defaultValue
166
- ),
167
- share()
168
- );
169
-
170
- const subject$ = new Subject<T>();
171
-
172
- const setter = (value: T) => {
173
- const timestamp = value.timestamp ?? this.timestamp;
174
- const measure = { timestamp, kind: params.kind, payload: value };
175
-
176
- this.worker.enqueue(() =>
177
- this.descriptor.measurement.save(this.descriptor.id, [measure])
178
- );
115
+ this.store.dispose();
179
116
 
180
- subject$.next({ ...value, timestamp });
181
- };
117
+ await this.aggregate.dispose();
182
118
 
183
- return [concat(stored$, subject$.asObservable()), setter];
184
- }
185
-
186
- /**
187
- * Return values for patch provided in optimization file.
188
- * Example usage:
189
- * const orderSize = session.useOptimizer('order.size');
190
- */
191
- useOptimizer(path: string): any {
192
- return undefined;
119
+ this.initialized = false;
193
120
  }
194
121
 
195
122
  /**
@@ -202,26 +129,21 @@ export class Session {
202
129
 
203
130
  /**
204
131
  * Opens a new order.
205
- * Example:
206
- * session.open(Order.buyMarket(instrument, 100));
132
+ * Example of buy order:
133
+ * session.open(Order.market(instrument, 100));
207
134
  */
208
- open(order: Order): Observable<Order> {
209
- const subject = new Subject<Order>();
210
-
211
- this.aggregate.open(order).catch(subject.error);
212
-
213
- return merge(
214
- subject.asObservable(),
215
- this.order(order.instrument).pipe(filter(it => it.id == order.id))
135
+ open(order: Order): Observable<Readonly<Order>> {
136
+ return from(this.aggregate.open(order)).pipe(
137
+ switchMap(() => this.order(order.instrument).pipe(filter(it => it.id == order.id)))
216
138
  );
217
139
  }
218
140
 
219
141
  /**
220
142
  * Cancels specific order.
221
143
  */
222
- cancel(order: Order): Observable<Order> {
144
+ cancel(order: Order): Observable<Readonly<Order>> {
223
145
  return defer(() => from(this.aggregate.cancel(order))).pipe(
224
- switchMap(it =>
146
+ switchMap(() =>
225
147
  this.store.changes$.pipe(filter(it => it instanceof Order && order.id == it.id))
226
148
  ),
227
149
  map(it => it as Order)
@@ -232,146 +154,84 @@ export class Session {
232
154
  * Subscribes to specific instrument changes.
233
155
  * When adapter awake then it will fetch collection of all available instruments.
234
156
  */
235
- instrument(selector: InstrumentSelector): Observable<Instrument> {
157
+ instrument(selector: InstrumentSelector): Observable<Readonly<Instrument>> {
236
158
  this.subscribe([selector]);
237
159
 
238
- return this.store.changes$.pipe(
239
- filter(it => it instanceof Instrument && it.toString() == selector.toString()),
240
- map(it => it as Instrument)
241
- );
160
+ return this.store.changes$.pipe(instrument(selector, this.store.snapshot));
242
161
  }
243
162
 
244
163
  /**
245
164
  * Subscribes to instruments changes.
246
165
  * When adapter awake then it will fetch collection of all available instruments.
247
166
  */
248
- instruments(): Observable<Instrument[]> {
249
- return this.store.changes$.pipe(
250
- filter(it => it instanceof Instrument),
251
- map(() => Object.values(this.store.snapshot.universe.instrument)),
252
- startWith(Object.values(this.store.snapshot.universe.instrument)),
253
- filter(it => it.length > 0),
254
- distinctUntilChanged((lhs, rhs) => lhs.length == rhs.length)
255
- );
167
+ instruments(): Observable<Readonly<Instrument[]>> {
168
+ return this.store.changes$.pipe(instruments(this.store.snapshot));
169
+ }
170
+
171
+ /**
172
+ * Subscribes to balance changes.
173
+ */
174
+ balance(selector: AssetSelector): Observable<Readonly<Balance>> {
175
+ return this.store.changes$.pipe(balance(selector, this.store.snapshot));
256
176
  }
257
177
 
258
178
  /**
259
179
  * Subscribes to trade/ticker changes.
260
180
  */
261
- trade(selector: InstrumentSelector): Observable<Trade> {
181
+ trade(selector: InstrumentSelector): Observable<Readonly<Trade>> {
262
182
  this.subscribe([selector]);
263
183
 
264
- return this.store.changes$.pipe(
265
- filter(
266
- it => it instanceof Trade && it.instrument.toString() == selector.toString()
267
- ),
268
- map(it => it as Trade)
269
- );
184
+ return this.store.changes$.pipe(trade(selector, this.store.snapshot));
270
185
  }
271
186
 
272
187
  /**
273
188
  * Subscribes to orderbook changes.
274
189
  * Right now you can access only best bid and best ask.
275
190
  */
276
- orderbook(selector: InstrumentSelector): Observable<Orderbook> {
191
+ orderbook(selector: InstrumentSelector): Observable<Readonly<Orderbook>> {
277
192
  this.subscribe([selector]);
278
193
 
279
- return this.store.changes$.pipe(
280
- filter(
281
- it => it instanceof Orderbook && it.instrument.toString() == selector.toString()
282
- ),
283
- map(it => it as Orderbook)
284
- );
194
+ return this.store.changes$.pipe(orderbook(selector, this.store.snapshot));
285
195
  }
286
196
 
287
197
  /**
288
198
  * Subscribes to position on leveraged market.
289
199
  */
290
- position(selector: InstrumentSelector): Observable<Position> {
200
+ position(selector: InstrumentSelector): Observable<Readonly<Position>> {
291
201
  this.subscribe([selector]);
292
202
 
293
- return this.store.changes$.pipe(
294
- filter(
295
- it => it instanceof Position && it.instrument.toString() == selector.toString()
296
- ),
297
- map(it => it as Position)
298
- );
203
+ return this.store.changes$.pipe(position(selector));
299
204
  }
300
205
 
301
206
  /**
302
207
  * Subscribes to positions on leveraged markets.
303
208
  */
304
- positions(selector: InstrumentSelector): Observable<Position[]> {
209
+ positions(selector: InstrumentSelector): Observable<Readonly<Position[]>> {
305
210
  this.subscribe([selector]);
306
211
 
307
- return this.store.changes$.pipe(
308
- filter(
309
- it => it instanceof Position && it.instrument.toString() == selector.toString()
310
- ),
311
- map(() =>
312
- Object.values(
313
- this.store.snapshot.balance[selector.quote.toString()].position
314
- ).filter(it => it.instrument.toString() == selector.toString())
315
- ),
316
- startWith([])
317
- );
212
+ return this.store.changes$.pipe(positions(selector, this.store.snapshot));
318
213
  }
319
214
 
320
- order(selector: InstrumentSelector): Observable<Order> {
215
+ order(selector: InstrumentSelector): Observable<Readonly<Order>> {
321
216
  this.subscribe([selector]);
322
217
 
323
- return this.store.changes$.pipe(
324
- filter(
325
- it => it instanceof Order && it.instrument.toString() == selector.toString()
326
- ),
327
- map(it => it as Order)
328
- );
218
+ return this.store.changes$.pipe(order(selector));
329
219
  }
330
220
 
331
- orders(selector: InstrumentSelector, states?: OrderState[]): Observable<Order[]> {
221
+ orders(selector: InstrumentSelector): Observable<Readonly<Order[]>> {
332
222
  this.subscribe([selector]);
333
223
 
334
- return this.store.changes$.pipe(
335
- filter(
336
- it =>
337
- it instanceof Order &&
338
- it.instrument.toString() == selector.toString() &&
339
- (!states || states.includes(it.state))
340
- ),
341
- map(() => this.store.snapshot.order),
342
- startWith(this.store.snapshot.order),
343
- map(it =>
344
- Object.values(it)
345
- .filter(
346
- it =>
347
- it.instrument.toString() == selector.toString() &&
348
- (states ? states.includes(it.state) : true)
349
- )
350
- .sort((lhs, rhs) => rhs.createdAt - lhs.createdAt)
351
- )
352
- );
353
- }
354
-
355
- balance(selector: AssetSelector): Observable<Balance> {
356
- return this.store.changes$.pipe(
357
- startWith(this.store.snapshot.balance[selector.toString()]),
358
- filter(
359
- it =>
360
- it instanceof Balance &&
361
- (!selector || it.asset.toString() == selector.toString())
362
- ),
363
- map(it => it as Balance)
364
- );
224
+ return this.store.changes$.pipe(orders(selector, this.store.snapshot));
365
225
  }
366
226
 
367
227
  history(
368
228
  selector: InstrumentSelector,
369
229
  timeframe: number,
370
230
  length: number
371
- ): Observable<Candle> {
231
+ ): Observable<Readonly<Candle>> {
372
232
  return this.store.changes$.pipe(
373
- startWith(this.store.snapshot.universe.instrument[selector.toString()]),
374
- filter(it => it instanceof Instrument && it.toString() == selector.toString()),
233
+ startWith(this.store.snapshot.universe.instrument.get(selector.id)),
234
+ filter(it => it instanceof Instrument && it.id == selector.id),
375
235
  switchMap(() =>
376
236
  from(this.aggregate.history({ instrument: selector, timeframe, length }))
377
237
  ),
@@ -0,0 +1,31 @@
1
+ import { Subject } from 'rxjs';
2
+
3
+ import { State } from '../store';
4
+ import { Asset } from './asset';
5
+ import { Component } from './component';
6
+ import { Instrument } from './instrument';
7
+ import { Trade } from './trade';
8
+ import { trade } from './trade.operator';
9
+
10
+ describe('trade', () => {
11
+ const instrument = new Instrument(
12
+ new Asset('abc', 'xyz', 4),
13
+ new Asset('def', 'xyz', 4),
14
+ 'abc-def'
15
+ );
16
+
17
+ const state = new State();
18
+
19
+ beforeEach(() => {
20
+ state.trade.upsert(new Trade(instrument));
21
+ });
22
+
23
+ test('should pipe an orderbook on subscription', done => {
24
+ new Subject<Component>().pipe(trade(instrument, state)).subscribe({
25
+ next: it => {
26
+ expect(it.id).toEqual(instrument.id);
27
+ done();
28
+ }
29
+ });
30
+ });
31
+ });
@@ -0,0 +1,15 @@
1
+ import { filter, map, Observable, startWith } from 'rxjs';
2
+
3
+ import { State } from '../store';
4
+ import { Component } from './component';
5
+ import { InstrumentSelector } from './instrument';
6
+ import { Trade } from './trade';
7
+
8
+ export function trade(selector: InstrumentSelector, state: State) {
9
+ return (source$: Observable<Component>) =>
10
+ source$.pipe(
11
+ startWith(state.trade.get(selector.id)),
12
+ filter(it => it instanceof Trade && it.instrument.id == selector.id),
13
+ map(it => it as Trade)
14
+ );
15
+ }
@@ -0,0 +1,17 @@
1
+ import { Asset } from './asset';
2
+ import { Instrument } from './instrument';
3
+ import { Trade } from './trade';
4
+
5
+ describe('Trade', () => {
6
+ const instrument = new Instrument(
7
+ new Asset('abc', 'xyz', 4),
8
+ new Asset('def', 'xyz', 4),
9
+ 'abc-def'
10
+ );
11
+
12
+ test('should construct an empty trade', () => {
13
+ const sut = new Trade(instrument);
14
+
15
+ expect(sut.id).toEqual(instrument.id);
16
+ });
17
+ });
@@ -1,5 +1,5 @@
1
- import { Instrument } from '.';
2
1
  import { timestamp } from '../shared';
2
+ import { Instrument } from '.';
3
3
  import { Component } from './component';
4
4
 
5
5
  /**
@@ -7,11 +7,15 @@ import { Component } from './component';
7
7
  * and seller of the same asset.
8
8
  */
9
9
  export class Trade implements Component {
10
+ id: string;
11
+ kind = 'trade';
10
12
  timestamp: timestamp;
11
13
  rate: number;
12
14
  quantity: number;
13
15
 
14
- constructor(public readonly instrument: Instrument) {}
16
+ constructor(public readonly instrument: Instrument) {
17
+ this.id = instrument.id;
18
+ }
15
19
 
16
20
  toString() {
17
21
  return this.instrument.toString();
package/src/index.ts CHANGED
@@ -2,7 +2,6 @@ export * from './adapter';
2
2
  export * from './bootstrap';
3
3
  export * from './domain';
4
4
  export * from './indicator';
5
- export * from './ipc';
6
5
  export * from './shared';
7
6
  export * from './storage';
8
7
  export * from './store';
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { Candle } from '../domain';
3
4
  import { rma } from './rma';
4
5
  import { truerange } from './truerange';
@@ -1,7 +1,8 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { crossover, crossunder } from './cross';
3
4
 
4
- describe('crossunder tests', () => {
5
+ describe('crossunder', () => {
5
6
  test('should crossunder uptrend once', done => {
6
7
  from([1, 2, 3, 4, 5])
7
8
  .pipe(
@@ -75,7 +76,7 @@ describe('crossunder tests', () => {
75
76
  });
76
77
  });
77
78
 
78
- describe('crossover tests', () => {
79
+ describe('crossover', () => {
79
80
  test('should crossover downtrend once', done => {
80
81
  from([5, 4, 3, 2, 1])
81
82
  .pipe(
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share, withLatestFrom } from 'rxjs';
2
+
2
3
  import { Candle } from '../domain';
3
4
  import { minMax } from './min-max';
4
5
 
@@ -1,7 +1,8 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { ema } from './ema';
3
4
 
4
- describe('ema tests', () => {
5
+ describe('ema', () => {
5
6
  test('should return expected value', done => {
6
7
  let value;
7
8
 
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { sma } from './sma';
3
4
 
4
5
  export function ema<T>(length: number, fn: (it: T) => number) {
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { sma } from './sma';
3
4
 
4
5
  export function envelope<T>(length: number, percent: number, valueFn: (it: T) => number) {
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share, withLatestFrom } from 'rxjs';
2
+
2
3
  import { ema } from './ema';
3
4
 
4
5
  export function macd<T>(
@@ -1,4 +1,5 @@
1
1
  import { filter, map, Observable, share } from 'rxjs';
2
+
2
3
  import { window } from './window';
3
4
 
4
5
  export function minMax<T>(length: number, fn: (it: T) => number) {
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { sma } from '.';
3
4
 
4
5
  export function rma<T>(length: number, fn: (it: T) => number) {
@@ -1,7 +1,8 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { sma } from './sma';
3
4
 
4
- describe('sma tests', () => {
5
+ describe('sma', () => {
5
6
  test('should return expected value', done => {
6
7
  let value;
7
8
 
@@ -1,4 +1,5 @@
1
1
  import { filter, map, Observable, share, tap } from 'rxjs';
2
+
2
3
  import { window } from './window';
3
4
 
4
5
  export function sma<T>(length: number, fn: (it: T) => number) {
@@ -1,4 +1,5 @@
1
1
  import { filter, map, Observable, share } from 'rxjs';
2
+
2
3
  import { window } from './window';
3
4
 
4
5
  export function swma<T>(fn: (it: T) => number) {
@@ -1,7 +1,8 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { tma } from './tma';
3
4
 
4
- describe('tma tests', () => {
5
+ describe('tma', () => {
5
6
  test('should return expected value', done => {
6
7
  let value;
7
8
 
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { swma } from './swma';
3
4
  import { wma } from './wma';
4
5
 
@@ -1,7 +1,8 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { trailingdown, trailingup } from './trailing';
3
4
 
4
- describe('trailing up tests', () => {
5
+ describe('trailingup', () => {
5
6
  test('should trigger uptrend once', done => {
6
7
  let triggered = false;
7
8
 
@@ -37,7 +38,7 @@ describe('trailing up tests', () => {
37
38
  });
38
39
  });
39
40
 
40
- describe('trailingdown tests', () => {
41
+ describe('trailingdown', () => {
41
42
  test('should trigger downtrend once', done => {
42
43
  let triggered = false;
43
44
 
@@ -1,10 +1,11 @@
1
1
  import { from } from 'rxjs';
2
+
2
3
  import { Candle } from '../domain';
3
4
  import { now } from '../shared';
4
5
  import { sma } from './sma';
5
6
  import { truerange } from './truerange';
6
7
 
7
- describe('truerange atr tests', () => {
8
+ describe('truerange', () => {
8
9
  test('should return expected value', done => {
9
10
  let value;
10
11
 
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { Candle } from '../domain';
3
4
 
4
5
  export function truerange<T>(fn: (it: T) => Candle) {
@@ -1,4 +1,5 @@
1
1
  import { map, Observable, share } from 'rxjs';
2
+
2
3
  import { RingBuffer } from './ring-buffer';
3
4
 
4
5
  export function window<T, Y>(length: number, fn: (value: T) => Y) {