@quantform/core 0.3.267 → 0.4.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 (246) 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 +4 -5
  4. package/dist/adapter/adapter.js.map +1 -1
  5. package/dist/adapter/backtester/backtester-adapter.d.ts +5 -5
  6. package/dist/adapter/backtester/backtester-adapter.js +3 -7
  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 +1 -1
  20. package/dist/adapter/paper/index.js +1 -1
  21. package/dist/adapter/paper/index.js.map +1 -1
  22. package/dist/adapter/paper/paper-adapter.d.ts +3 -3
  23. package/dist/adapter/paper/paper-adapter.js +4 -7
  24. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  25. package/dist/adapter/paper/paper-adapter.spec.js +3 -5
  26. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  27. package/dist/adapter/paper/simulator/paper-margin-simulator.d.ts +1 -1
  28. package/dist/adapter/paper/simulator/paper-margin-simulator.js +6 -6
  29. package/dist/adapter/paper/simulator/paper-margin-simulator.js.map +1 -1
  30. package/dist/adapter/paper/simulator/paper-simulator.d.ts +1 -1
  31. package/dist/adapter/paper/simulator/paper-simulator.js +3 -3
  32. package/dist/adapter/paper/simulator/paper-simulator.js.map +1 -1
  33. package/dist/adapter/paper/simulator/paper-spot-simulator.d.ts +2 -2
  34. package/dist/adapter/paper/simulator/paper-spot-simulator.js +12 -12
  35. package/dist/adapter/paper/simulator/paper-spot-simulator.js.map +1 -1
  36. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js +8 -9
  37. package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js.map +1 -1
  38. package/dist/bootstrap.d.ts +1 -1
  39. package/dist/bootstrap.js +3 -5
  40. package/dist/bootstrap.js.map +1 -1
  41. package/dist/domain/balance.d.ts +1 -1
  42. package/dist/domain/candle.d.ts +14 -0
  43. package/dist/domain/candle.js +65 -1
  44. package/dist/domain/candle.js.map +1 -1
  45. package/dist/domain/candle.spec.js +11 -13
  46. package/dist/domain/candle.spec.js.map +1 -1
  47. package/dist/domain/index.d.ts +6 -8
  48. package/dist/domain/index.js +6 -8
  49. package/dist/domain/index.js.map +1 -1
  50. package/dist/domain/order.d.ts +1 -1
  51. package/dist/domain/order.js.map +1 -1
  52. package/dist/domain/orderbook.d.ts +1 -1
  53. package/dist/domain/position.d.ts +2 -2
  54. package/dist/domain/position.js +3 -3
  55. package/dist/domain/position.js.map +1 -1
  56. package/dist/domain/session.d.ts +14 -3
  57. package/dist/domain/session.js +17 -18
  58. package/dist/domain/session.js.map +1 -1
  59. package/dist/domain/session.spec.js +3 -3
  60. package/dist/domain/session.spec.js.map +1 -1
  61. package/dist/domain/statement.d.ts +1 -2
  62. package/dist/domain/statement.js.map +1 -1
  63. package/dist/domain/trade.d.ts +1 -1
  64. package/dist/index.d.ts +4 -7
  65. package/dist/index.js +4 -7
  66. package/dist/index.js.map +1 -1
  67. package/dist/indicator/atr.js +3 -3
  68. package/dist/indicator/atr.js.map +1 -1
  69. package/dist/indicator/cross.js +3 -3
  70. package/dist/indicator/cross.js.map +1 -1
  71. package/dist/indicator/donchian.js +3 -4
  72. package/dist/indicator/donchian.js.map +1 -1
  73. package/dist/indicator/drawdown.js +3 -3
  74. package/dist/indicator/drawdown.js.map +1 -1
  75. package/dist/indicator/ema.js +3 -3
  76. package/dist/indicator/ema.js.map +1 -1
  77. package/dist/indicator/envelope.js +3 -3
  78. package/dist/indicator/envelope.js.map +1 -1
  79. package/dist/indicator/index.d.ts +3 -3
  80. package/dist/indicator/index.js +3 -3
  81. package/dist/indicator/index.js.map +1 -1
  82. package/dist/indicator/macd.js +2 -3
  83. package/dist/indicator/macd.js.map +1 -1
  84. package/dist/indicator/min-max.js +3 -3
  85. package/dist/indicator/min-max.js.map +1 -1
  86. package/dist/indicator/rma.js +3 -3
  87. package/dist/indicator/rma.js.map +1 -1
  88. package/dist/indicator/sma.js +2 -3
  89. package/dist/indicator/sma.js.map +1 -1
  90. package/dist/indicator/swma.js +3 -3
  91. package/dist/indicator/swma.js.map +1 -1
  92. package/dist/indicator/tma.js +3 -3
  93. package/dist/indicator/tma.js.map +1 -1
  94. package/dist/indicator/trailing.js +3 -3
  95. package/dist/indicator/trailing.js.map +1 -1
  96. package/dist/indicator/truerange.js +3 -3
  97. package/dist/indicator/truerange.js.map +1 -1
  98. package/dist/indicator/truerange.spec.js +2 -2
  99. package/dist/indicator/truerange.spec.js.map +1 -1
  100. package/dist/indicator/wma.js +3 -3
  101. package/dist/indicator/wma.js.map +1 -1
  102. package/dist/ipc.d.ts +1 -1
  103. package/dist/ipc.js +3 -3
  104. package/dist/ipc.js.map +1 -1
  105. package/dist/ipc.spec.js +3 -4
  106. package/dist/ipc.spec.js.map +1 -1
  107. package/dist/shared/index.d.ts +4 -4
  108. package/dist/shared/index.js +4 -4
  109. package/dist/shared/index.js.map +1 -1
  110. package/dist/shared/policy.js +1 -1
  111. package/dist/shared/policy.js.map +1 -1
  112. package/dist/storage/feed.d.ts +1 -1
  113. package/dist/storage/feed.js.map +1 -1
  114. package/dist/storage/index.d.ts +1 -1
  115. package/dist/storage/index.js +1 -1
  116. package/dist/storage/index.js.map +1 -1
  117. package/dist/storage/measurement.js.map +1 -1
  118. package/dist/storage/storage.js.map +1 -1
  119. package/dist/store/event/index.d.ts +4 -4
  120. package/dist/store/event/index.js +4 -4
  121. package/dist/store/event/index.js.map +1 -1
  122. package/dist/store/event/store-balance.event.d.ts +1 -1
  123. package/dist/store/event/store-balance.event.js +1 -1
  124. package/dist/store/event/store-balance.event.js.map +1 -1
  125. package/dist/store/event/store-balance.event.spec.js +3 -3
  126. package/dist/store/event/store-balance.event.spec.js.map +1 -1
  127. package/dist/store/event/store-candle.event.d.ts +2 -2
  128. package/dist/store/event/store-candle.event.js +2 -2
  129. package/dist/store/event/store-candle.event.js.map +1 -1
  130. package/dist/store/event/store-candle.event.spec.js +1 -1
  131. package/dist/store/event/store-candle.event.spec.js.map +1 -1
  132. package/dist/store/event/store-instrument.event.d.ts +1 -1
  133. package/dist/store/event/store-instrument.event.js +1 -1
  134. package/dist/store/event/store-instrument.event.js.map +1 -1
  135. package/dist/store/event/store-instrument.event.spec.js +1 -1
  136. package/dist/store/event/store-instrument.event.spec.js.map +1 -1
  137. package/dist/store/event/store-order.event.d.ts +1 -1
  138. package/dist/store/event/store-order.event.js +1 -1
  139. package/dist/store/event/store-order.event.js.map +1 -1
  140. package/dist/store/event/store-order.event.spec.js +2 -2
  141. package/dist/store/event/store-order.event.spec.js.map +1 -1
  142. package/dist/store/event/store-orderbook.event.d.ts +1 -1
  143. package/dist/store/event/store-orderbook.event.js +1 -1
  144. package/dist/store/event/store-orderbook.event.js.map +1 -1
  145. package/dist/store/event/store-position.event.d.ts +1 -1
  146. package/dist/store/event/store-position.event.js +1 -1
  147. package/dist/store/event/store-position.event.js.map +1 -1
  148. package/dist/store/event/store-trade.event.d.ts +1 -1
  149. package/dist/store/event/store-trade.event.js +1 -1
  150. package/dist/store/event/store-trade.event.js.map +1 -1
  151. package/dist/store/event/store-trade.event.spec.js +2 -2
  152. package/dist/store/event/store-trade.event.spec.js.map +1 -1
  153. package/dist/store/index.d.ts +1 -0
  154. package/dist/store/index.js +1 -0
  155. package/dist/store/index.js.map +1 -1
  156. package/dist/store/store.d.ts +2 -5
  157. package/dist/store/store.js +4 -8
  158. package/dist/store/store.js.map +1 -1
  159. package/dist/store/store.state.d.ts +1 -1
  160. package/dist/tests/backtester-adapter.spec.js +6 -13
  161. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  162. package/dist/tests/session.spec.d.ts +0 -1
  163. package/dist/tests/session.spec.js +0 -2
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +1 -1
  166. package/src/adapter/adapter-aggregate.ts +2 -3
  167. package/src/adapter/adapter.ts +4 -5
  168. package/src/adapter/backtester/backtester-adapter.ts +6 -6
  169. package/src/adapter/backtester/backtester-cursor.spec.ts +1 -1
  170. package/src/adapter/backtester/backtester-cursor.ts +2 -2
  171. package/src/adapter/backtester/backtester-streamer.spec.ts +1 -3
  172. package/src/adapter/backtester/backtester-streamer.ts +7 -8
  173. package/src/adapter/index.ts +2 -0
  174. package/src/adapter/paper/index.ts +1 -1
  175. package/src/adapter/paper/paper-adapter.spec.ts +3 -5
  176. package/src/adapter/paper/paper-adapter.ts +3 -5
  177. package/src/adapter/paper/simulator/paper-margin-simulator.ts +3 -3
  178. package/src/adapter/paper/simulator/paper-simulator.ts +3 -3
  179. package/src/adapter/paper/simulator/paper-spot-simulator.spec.ts +12 -13
  180. package/src/adapter/paper/simulator/paper-spot-simulator.ts +4 -4
  181. package/src/bootstrap.ts +4 -4
  182. package/src/domain/balance.ts +1 -1
  183. package/src/domain/candle.spec.ts +3 -5
  184. package/src/domain/candle.ts +103 -0
  185. package/src/domain/index.ts +6 -8
  186. package/src/domain/order.ts +2 -2
  187. package/src/domain/orderbook.ts +1 -1
  188. package/src/domain/position.ts +2 -3
  189. package/src/domain/session.spec.ts +3 -3
  190. package/src/domain/session.ts +61 -8
  191. package/src/domain/statement.ts +1 -2
  192. package/src/domain/trade.ts +1 -1
  193. package/src/index.ts +4 -7
  194. package/src/indicator/atr.ts +1 -2
  195. package/src/indicator/cross.ts +3 -4
  196. package/src/indicator/donchian.ts +2 -3
  197. package/src/indicator/drawdown.ts +2 -3
  198. package/src/indicator/ema.ts +1 -2
  199. package/src/indicator/envelope.ts +1 -2
  200. package/src/indicator/index.ts +3 -3
  201. package/src/indicator/macd.ts +1 -2
  202. package/src/indicator/min-max.ts +1 -2
  203. package/src/indicator/rma.ts +1 -2
  204. package/src/indicator/sma.ts +1 -2
  205. package/src/indicator/swma.ts +1 -2
  206. package/src/indicator/tma.ts +1 -2
  207. package/src/indicator/trailing.ts +3 -4
  208. package/src/indicator/truerange.spec.ts +2 -2
  209. package/src/indicator/truerange.ts +1 -2
  210. package/src/indicator/window.ts +1 -1
  211. package/src/indicator/wma.ts +1 -2
  212. package/src/ipc.spec.ts +3 -4
  213. package/src/ipc.ts +6 -6
  214. package/src/shared/index.ts +4 -4
  215. package/src/shared/policy.ts +1 -1
  216. package/src/shared/topic.spec.ts +1 -1
  217. package/src/storage/feed.ts +20 -1
  218. package/src/storage/index.ts +1 -1
  219. package/src/storage/measurement.ts +19 -0
  220. package/src/storage/storage.ts +37 -0
  221. package/src/store/event/index.ts +4 -4
  222. package/src/store/event/store-balance.event.spec.ts +3 -3
  223. package/src/store/event/store-balance.event.ts +2 -2
  224. package/src/store/event/store-candle.event.spec.ts +1 -1
  225. package/src/store/event/store-candle.event.ts +5 -5
  226. package/src/store/event/store-instrument.event.spec.ts +1 -1
  227. package/src/store/event/store-instrument.event.ts +2 -2
  228. package/src/store/event/store-order.event.spec.ts +2 -2
  229. package/src/store/event/store-order.event.ts +2 -2
  230. package/src/store/event/store-orderbook.event.ts +2 -2
  231. package/src/store/event/store-position.event.ts +2 -2
  232. package/src/store/event/store-trade.event.spec.ts +2 -2
  233. package/src/store/event/store-trade.event.ts +2 -2
  234. package/src/store/index.ts +1 -0
  235. package/src/store/store.state.ts +7 -7
  236. package/src/store/store.ts +6 -9
  237. package/src/tests/backtester-adapter.spec.ts +6 -13
  238. package/src/tests/session.spec.ts +0 -3
  239. package/dist/domain/candle-builder.d.ts +0 -16
  240. package/dist/domain/candle-builder.js +0 -70
  241. package/dist/domain/candle-builder.js.map +0 -1
  242. package/dist/domain/session-descriptor.d.ts +0 -15
  243. package/dist/domain/session-descriptor.js +0 -3
  244. package/dist/domain/session-descriptor.js.map +0 -1
  245. package/src/domain/candle-builder.ts +0 -104
  246. package/src/domain/session-descriptor.ts +0 -53
@@ -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, PaperSpotSimulator } from './adapter/paper';
1
+ import { EventEmitter } from 'events';
2
+ import { of, take, tap } from 'rxjs';
3
+ import { Adapter, AdapterContext, PaperAdapter, PaperSpotSimulator } from './adapter';
3
4
  import { PaperSimulator } from './adapter/paper/simulator/paper-simulator';
4
5
  import { run } from './ipc';
5
6
  import { task } from './shared';
6
- import { EventEmitter } from 'events';
7
- import { of, take, tap } from 'rxjs';
8
7
 
9
8
  class DefaultAdapter extends Adapter {
10
9
  name = 'default';
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 { PaperSpotSimulator } from '../adapter/paper';
7
- import { PaperSimulator } from '../adapter/paper/simulator/paper-simulator';
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);
@@ -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,16 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { timestamp } from '../shared';
3
- import { Candle } from './candle';
4
- export declare class CandleBuilder {
5
- readonly timeframe: number;
6
- private _candle;
7
- get candle(): Candle;
8
- constructor(timeframe: number);
9
- append(value: number, timestamp: timestamp): Candle;
10
- }
11
- export declare function candle<T extends {
12
- timestamp: number;
13
- }>(timeframe: number, fn: (x: T) => number): (source: Observable<T>) => Observable<Candle>;
14
- export declare function mergeCandle<T extends {
15
- timestamp: number;
16
- }>(timeframe: number, fn: (x: T) => number, history$: Observable<Candle>): (source$: Observable<T>) => Observable<Candle>;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mergeCandle = exports.candle = exports.CandleBuilder = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const operators_1 = require("rxjs/operators");
6
- const candle_1 = require("./candle");
7
- const timeframe_1 = require("./timeframe");
8
- class CandleBuilder {
9
- constructor(timeframe) {
10
- this.timeframe = timeframe;
11
- }
12
- get candle() {
13
- return this._candle;
14
- }
15
- append(value, timestamp) {
16
- const frame = (0, timeframe_1.tf)(timestamp, this.timeframe);
17
- if (!this._candle) {
18
- this._candle = new candle_1.Candle(frame, value, value, value, value);
19
- return null;
20
- }
21
- if (this.candle.timestamp == frame) {
22
- this.candle.apply(value);
23
- return null;
24
- }
25
- const previous = this._candle;
26
- this._candle = new candle_1.Candle(frame, value, value, value, value);
27
- return previous;
28
- }
29
- }
30
- exports.CandleBuilder = CandleBuilder;
31
- function candle(timeframe, fn) {
32
- return function (source) {
33
- const builder = new CandleBuilder(timeframe);
34
- let candle;
35
- return source.pipe((0, operators_1.filter)(it => {
36
- return (candle = builder.append(fn(it), it.timestamp)) != null;
37
- }), (0, operators_1.map)(_ => candle), (0, operators_1.share)());
38
- };
39
- }
40
- exports.candle = candle;
41
- function mergeCandle(timeframe, fn, history$) {
42
- return function (source$) {
43
- const builder = new CandleBuilder(timeframe);
44
- let hasMergedHistory = false;
45
- return (0, rxjs_1.concat)(history$.pipe((0, operators_1.skipLast)(1)), source$.pipe((0, operators_1.withLatestFrom)(history$.pipe((0, operators_1.last)())), (0, operators_1.mergeMap)(([it, history]) => {
46
- const completed = builder.append(fn(it), it.timestamp);
47
- if (completed) {
48
- if (completed.timestamp == history.timestamp) {
49
- completed.open = history.open;
50
- completed.high = Math.max(completed.high, history.high);
51
- completed.low = Math.min(completed.low, history.low);
52
- hasMergedHistory = true;
53
- }
54
- else if (completed.timestamp > history.timestamp) {
55
- if (!hasMergedHistory) {
56
- hasMergedHistory = true;
57
- return [history, completed];
58
- }
59
- }
60
- else if (completed.timestamp < history.timestamp) {
61
- throw new Error('invalid candle sequence, input data is to old.');
62
- }
63
- return [completed];
64
- }
65
- return [];
66
- })));
67
- };
68
- }
69
- exports.mergeCandle = mergeCandle;
70
- //# sourceMappingURL=candle-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"candle-builder.js","sourceRoot":"","sources":["../../src/domain/candle-builder.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { Adapter } from '../adapter';
2
- import { Measurement } from '../storage/measurement';
3
- import { Feed } from '../storage';
4
- import { BacktesterOptions } from '../adapter/backtester';
5
- import { PaperOptions } from '../adapter/paper';
6
- export interface SessionDescriptor {
7
- id?: number;
8
- adapter: Adapter[];
9
- feed?: Feed;
10
- measurement?: Measurement;
11
- options?: {
12
- backtester?: BacktesterOptions;
13
- paper?: PaperOptions;
14
- };
15
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=session-descriptor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-descriptor.js","sourceRoot":"","sources":["../../src/domain/session-descriptor.ts"],"names":[],"mappings":""}