@quantform/core 0.3.265 → 0.3.274

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 (250) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +2 -2
  2. package/dist/adapter/adapter-aggregate.js.map +1 -1
  3. package/dist/adapter/adapter.d.ts +5 -6
  4. package/dist/adapter/adapter.js.map +1 -1
  5. package/dist/adapter/backtester/backtester-adapter.d.ts +6 -6
  6. package/dist/adapter/backtester/backtester-adapter.js +5 -9
  7. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  8. package/dist/adapter/backtester/backtester-cursor.d.ts +2 -2
  9. package/dist/adapter/backtester/backtester-cursor.spec.js +9 -9
  10. package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
  11. package/dist/adapter/backtester/backtester-streamer.d.ts +6 -4
  12. package/dist/adapter/backtester/backtester-streamer.js +5 -5
  13. package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
  14. package/dist/adapter/backtester/backtester-streamer.spec.js +9 -11
  15. package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
  16. package/dist/adapter/index.d.ts +2 -0
  17. package/dist/adapter/index.js +2 -0
  18. package/dist/adapter/index.js.map +1 -1
  19. package/dist/adapter/paper/index.d.ts +2 -2
  20. package/dist/adapter/paper/index.js +2 -2
  21. package/dist/adapter/paper/index.js.map +1 -1
  22. package/dist/adapter/paper/paper-adapter.d.ts +5 -5
  23. package/dist/adapter/paper/paper-adapter.js +9 -12
  24. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  25. package/dist/adapter/paper/paper-adapter.spec.js +5 -7
  26. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  27. package/dist/adapter/paper/{executor/paper-margin-executor.d.ts → simulator/paper-margin-simulator.d.ts} +3 -3
  28. package/dist/adapter/paper/{executor/paper-margin-executor.js → simulator/paper-margin-simulator.js} +11 -11
  29. package/dist/adapter/paper/simulator/paper-margin-simulator.js.map +1 -0
  30. package/dist/adapter/paper/{executor/paper-executor.d.ts → simulator/paper-simulator.d.ts} +2 -2
  31. package/dist/adapter/paper/{executor/paper-executor.js → simulator/paper-simulator.js} +7 -7
  32. package/dist/adapter/paper/simulator/paper-simulator.js.map +1 -0
  33. package/dist/adapter/paper/{executor/paper-spot-executor.d.ts → simulator/paper-spot-simulator.d.ts} +3 -3
  34. package/dist/adapter/paper/{executor/paper-spot-executor.js → simulator/paper-spot-simulator.js} +17 -17
  35. package/dist/adapter/paper/simulator/paper-spot-simulator.js.map +1 -0
  36. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.d.ts +1 -0
  37. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js +49 -0
  38. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js.map +1 -0
  39. package/dist/bootstrap.d.ts +1 -1
  40. package/dist/bootstrap.js +3 -5
  41. package/dist/bootstrap.js.map +1 -1
  42. package/dist/domain/balance.d.ts +1 -1
  43. package/dist/domain/candle.d.ts +14 -0
  44. package/dist/domain/candle.js +65 -1
  45. package/dist/domain/candle.js.map +1 -1
  46. package/dist/domain/candle.spec.js +11 -13
  47. package/dist/domain/candle.spec.js.map +1 -1
  48. package/dist/domain/index.d.ts +6 -8
  49. package/dist/domain/index.js +6 -8
  50. package/dist/domain/index.js.map +1 -1
  51. package/dist/domain/order.d.ts +1 -1
  52. package/dist/domain/order.js.map +1 -1
  53. package/dist/domain/orderbook.d.ts +1 -1
  54. package/dist/domain/position.d.ts +2 -2
  55. package/dist/domain/position.js +3 -3
  56. package/dist/domain/position.js.map +1 -1
  57. package/dist/domain/session.d.ts +14 -3
  58. package/dist/domain/session.js +17 -18
  59. package/dist/domain/session.js.map +1 -1
  60. package/dist/domain/session.spec.js +3 -3
  61. package/dist/domain/session.spec.js.map +1 -1
  62. package/dist/domain/statement.d.ts +1 -2
  63. package/dist/domain/statement.js.map +1 -1
  64. package/dist/domain/trade.d.ts +1 -1
  65. package/dist/index.d.ts +4 -7
  66. package/dist/index.js +4 -7
  67. package/dist/index.js.map +1 -1
  68. package/dist/indicator/atr.js +3 -3
  69. package/dist/indicator/atr.js.map +1 -1
  70. package/dist/indicator/cross.js +3 -3
  71. package/dist/indicator/cross.js.map +1 -1
  72. package/dist/indicator/donchian.js +3 -4
  73. package/dist/indicator/donchian.js.map +1 -1
  74. package/dist/indicator/drawdown.js +3 -3
  75. package/dist/indicator/drawdown.js.map +1 -1
  76. package/dist/indicator/ema.js +3 -3
  77. package/dist/indicator/ema.js.map +1 -1
  78. package/dist/indicator/envelope.js +3 -3
  79. package/dist/indicator/envelope.js.map +1 -1
  80. package/dist/indicator/index.d.ts +3 -3
  81. package/dist/indicator/index.js +3 -3
  82. package/dist/indicator/index.js.map +1 -1
  83. package/dist/indicator/macd.js +2 -3
  84. package/dist/indicator/macd.js.map +1 -1
  85. package/dist/indicator/min-max.js +3 -3
  86. package/dist/indicator/min-max.js.map +1 -1
  87. package/dist/indicator/rma.js +3 -3
  88. package/dist/indicator/rma.js.map +1 -1
  89. package/dist/indicator/sma.js +2 -3
  90. package/dist/indicator/sma.js.map +1 -1
  91. package/dist/indicator/swma.js +3 -3
  92. package/dist/indicator/swma.js.map +1 -1
  93. package/dist/indicator/tma.js +3 -3
  94. package/dist/indicator/tma.js.map +1 -1
  95. package/dist/indicator/trailing.js +3 -3
  96. package/dist/indicator/trailing.js.map +1 -1
  97. package/dist/indicator/truerange.js +3 -3
  98. package/dist/indicator/truerange.js.map +1 -1
  99. package/dist/indicator/truerange.spec.js +2 -2
  100. package/dist/indicator/truerange.spec.js.map +1 -1
  101. package/dist/indicator/wma.js +3 -3
  102. package/dist/indicator/wma.js.map +1 -1
  103. package/dist/ipc.d.ts +1 -1
  104. package/dist/ipc.js +3 -3
  105. package/dist/ipc.js.map +1 -1
  106. package/dist/ipc.spec.js +4 -5
  107. package/dist/ipc.spec.js.map +1 -1
  108. package/dist/shared/index.d.ts +4 -4
  109. package/dist/shared/index.js +4 -4
  110. package/dist/shared/index.js.map +1 -1
  111. package/dist/shared/policy.js +1 -1
  112. package/dist/shared/policy.js.map +1 -1
  113. package/dist/storage/feed.d.ts +1 -1
  114. package/dist/storage/feed.js.map +1 -1
  115. package/dist/storage/index.d.ts +1 -1
  116. package/dist/storage/index.js +1 -1
  117. package/dist/storage/index.js.map +1 -1
  118. package/dist/storage/measurement.js.map +1 -1
  119. package/dist/storage/storage.js.map +1 -1
  120. package/dist/store/event/index.d.ts +4 -4
  121. package/dist/store/event/index.js +4 -4
  122. package/dist/store/event/index.js.map +1 -1
  123. package/dist/store/event/store-balance.event.d.ts +1 -1
  124. package/dist/store/event/store-balance.event.js +1 -1
  125. package/dist/store/event/store-balance.event.js.map +1 -1
  126. package/dist/store/event/store-balance.event.spec.js +3 -3
  127. package/dist/store/event/store-balance.event.spec.js.map +1 -1
  128. package/dist/store/event/store-candle.event.d.ts +2 -2
  129. package/dist/store/event/store-candle.event.js +2 -2
  130. package/dist/store/event/store-candle.event.js.map +1 -1
  131. package/dist/store/event/store-candle.event.spec.js +1 -1
  132. package/dist/store/event/store-candle.event.spec.js.map +1 -1
  133. package/dist/store/event/store-instrument.event.d.ts +1 -1
  134. package/dist/store/event/store-instrument.event.js +1 -1
  135. package/dist/store/event/store-instrument.event.js.map +1 -1
  136. package/dist/store/event/store-instrument.event.spec.js +1 -1
  137. package/dist/store/event/store-instrument.event.spec.js.map +1 -1
  138. package/dist/store/event/store-order.event.d.ts +1 -1
  139. package/dist/store/event/store-order.event.js +1 -1
  140. package/dist/store/event/store-order.event.js.map +1 -1
  141. package/dist/store/event/store-order.event.spec.js +2 -2
  142. package/dist/store/event/store-order.event.spec.js.map +1 -1
  143. package/dist/store/event/store-orderbook.event.d.ts +1 -1
  144. package/dist/store/event/store-orderbook.event.js +1 -1
  145. package/dist/store/event/store-orderbook.event.js.map +1 -1
  146. package/dist/store/event/store-position.event.d.ts +1 -1
  147. package/dist/store/event/store-position.event.js +1 -1
  148. package/dist/store/event/store-position.event.js.map +1 -1
  149. package/dist/store/event/store-trade.event.d.ts +1 -1
  150. package/dist/store/event/store-trade.event.js +1 -1
  151. package/dist/store/event/store-trade.event.js.map +1 -1
  152. package/dist/store/event/store-trade.event.spec.js +2 -2
  153. package/dist/store/event/store-trade.event.spec.js.map +1 -1
  154. package/dist/store/index.d.ts +1 -0
  155. package/dist/store/index.js +1 -0
  156. package/dist/store/index.js.map +1 -1
  157. package/dist/store/store.d.ts +2 -5
  158. package/dist/store/store.js +4 -8
  159. package/dist/store/store.js.map +1 -1
  160. package/dist/store/store.state.d.ts +1 -1
  161. package/dist/tests/backtester-adapter.spec.js +8 -15
  162. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  163. package/dist/tests/session.spec.d.ts +0 -1
  164. package/dist/tests/session.spec.js +0 -2
  165. package/dist/tsconfig.tsbuildinfo +1 -1
  166. package/package.json +1 -1
  167. package/src/adapter/adapter-aggregate.ts +2 -3
  168. package/src/adapter/adapter.ts +5 -6
  169. package/src/adapter/backtester/backtester-adapter.ts +8 -8
  170. package/src/adapter/backtester/backtester-cursor.spec.ts +1 -1
  171. package/src/adapter/backtester/backtester-cursor.ts +2 -2
  172. package/src/adapter/backtester/backtester-streamer.spec.ts +1 -3
  173. package/src/adapter/backtester/backtester-streamer.ts +7 -8
  174. package/src/adapter/index.ts +2 -0
  175. package/src/adapter/paper/index.ts +2 -2
  176. package/src/adapter/paper/paper-adapter.spec.ts +6 -8
  177. package/src/adapter/paper/paper-adapter.ts +9 -11
  178. package/src/adapter/paper/{executor/paper-margin-executor.ts → simulator/paper-margin-simulator.ts} +5 -5
  179. package/src/adapter/paper/{executor/paper-executor.ts → simulator/paper-simulator.ts} +4 -4
  180. package/src/adapter/paper/simulator/paper-spot-simulator.spec.ts +87 -0
  181. package/src/adapter/paper/{executor/paper-spot-executor.ts → simulator/paper-spot-simulator.ts} +6 -6
  182. package/src/bootstrap.ts +4 -4
  183. package/src/domain/balance.ts +1 -1
  184. package/src/domain/candle.spec.ts +3 -5
  185. package/src/domain/candle.ts +103 -0
  186. package/src/domain/index.ts +6 -8
  187. package/src/domain/order.ts +2 -2
  188. package/src/domain/orderbook.ts +1 -1
  189. package/src/domain/position.ts +2 -3
  190. package/src/domain/session.spec.ts +3 -3
  191. package/src/domain/session.ts +61 -8
  192. package/src/domain/statement.ts +1 -2
  193. package/src/domain/trade.ts +1 -1
  194. package/src/index.ts +4 -7
  195. package/src/indicator/atr.ts +1 -2
  196. package/src/indicator/cross.ts +3 -4
  197. package/src/indicator/donchian.ts +2 -3
  198. package/src/indicator/drawdown.ts +2 -3
  199. package/src/indicator/ema.ts +1 -2
  200. package/src/indicator/envelope.ts +1 -2
  201. package/src/indicator/index.ts +3 -3
  202. package/src/indicator/macd.ts +1 -2
  203. package/src/indicator/min-max.ts +1 -2
  204. package/src/indicator/rma.ts +1 -2
  205. package/src/indicator/sma.ts +1 -2
  206. package/src/indicator/swma.ts +1 -2
  207. package/src/indicator/tma.ts +1 -2
  208. package/src/indicator/trailing.ts +3 -4
  209. package/src/indicator/truerange.spec.ts +2 -2
  210. package/src/indicator/truerange.ts +1 -2
  211. package/src/indicator/window.ts +1 -1
  212. package/src/indicator/wma.ts +1 -2
  213. package/src/ipc.spec.ts +6 -7
  214. package/src/ipc.ts +6 -6
  215. package/src/shared/index.ts +4 -4
  216. package/src/shared/policy.ts +1 -1
  217. package/src/shared/topic.spec.ts +1 -1
  218. package/src/storage/feed.ts +20 -1
  219. package/src/storage/index.ts +1 -1
  220. package/src/storage/measurement.ts +19 -0
  221. package/src/storage/storage.ts +37 -0
  222. package/src/store/event/index.ts +4 -4
  223. package/src/store/event/store-balance.event.spec.ts +3 -3
  224. package/src/store/event/store-balance.event.ts +2 -2
  225. package/src/store/event/store-candle.event.spec.ts +1 -1
  226. package/src/store/event/store-candle.event.ts +5 -5
  227. package/src/store/event/store-instrument.event.spec.ts +1 -1
  228. package/src/store/event/store-instrument.event.ts +2 -2
  229. package/src/store/event/store-order.event.spec.ts +2 -2
  230. package/src/store/event/store-order.event.ts +2 -2
  231. package/src/store/event/store-orderbook.event.ts +2 -2
  232. package/src/store/event/store-position.event.ts +2 -2
  233. package/src/store/event/store-trade.event.spec.ts +2 -2
  234. package/src/store/event/store-trade.event.ts +2 -2
  235. package/src/store/index.ts +1 -0
  236. package/src/store/store.state.ts +7 -7
  237. package/src/store/store.ts +6 -9
  238. package/src/tests/backtester-adapter.spec.ts +8 -15
  239. package/src/tests/session.spec.ts +0 -3
  240. package/dist/adapter/paper/executor/paper-executor.js.map +0 -1
  241. package/dist/adapter/paper/executor/paper-margin-executor.js.map +0 -1
  242. package/dist/adapter/paper/executor/paper-spot-executor.js.map +0 -1
  243. package/dist/domain/candle-builder.d.ts +0 -16
  244. package/dist/domain/candle-builder.js +0 -70
  245. package/dist/domain/candle-builder.js.map +0 -1
  246. package/dist/domain/session-descriptor.d.ts +0 -15
  247. package/dist/domain/session-descriptor.js +0 -3
  248. package/dist/domain/session-descriptor.js.map +0 -1
  249. package/src/domain/candle-builder.ts +0 -104
  250. package/src/domain/session-descriptor.ts +0 -53
@@ -1,4 +1,7 @@
1
+ export * from './atr';
1
2
  export * from './cross';
3
+ export * from './donchian';
4
+ export * from './drawdown';
2
5
  export * from './ema';
3
6
  export * from './envelope';
4
7
  export * from './macd';
@@ -12,6 +15,3 @@ export * from './trailing';
12
15
  export * from './truerange';
13
16
  export * from './window';
14
17
  export * from './wma';
15
- export * from './donchian';
16
- export * from './atr';
17
- export * from './drawdown';
@@ -1,5 +1,4 @@
1
- import { Observable, withLatestFrom } from 'rxjs';
2
- import { map, share } from 'rxjs/operators';
1
+ import { map, Observable, share, withLatestFrom } from 'rxjs';
3
2
  import { ema } from './ema';
4
3
 
5
4
  export function macd<T>(
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { filter, map, share } from 'rxjs/operators';
1
+ import { filter, map, Observable, share } from 'rxjs';
3
2
  import { window } from './window';
4
3
 
5
4
  export function minMax<T>(length: number, fn: (it: T) => number) {
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { map, share } from 'rxjs/operators';
1
+ import { map, Observable, share } from 'rxjs';
3
2
  import { sma } from '.';
4
3
 
5
4
  export function rma<T>(length: number, fn: (it: T) => number) {
@@ -1,5 +1,4 @@
1
- import { Observable, tap } from 'rxjs';
2
- import { filter, map, share } from 'rxjs/operators';
1
+ import { filter, map, Observable, share, tap } from 'rxjs';
3
2
  import { window } from './window';
4
3
 
5
4
  export function sma<T>(length: number, fn: (it: T) => number) {
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { filter, map, share } from 'rxjs/operators';
1
+ import { filter, map, Observable, share } from 'rxjs';
3
2
  import { window } from './window';
4
3
 
5
4
  export function swma<T>(fn: (it: T) => number) {
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { share, map } from 'rxjs/operators';
1
+ import { map, Observable, share } from 'rxjs';
3
2
  import { swma } from './swma';
4
3
  import { wma } from './wma';
5
4
 
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { filter } from 'rxjs/operators';
1
+ import { filter, Observable } from 'rxjs';
3
2
 
4
3
  export class Trailing {
5
4
  private triggered = false;
@@ -56,7 +55,7 @@ export class Trailing {
56
55
  }
57
56
 
58
57
  export function trailingup<T>(trigger: number, buffer: number, value: (it: T) => number) {
59
- return function(source: Observable<T>): Observable<T> {
58
+ return function (source: Observable<T>): Observable<T> {
60
59
  const trailing = new Trailing(trigger, buffer);
61
60
 
62
61
  return source.pipe(filter(it => trailing.up(value(it))));
@@ -68,7 +67,7 @@ export function trailingdown<T>(
68
67
  buffer: number,
69
68
  value: (it: T) => number
70
69
  ) {
71
- return function(source: Observable<T>): Observable<T> {
70
+ return function (source: Observable<T>): Observable<T> {
72
71
  const trailing = new Trailing(trigger, buffer);
73
72
 
74
73
  return source.pipe(filter(it => trailing.down(value(it))));
@@ -1,8 +1,8 @@
1
1
  import { from } from 'rxjs';
2
2
  import { Candle } from '../domain';
3
- import { truerange } from './truerange';
4
- import { sma } from './sma';
5
3
  import { now } from '../shared';
4
+ import { sma } from './sma';
5
+ import { truerange } from './truerange';
6
6
 
7
7
  describe('truerange atr tests', () => {
8
8
  test('should return expected value', done => {
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { map, share } from 'rxjs/operators';
1
+ import { map, Observable, share } from 'rxjs';
3
2
  import { Candle } from '../domain';
4
3
 
5
4
  export function truerange<T>(fn: (it: T) => Candle) {
@@ -1,4 +1,4 @@
1
- import { Observable, share, map } from 'rxjs';
1
+ import { map, Observable, share } from 'rxjs';
2
2
  import { RingBuffer } from './ring-buffer';
3
3
 
4
4
  export function window<T, Y>(length: number, fn: (value: T) => Y) {
@@ -1,5 +1,4 @@
1
- import { Observable } from 'rxjs';
2
- import { filter, map, share } from 'rxjs/operators';
1
+ import { filter, map, Observable, share } from 'rxjs';
3
2
  import { window } from './window';
4
3
 
5
4
  export function wma<T>(length: number, fn: (it: T) => number) {
package/src/ipc.spec.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { Adapter, AdapterContext } from './adapter';
2
- import { PaperAdapter, PaperSpotExecutor } from './adapter/paper';
3
- import { PaperExecutor } from './adapter/paper/executor/paper-executor';
4
- import { run } from './ipc';
5
- import { task } from './shared';
6
1
  import { EventEmitter } from 'events';
7
2
  import { of, take, tap } from 'rxjs';
3
+ import { Adapter, AdapterContext, PaperAdapter, PaperSpotSimulator } from './adapter';
4
+ import { PaperSimulator } from './adapter/paper/simulator/paper-simulator';
5
+ import { run } from './ipc';
6
+ import { task } from './shared';
8
7
 
9
8
  class DefaultAdapter extends Adapter {
10
9
  name = 'default';
@@ -13,8 +12,8 @@ class DefaultAdapter extends Adapter {
13
12
  return 123;
14
13
  }
15
14
 
16
- createPaperExecutor(adapter: PaperAdapter): PaperExecutor {
17
- return new PaperSpotExecutor(adapter);
15
+ createPaperSimulator(adapter: PaperAdapter): PaperSimulator {
16
+ return new PaperSpotSimulator(adapter);
18
17
  }
19
18
 
20
19
  awake(context: AdapterContext): Promise<void> {
package/src/ipc.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { Session, SessionDescriptor, instrumentOf } from './domain';
2
- import { Topic, event, handler } from './shared/topic';
3
- import { runTask, Logger } from './shared';
4
- import { Bootstrap } from './bootstrap';
5
- import { BacktesterStreamer } from './adapter/backtester';
6
- import { Observable } from 'rxjs';
7
1
  import { EventEmitter } from 'events';
8
2
  import { join } from 'path';
3
+ import { Observable } from 'rxjs';
4
+ import { BacktesterStreamer } from './adapter/backtester';
5
+ import { Bootstrap } from './bootstrap';
6
+ import { instrumentOf, Session, SessionDescriptor } from './domain';
7
+ import { Logger, runTask } from './shared';
8
+ import { event, handler, Topic } from './shared/topic';
9
9
  import minimist = require('minimist');
10
10
  import dotenv = require('dotenv');
11
11
 
@@ -1,8 +1,8 @@
1
- export * from './decimals';
2
- export * from './logger';
3
1
  export * from './datetime';
2
+ export * from './decimals';
4
3
  export * from './io';
5
- export * from './topic';
4
+ export * from './logger';
6
5
  export * from './policy';
7
- export * from './worker';
8
6
  export * from './task';
7
+ export * from './topic';
8
+ export * from './worker';
@@ -1,5 +1,5 @@
1
- import { retryAsync } from 'ts-retry';
2
1
  import * as hash from 'object-hash';
2
+ import { retryAsync } from 'ts-retry';
3
3
 
4
4
  export function retry<T>(fn: () => Promise<T>): Promise<T> {
5
5
  return retryAsync(fn, { delay: 1000, maxTry: 3 });
@@ -1,4 +1,4 @@
1
- import { Topic, handler, event } from './topic';
1
+ import { event, handler, Topic } from './topic';
2
2
 
3
3
  describe('topic tests', () => {
4
4
  test('string as key cache', () => {
@@ -1,14 +1,27 @@
1
- import { StoreEvent } from '../store/event';
2
1
  import { InstrumentSelector } from '../domain';
2
+ import { StoreEvent } from '../store';
3
3
  import { Storage, StorageQueryOptions } from './storage';
4
4
 
5
+ /**
6
+ * Represents a storage supposed to store historical data.
7
+ * You can use CLI to fetch and save data in the Feed.
8
+ */
5
9
  export class Feed {
6
10
  constructor(private readonly storage: Storage) {}
7
11
 
12
+ /**
13
+ * Returns all instrument names stored in the feed.
14
+ */
8
15
  index(): Promise<Array<string>> {
9
16
  return this.storage.index();
10
17
  }
11
18
 
19
+ /**
20
+ *
21
+ * @param instrument
22
+ * @param events
23
+ * @returns
24
+ */
12
25
  save(instrument: InstrumentSelector, events: StoreEvent[]): Promise<void> {
13
26
  return this.storage.save(
14
27
  instrument.toString(),
@@ -22,6 +35,12 @@ export class Feed {
22
35
  );
23
36
  }
24
37
 
38
+ /**
39
+ *
40
+ * @param instrument
41
+ * @param options
42
+ * @returns
43
+ */
25
44
  async query(
26
45
  instrument: InstrumentSelector,
27
46
  options: StorageQueryOptions
@@ -1,3 +1,3 @@
1
1
  export * from './feed';
2
- export * from './storage';
3
2
  export * from './measurement';
3
+ export * from './storage';
@@ -7,13 +7,26 @@ export interface Measure {
7
7
  payload: any;
8
8
  }
9
9
 
10
+ /**
11
+ *
12
+ */
10
13
  export class Measurement {
11
14
  constructor(private readonly storage: Storage) {}
12
15
 
16
+ /**
17
+ *
18
+ * @returns
19
+ */
13
20
  async index(): Promise<Array<number>> {
14
21
  return (await this.storage.index()).map(it => Number(it));
15
22
  }
16
23
 
24
+ /**
25
+ *
26
+ * @param session
27
+ * @param measurements
28
+ * @returns
29
+ */
17
30
  save(session: number, measurements: Measure[]): Promise<void> {
18
31
  return this.storage.save(
19
32
  session.toString(),
@@ -25,6 +38,12 @@ export class Measurement {
25
38
  );
26
39
  }
27
40
 
41
+ /**
42
+ *
43
+ * @param session
44
+ * @param options
45
+ * @returns
46
+ */
28
47
  async query(session: number, options: StorageQueryOptions): Promise<Measure[]> {
29
48
  const rows = await this.storage.query(session.toString(), options);
30
49
 
@@ -11,21 +11,50 @@ export type StorageQueryOptions = {
11
11
  count: number;
12
12
  };
13
13
 
14
+ /**
15
+ *
16
+ */
14
17
  export interface Storage {
18
+ /**
19
+ *
20
+ */
15
21
  index(): Promise<Array<string>>;
16
22
 
23
+ /**
24
+ *
25
+ * @param library
26
+ * @param documents
27
+ */
17
28
  save(library: string, documents: StorageDocument[]): Promise<void>;
18
29
 
30
+ /**
31
+ *
32
+ * @param library
33
+ * @param options
34
+ */
19
35
  query(library: string, options: StorageQueryOptions): Promise<StorageDocument[]>;
20
36
  }
21
37
 
38
+ /**
39
+ *
40
+ */
22
41
  export class InMemoryStorage implements Storage {
23
42
  private tables: Record<string, StorageDocument[]> = {};
24
43
 
44
+ /**
45
+ *
46
+ * @returns
47
+ */
25
48
  async index(): Promise<Array<string>> {
26
49
  return Object.keys(this.tables);
27
50
  }
28
51
 
52
+ /**
53
+ *
54
+ * @param library
55
+ * @param options
56
+ * @returns
57
+ */
29
58
  async query(library: string, options: StorageQueryOptions): Promise<StorageDocument[]> {
30
59
  if (!this.tables[library]) {
31
60
  return [];
@@ -56,6 +85,11 @@ export class InMemoryStorage implements Storage {
56
85
  return query;
57
86
  }
58
87
 
88
+ /**
89
+ *
90
+ * @param library
91
+ * @param documents
92
+ */
59
93
  async save(library: string, documents: StorageDocument[]): Promise<void> {
60
94
  if (!this.tables[library]) {
61
95
  this.tables[library] = [];
@@ -70,6 +104,9 @@ export class InMemoryStorage implements Storage {
70
104
  buffer.sort((lhs, rhs) => lhs.timestamp - rhs.timestamp);
71
105
  }
72
106
 
107
+ /**
108
+ *
109
+ */
73
110
  clear() {
74
111
  this.tables = {};
75
112
  }
@@ -1,8 +1,8 @@
1
- export * from './store.event';
2
- export * from './store-orderbook.event';
3
- export * from './store-order.event';
4
1
  export * from './store-balance.event';
2
+ export * from './store-candle.event';
5
3
  export * from './store-instrument.event';
4
+ export * from './store-order.event';
5
+ export * from './store-orderbook.event';
6
6
  export * from './store-position.event';
7
7
  export * from './store-trade.event';
8
- export * from './store-candle.event';
8
+ export * from './store.event';
@@ -1,8 +1,8 @@
1
- import { Asset, Commission } from '../../domain';
2
1
  import { BalancePatchEvent } from '.';
3
- import { InstrumentPatchEvent } from './store-instrument.event';
4
- import { now } from '../../shared';
5
2
  import { Store } from '..';
3
+ import { Asset, Commission } from '../../domain';
4
+ import { now } from '../../shared';
5
+ import { InstrumentPatchEvent } from './store-instrument.event';
6
6
 
7
7
  describe('balance event tests', () => {
8
8
  test('should patch a store', () => {
@@ -1,7 +1,7 @@
1
- import { event } from '../../shared/topic';
2
- import { timestamp } from '../../shared';
3
1
  import { AssetSelector } from '../../domain/asset';
4
2
  import { Balance } from '../../domain/balance';
3
+ import { timestamp } from '../../shared';
4
+ import { event } from '../../shared/topic';
5
5
  import { State, StateChangeTracker } from '../store.state';
6
6
  import { StoreEvent } from './store.event';
7
7
 
@@ -1,5 +1,5 @@
1
- import { Asset, Instrument } from '../../domain';
2
1
  import { CandleEvent } from '.';
2
+ import { Asset, Instrument } from '../../domain';
3
3
  import { now } from '../../shared';
4
4
  import { Store } from '../store';
5
5
 
@@ -1,11 +1,11 @@
1
- import { TradePatchEventHandler } from './store-trade.event';
2
- import { OrderbookPatchEventHandler } from './store-orderbook.event';
3
- import { timestamp } from '../../shared/datetime';
1
+ import { StateChangeTracker } from '..';
4
2
  import { InstrumentSelector } from '../../domain';
3
+ import { timestamp } from '../../shared/datetime';
4
+ import { event } from '../../shared/topic';
5
5
  import { State } from '../store.state';
6
+ import { OrderbookPatchEventHandler } from './store-orderbook.event';
7
+ import { TradePatchEventHandler } from './store-trade.event';
6
8
  import { StoreEvent } from './store.event';
7
- import { event } from '../../shared/topic';
8
- import { StateChangeTracker } from '..';
9
9
 
10
10
  @event
11
11
  export class CandleEvent implements StoreEvent {
@@ -1,6 +1,6 @@
1
1
  import { Store } from '..';
2
- import { now } from '../../shared';
3
2
  import { Asset, Commission } from '../../domain';
3
+ import { now } from '../../shared';
4
4
  import { InstrumentPatchEvent } from './store-instrument.event';
5
5
 
6
6
  describe('instrument patch event tests', () => {
@@ -1,7 +1,7 @@
1
- import { event } from '../../shared/topic';
2
- import { timestamp } from '../../shared';
3
1
  import { Asset, Commission } from '../../domain';
4
2
  import { Instrument, InstrumentSelector } from '../../domain/instrument';
3
+ import { timestamp } from '../../shared';
4
+ import { event } from '../../shared/topic';
5
5
  import { State, StateChangeTracker } from '../../store';
6
6
  import { StoreEvent } from './store.event';
7
7
 
@@ -1,7 +1,7 @@
1
- import { now } from '../../shared';
2
1
  import { Asset, Instrument, Order } from '../../domain';
3
- import { OrderLoadEvent } from './store-order.event';
2
+ import { now } from '../../shared';
4
3
  import { Store } from '../store';
4
+ import { OrderLoadEvent } from './store-order.event';
5
5
 
6
6
  const instrument = new Instrument(
7
7
  new Asset('btc', 'binance', 8),
@@ -1,6 +1,6 @@
1
- import { event } from '../../shared/topic';
2
- import { timestamp } from '../../shared';
3
1
  import { Order } from '../../domain';
2
+ import { timestamp } from '../../shared';
3
+ import { event } from '../../shared/topic';
4
4
  import { State, StateChangeTracker } from '../store.state';
5
5
  import { StoreEvent } from './store.event';
6
6
 
@@ -1,7 +1,7 @@
1
- import { event } from '../../shared/topic';
2
- import { timestamp } from '../../shared';
3
1
  import { InstrumentSelector } from '../../domain/instrument';
4
2
  import { Orderbook } from '../../domain/orderbook';
3
+ import { timestamp } from '../../shared';
4
+ import { event } from '../../shared/topic';
5
5
  import { State, StateChangeTracker } from '../store.state';
6
6
  import { StoreEvent } from './store.event';
7
7
 
@@ -1,6 +1,6 @@
1
- import { event } from '../../shared/topic';
1
+ import { Instrument, Position, PositionMode } from '../../domain';
2
2
  import { timestamp } from '../../shared';
3
- import { Position, Instrument, PositionMode } from '../../domain';
3
+ import { event } from '../../shared/topic';
4
4
  import { State, StateChangeTracker } from '../store.state';
5
5
  import { StoreEvent } from './store.event';
6
6
 
@@ -1,7 +1,7 @@
1
- import { Asset, Instrument } from '../../domain';
2
1
  import { TradePatchEvent } from '.';
3
- import { now } from '../../shared';
4
2
  import { Store } from '..';
3
+ import { Asset, Instrument } from '../../domain';
4
+ import { now } from '../../shared';
5
5
 
6
6
  const instrument = new Instrument(
7
7
  new Asset('btc', 'binance', 8),
@@ -1,7 +1,7 @@
1
- import { event } from '../../shared/topic';
2
- import { timestamp } from '../../shared';
3
1
  import { Trade } from '../../domain';
4
2
  import { InstrumentSelector } from '../../domain/instrument';
3
+ import { timestamp } from '../../shared';
4
+ import { event } from '../../shared/topic';
5
5
  import { State, StateChangeTracker } from '../store.state';
6
6
  import { StoreEvent } from './store.event';
7
7
 
@@ -1,2 +1,3 @@
1
+ export * from './event';
1
2
  export * from './store';
2
3
  export * from './store.state';
@@ -1,15 +1,15 @@
1
- import { timestamp } from '../shared';
2
1
  import {
3
- Instrument,
4
- Balance,
5
- Order,
6
- Orderbook,
7
2
  Asset,
8
- Trade,
9
3
  AssetSelector,
4
+ Balance,
5
+ Component,
6
+ Instrument,
10
7
  InstrumentSelector,
11
- Component
8
+ Order,
9
+ Orderbook,
10
+ Trade
12
11
  } from '../domain';
12
+ import { timestamp } from '../shared';
13
13
 
14
14
  export interface StateChangeTracker {
15
15
  commit(component: Component);
@@ -1,10 +1,7 @@
1
1
  import { BehaviorSubject, Observable, Subject } from 'rxjs';
2
- import { State, StateChangeTracker } from './store.state';
3
- import { Component } from '../domain';
4
2
  import { Set } from 'typescript-collections';
5
- import { StoreEvent } from './event/store.event';
3
+ import { Component } from '../domain';
6
4
  import { handler, Topic } from '../shared/topic';
7
- import { TradePatchEvent, TradePatchEventHandler } from './event/store-trade.event';
8
5
  import {
9
6
  BalanceFreezEvent,
10
7
  BalanceFreezEventHandler,
@@ -41,18 +38,18 @@ import {
41
38
  PositionLoadEvent,
42
39
  PositionLoadEventHandler,
43
40
  PositionPatchEvent,
44
- PositionPatchEventHandler
41
+ PositionPatchEventHandler,
42
+ StoreEvent,
43
+ TradePatchEvent,
44
+ TradePatchEventHandler
45
45
  } from './event';
46
+ import { State, StateChangeTracker } from './store.state';
46
47
 
47
48
  export class Store extends Topic<StoreEvent, any> implements StateChangeTracker {
48
49
  private readonly pendingChanges = new Set<Component>();
49
50
  private readonly changes = new Subject<Component>();
50
51
  private readonly state = new BehaviorSubject<State>(new State());
51
52
 
52
- get state$(): Observable<State> {
53
- return this.state.asObservable();
54
- }
55
-
56
53
  get changes$(): Observable<Component> {
57
54
  return this.changes.asObservable();
58
55
  }
@@ -1,13 +1,12 @@
1
- import { Asset, Commission, instrumentOf } from '../domain';
2
- import { InMemoryStorage, Feed } from '../storage';
3
- import { Store } from '../store';
4
- import { InstrumentPatchEvent, TradePatchEvent } from '../store/event';
5
1
  import { Adapter, AdapterContext } from '../adapter/adapter';
6
- import { PaperSpotExecutor } from '../adapter/paper';
7
- import { PaperExecutor } from '../adapter/paper/executor/paper-executor';
8
- import { PaperAdapter } from '../adapter/paper/paper-adapter';
9
2
  import { BacktesterAdapter } from '../adapter/backtester/backtester-adapter';
10
3
  import { BacktesterStreamer } from '../adapter/backtester/backtester-streamer';
4
+ import { PaperSpotSimulator } from '../adapter/paper';
5
+ import { PaperAdapter } from '../adapter/paper/paper-adapter';
6
+ import { PaperSimulator } from '../adapter/paper/simulator/paper-simulator';
7
+ import { Asset, Commission, instrumentOf } from '../domain';
8
+ import { Feed, InMemoryStorage } from '../storage';
9
+ import { InstrumentPatchEvent, Store, TradePatchEvent } from '../store';
11
10
 
12
11
  const base = new Asset('btc', 'binance', 8);
13
12
  const quote = new Asset('usdt', 'binance', 4);
@@ -19,8 +18,8 @@ class DefaultAdapter extends Adapter {
19
18
  return 123;
20
19
  }
21
20
 
22
- createPaperExecutor(adapter: PaperAdapter): PaperExecutor {
23
- return new PaperSpotExecutor(adapter);
21
+ createPaperSimulator(adapter: PaperAdapter): PaperSimulator {
22
+ return new PaperSpotSimulator(adapter);
24
23
  }
25
24
 
26
25
  async awake(context: AdapterContext): Promise<void> {
@@ -48,9 +47,6 @@ describe('backtester adapter tests', () => {
48
47
  const sut = new BacktesterAdapter(
49
48
  adapter,
50
49
  new BacktesterStreamer(store, feed, {
51
- balance: {
52
- ['binance:usdt']: 1000
53
- },
54
50
  from: 1,
55
51
  to: 100
56
52
  })
@@ -65,9 +61,6 @@ describe('backtester adapter tests', () => {
65
61
  store,
66
62
  feed,
67
63
  {
68
- balance: {
69
- ['binance:usdt']: 1000
70
- },
71
64
  from: 0,
72
65
  to: 100
73
66
  },
@@ -1,6 +1,3 @@
1
- import { SessionDescriptor } from '../domain';
2
- import { assetOf, instrumentOf, Timeframe } from '../domain';
3
- import { finalize, tap } from 'rxjs/operators';
4
1
  /*
5
2
 
6
3
  describe('session paper tests', () => {
@@ -1 +0,0 @@
1
- {"version":3,"file":"paper-executor.js","sourceRoot":"","sources":["../../../../src/adapter/paper/executor/paper-executor.ts"],"names":[],"mappings":"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"}