@quantform/core 0.3.229 → 0.3.233

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 (245) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +1 -1
  2. package/dist/adapter/adapter-aggregate.js +5 -5
  3. package/dist/adapter/adapter-aggregate.js.map +1 -1
  4. package/dist/adapter/adapter.d.ts +4 -4
  5. package/dist/adapter/adapter.event.d.ts +1 -1
  6. package/dist/adapter/adapter.event.js +1 -1
  7. package/dist/adapter/adapter.js +3 -3
  8. package/dist/adapter/adapter.js.map +1 -1
  9. package/dist/adapter/backtester/backtester-adapter.d.ts +2 -2
  10. package/dist/adapter/backtester/backtester-adapter.js +3 -3
  11. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  12. package/dist/adapter/backtester/backtester-cursor.d.ts +1 -1
  13. package/dist/adapter/backtester/backtester-streamer.d.ts +1 -1
  14. package/dist/adapter/backtester/backtester-streamer.spec.js +1 -1
  15. package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
  16. package/dist/adapter/paper/{model/paper-model.d.ts → executor/paper-executor.d.ts} +1 -1
  17. package/dist/adapter/paper/{model/paper-model.js → executor/paper-executor.js} +4 -4
  18. package/dist/adapter/paper/executor/paper-executor.js.map +1 -0
  19. package/dist/adapter/paper/{model/paper-margin-model.d.ts → executor/paper-margin-executor.d.ts} +2 -2
  20. package/dist/adapter/paper/{model/paper-margin-model.js → executor/paper-margin-executor.js} +11 -11
  21. package/dist/adapter/paper/executor/paper-margin-executor.js.map +1 -0
  22. package/dist/adapter/paper/{model/paper-spot-model.d.ts → executor/paper-spot-executor.d.ts} +3 -3
  23. package/dist/adapter/paper/{model/paper-spot-model.js → executor/paper-spot-executor.js} +7 -7
  24. package/dist/adapter/paper/executor/paper-spot-executor.js.map +1 -0
  25. package/dist/adapter/paper/index.d.ts +2 -2
  26. package/dist/adapter/paper/index.js +2 -2
  27. package/dist/adapter/paper/index.js.map +1 -1
  28. package/dist/adapter/paper/paper-adapter.d.ts +3 -3
  29. package/dist/adapter/paper/paper-adapter.js +6 -6
  30. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  31. package/dist/adapter/paper/paper-adapter.spec.js +2 -2
  32. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  33. package/dist/bin.d.ts +0 -33
  34. package/dist/bin.js +1 -189
  35. package/dist/bin.js.map +1 -1
  36. package/dist/domain/asset.js +1 -1
  37. package/dist/domain/balance.d.ts +1 -1
  38. package/dist/domain/balance.js +1 -3
  39. package/dist/domain/balance.js.map +1 -1
  40. package/dist/domain/candle-builder.d.ts +1 -1
  41. package/dist/domain/candle.d.ts +1 -1
  42. package/dist/domain/candle.spec.js +2 -2
  43. package/dist/domain/{commision.d.ts → commission.d.ts} +2 -2
  44. package/dist/domain/{commision.js → commission.js} +7 -7
  45. package/dist/domain/commission.js.map +1 -0
  46. package/dist/domain/component.d.ts +1 -1
  47. package/dist/domain/index.d.ts +1 -1
  48. package/dist/domain/index.js +1 -1
  49. package/dist/domain/index.js.map +1 -1
  50. package/dist/domain/instrument.d.ts +3 -3
  51. package/dist/domain/instrument.js.map +1 -1
  52. package/dist/domain/order.d.ts +1 -1
  53. package/dist/domain/orderbook.d.ts +2 -1
  54. package/dist/domain/orderbook.js.map +1 -1
  55. package/dist/domain/position.d.ts +1 -1
  56. package/dist/domain/position.js +3 -3
  57. package/dist/domain/trade.d.ts +1 -1
  58. package/dist/domain/trade.js.map +1 -1
  59. package/dist/index.d.ts +2 -2
  60. package/dist/index.js +2 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/indicator/truerange.spec.js +6 -6
  63. package/dist/ipc.d.ts +34 -0
  64. package/dist/ipc.js +193 -0
  65. package/dist/ipc.js.map +1 -0
  66. package/dist/session/index.d.ts +1 -0
  67. package/dist/session/index.js +1 -0
  68. package/dist/session/index.js.map +1 -1
  69. package/dist/session/session-descriptor.d.ts +2 -3
  70. package/dist/session/session-statement.d.ts +5 -0
  71. package/dist/session/session-statement.js +87 -0
  72. package/dist/session/session-statement.js.map +1 -0
  73. package/dist/session/session.d.ts +2 -2
  74. package/dist/session/session.js +10 -19
  75. package/dist/session/session.js.map +1 -1
  76. package/dist/session/session.spec.js +3 -3
  77. package/dist/session/session.spec.js.map +1 -1
  78. package/dist/{common → shared}/datetime.d.ts +0 -0
  79. package/dist/{common → shared}/datetime.js +0 -0
  80. package/dist/{common → shared}/datetime.js.map +1 -1
  81. package/dist/{common → shared}/decimals.d.ts +0 -0
  82. package/dist/{common → shared}/decimals.js +0 -0
  83. package/dist/{common → shared}/decimals.js.map +1 -1
  84. package/dist/{common → shared}/decimals.spec.d.ts +0 -0
  85. package/dist/{common → shared}/decimals.spec.js +0 -0
  86. package/dist/{common → shared}/decimals.spec.js.map +1 -1
  87. package/dist/{common → shared}/index.d.ts +0 -0
  88. package/dist/{common → shared}/index.js +0 -0
  89. package/dist/{common → shared}/index.js.map +1 -1
  90. package/dist/{common → shared}/io.d.ts +0 -0
  91. package/dist/{common → shared}/io.js +0 -0
  92. package/dist/shared/io.js.map +1 -0
  93. package/dist/{common → shared}/logger.d.ts +0 -0
  94. package/dist/{common → shared}/logger.js +0 -0
  95. package/dist/{common → shared}/logger.js.map +1 -1
  96. package/dist/{common → shared}/policy.d.ts +0 -0
  97. package/dist/{common → shared}/policy.js +0 -0
  98. package/dist/{common → shared}/policy.js.map +1 -1
  99. package/dist/{common → shared}/policy.spec.d.ts +0 -0
  100. package/dist/{common → shared}/policy.spec.js +0 -0
  101. package/dist/{common → shared}/policy.spec.js.map +1 -1
  102. package/dist/{common → shared}/topic.d.ts +0 -0
  103. package/dist/{common → shared}/topic.js +0 -0
  104. package/dist/{common → shared}/topic.js.map +1 -1
  105. package/dist/{common → shared}/topic.spec.d.ts +0 -0
  106. package/dist/{common → shared}/topic.spec.js +0 -0
  107. package/dist/{common → shared}/topic.spec.js.map +1 -1
  108. package/dist/{common → shared}/worker.d.ts +0 -0
  109. package/dist/{common → shared}/worker.js +0 -0
  110. package/dist/{common → shared}/worker.js.map +1 -1
  111. package/dist/{common → shared}/worker.spec.d.ts +0 -0
  112. package/dist/{common → shared}/worker.spec.js +0 -0
  113. package/dist/{common → shared}/worker.spec.js.map +1 -1
  114. package/dist/storage/measurement.d.ts +1 -1
  115. package/dist/store/event/store-balance.event.d.ts +1 -1
  116. package/dist/store/event/store-balance.event.js +1 -1
  117. package/dist/store/event/store-balance.event.spec.js +3 -3
  118. package/dist/store/event/store-balance.event.spec.js.map +1 -1
  119. package/dist/store/event/store-candle.event.d.ts +1 -1
  120. package/dist/store/event/store-candle.event.js +1 -1
  121. package/dist/store/event/store-candle.event.spec.js +2 -2
  122. package/dist/store/event/store-instrument.event.d.ts +4 -4
  123. package/dist/store/event/store-instrument.event.js +3 -3
  124. package/dist/store/event/store-instrument.event.js.map +1 -1
  125. package/dist/store/event/store-instrument.event.spec.js +3 -3
  126. package/dist/store/event/store-instrument.event.spec.js.map +1 -1
  127. package/dist/store/event/store-order.event.d.ts +1 -1
  128. package/dist/store/event/store-order.event.js +1 -1
  129. package/dist/store/event/store-order.event.spec.js +2 -2
  130. package/dist/store/event/store-orderbook.event.d.ts +1 -1
  131. package/dist/store/event/store-orderbook.event.js +1 -1
  132. package/dist/store/event/store-position.event.d.ts +1 -1
  133. package/dist/store/event/store-position.event.js +1 -1
  134. package/dist/store/event/store-trade.event.d.ts +1 -1
  135. package/dist/store/event/store-trade.event.js +1 -1
  136. package/dist/store/event/store-trade.event.spec.js +5 -5
  137. package/dist/store/event/store.event.d.ts +1 -1
  138. package/dist/store/store.d.ts +1 -1
  139. package/dist/store/store.js +1 -1
  140. package/dist/store/store.state.d.ts +1 -1
  141. package/dist/tests/backtester-adapter.spec.js +5 -5
  142. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  143. package/dist/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +1 -1
  145. package/src/adapter/adapter-aggregate.ts +23 -4
  146. package/src/adapter/adapter.event.ts +2 -2
  147. package/src/adapter/adapter.ts +14 -4
  148. package/src/adapter/backtester/backtester-adapter.ts +4 -4
  149. package/src/adapter/backtester/backtester-cursor.ts +1 -1
  150. package/src/adapter/backtester/backtester-streamer.spec.ts +1 -1
  151. package/src/adapter/backtester/backtester-streamer.ts +1 -1
  152. package/src/adapter/paper/{model/paper-model.ts → executor/paper-executor.ts} +1 -1
  153. package/src/adapter/paper/{model/paper-margin-model.ts → executor/paper-margin-executor.ts} +4 -4
  154. package/src/adapter/paper/{model/paper-spot-model.ts → executor/paper-spot-executor.ts} +5 -5
  155. package/src/adapter/paper/index.ts +2 -2
  156. package/src/adapter/paper/paper-adapter.spec.ts +4 -4
  157. package/src/adapter/paper/paper-adapter.ts +8 -8
  158. package/src/bin.ts +22 -191
  159. package/src/domain/asset.ts +5 -5
  160. package/src/domain/balance.ts +3 -5
  161. package/src/domain/candle-builder.ts +1 -1
  162. package/src/domain/candle.spec.ts +1 -1
  163. package/src/domain/candle.ts +1 -1
  164. package/src/domain/{commision.ts → commission.ts} +3 -3
  165. package/src/domain/component.ts +1 -1
  166. package/src/domain/index.ts +1 -1
  167. package/src/domain/instrument.ts +6 -3
  168. package/src/domain/order.ts +1 -1
  169. package/src/domain/orderbook.ts +5 -2
  170. package/src/domain/position.ts +2 -2
  171. package/src/domain/trade.ts +5 -1
  172. package/src/index.ts +2 -7
  173. package/src/indicator/truerange.spec.ts +1 -1
  174. package/src/ipc.ts +277 -0
  175. package/src/session/index.ts +1 -0
  176. package/src/session/session-descriptor.ts +35 -6
  177. package/src/session/session-statement.ts +119 -0
  178. package/src/session/session.spec.ts +6 -4
  179. package/src/session/session.ts +62 -20
  180. package/src/{common → shared}/datetime.ts +0 -0
  181. package/src/{common → shared}/decimals.spec.ts +0 -0
  182. package/src/{common → shared}/decimals.ts +0 -0
  183. package/src/{common → shared}/index.ts +0 -0
  184. package/src/{common → shared}/io.ts +0 -0
  185. package/src/{common → shared}/logger.ts +0 -0
  186. package/src/{common → shared}/policy.spec.ts +0 -0
  187. package/src/{common → shared}/policy.ts +0 -0
  188. package/src/{common → shared}/topic.spec.ts +0 -0
  189. package/src/{common → shared}/topic.ts +0 -0
  190. package/src/{common → shared}/worker.spec.ts +0 -0
  191. package/src/{common → shared}/worker.ts +0 -0
  192. package/src/storage/measurement.ts +1 -1
  193. package/src/store/event/store-balance.event.spec.ts +3 -3
  194. package/src/store/event/store-balance.event.ts +2 -2
  195. package/src/store/event/store-candle.event.spec.ts +1 -1
  196. package/src/store/event/store-candle.event.ts +2 -2
  197. package/src/store/event/store-instrument.event.spec.ts +3 -3
  198. package/src/store/event/store-instrument.event.ts +5 -5
  199. package/src/store/event/store-order.event.spec.ts +1 -1
  200. package/src/store/event/store-order.event.ts +2 -2
  201. package/src/store/event/store-orderbook.event.ts +2 -2
  202. package/src/store/event/store-position.event.ts +2 -2
  203. package/src/store/event/store-trade.event.spec.ts +1 -1
  204. package/src/store/event/store-trade.event.ts +2 -2
  205. package/src/store/event/store.event.ts +1 -1
  206. package/src/store/store.state.ts +1 -1
  207. package/src/store/store.ts +1 -1
  208. package/src/tests/backtester-adapter.spec.ts +7 -7
  209. package/dist/adapter/paper/model/paper-margin-model.js.map +0 -1
  210. package/dist/adapter/paper/model/paper-model.js.map +0 -1
  211. package/dist/adapter/paper/model/paper-spot-model.js.map +0 -1
  212. package/dist/behaviour/behaviour.d.ts +0 -6
  213. package/dist/behaviour/behaviour.js +0 -3
  214. package/dist/behaviour/behaviour.js.map +0 -1
  215. package/dist/behaviour/combined-behaviour.d.ts +0 -14
  216. package/dist/behaviour/combined-behaviour.js +0 -26
  217. package/dist/behaviour/combined-behaviour.js.map +0 -1
  218. package/dist/behaviour/index.d.ts +0 -3
  219. package/dist/behaviour/index.js +0 -16
  220. package/dist/behaviour/index.js.map +0 -1
  221. package/dist/behaviour/statement/benchmark-statement.behaviour.d.ts +0 -15
  222. package/dist/behaviour/statement/benchmark-statement.behaviour.js +0 -41
  223. package/dist/behaviour/statement/benchmark-statement.behaviour.js.map +0 -1
  224. package/dist/behaviour/statement/equity-statement.behaviour.d.ts +0 -15
  225. package/dist/behaviour/statement/equity-statement.behaviour.js +0 -54
  226. package/dist/behaviour/statement/equity-statement.behaviour.js.map +0 -1
  227. package/dist/behaviour/statement/index.d.ts +0 -1
  228. package/dist/behaviour/statement/index.js +0 -14
  229. package/dist/behaviour/statement/index.js.map +0 -1
  230. package/dist/behaviour/statement/period-statement.behaviour.d.ts +0 -9
  231. package/dist/behaviour/statement/period-statement.behaviour.js +0 -20
  232. package/dist/behaviour/statement/period-statement.behaviour.js.map +0 -1
  233. package/dist/behaviour/statement/statement.behaviour.d.ts +0 -7
  234. package/dist/behaviour/statement/statement.behaviour.js +0 -19
  235. package/dist/behaviour/statement/statement.behaviour.js.map +0 -1
  236. package/dist/common/io.js.map +0 -1
  237. package/dist/domain/commision.js.map +0 -1
  238. package/src/behaviour/behaviour.ts +0 -7
  239. package/src/behaviour/combined-behaviour.ts +0 -23
  240. package/src/behaviour/index.ts +0 -3
  241. package/src/behaviour/statement/benchmark-statement.behaviour.ts +0 -53
  242. package/src/behaviour/statement/equity-statement.behaviour.ts +0 -71
  243. package/src/behaviour/statement/index.ts +0 -1
  244. package/src/behaviour/statement/period-statement.behaviour.ts +0 -26
  245. package/src/behaviour/statement/statement.behaviour.ts +0 -19
@@ -11,7 +11,7 @@ const instrument = new Instrument(
11
11
  );
12
12
 
13
13
  describe('backtester streamer tests', () => {
14
- test('should reapeat specific events', done => {
14
+ test('should repeat specific events', done => {
15
15
  const feed = new Feed(new InMemoryStorage());
16
16
  const store = new Store();
17
17
 
@@ -1,7 +1,7 @@
1
1
  import { InstrumentSelector } from '../../domain';
2
2
  import { BacktesterCursor } from './backtester-cursor';
3
3
  import { Store } from '../../store';
4
- import { timestamp } from '../../common';
4
+ import { timestamp } from '../../shared';
5
5
  import { Feed } from '../../storage';
6
6
  import { BacktesterOptions } from './backtester-adapter';
7
7
 
@@ -3,7 +3,7 @@ import { Component, InstrumentSelector, Order, Orderbook, Trade } from '../../..
3
3
  import { PaperAdapter } from '..';
4
4
  import { Set } from 'typescript-collections';
5
5
 
6
- export abstract class PaperModel {
6
+ export abstract class PaperExecutor {
7
7
  private readonly pending: Record<string, Set<Order>> = {};
8
8
 
9
9
  constructor(readonly adapter: PaperAdapter) {
@@ -1,4 +1,4 @@
1
- import { pnl, weightedMean } from '../../../common';
1
+ import { pnl, weightedMean } from '../../../shared';
2
2
  import { Order } from '../../../domain';
3
3
  import {
4
4
  BalanceTransactEvent,
@@ -10,9 +10,9 @@ import {
10
10
  PositionPatchEvent
11
11
  } from '../../../store/event';
12
12
  import { PaperAdapter } from '..';
13
- import { PaperModel } from './paper-model';
13
+ import { PaperExecutor } from './paper-executor';
14
14
 
15
- export class PaperMarginModel extends PaperModel {
15
+ export class PaperMarginExecutor extends PaperExecutor {
16
16
  leverage = 10;
17
17
 
18
18
  constructor(adapter: PaperAdapter) {
@@ -31,7 +31,7 @@ export class PaperMarginModel extends PaperModel {
31
31
  this.adapter.store.snapshot.universe.instrument[order.instrument.toString()];
32
32
 
33
33
  let transact = instrument.quote.floor(
34
- -instrument.commision.calculateMakerFee(averageExecutionRate * order.quantity)
34
+ -instrument.commission.calculateMakerFee(averageExecutionRate * order.quantity)
35
35
  );
36
36
 
37
37
  const id = instrument.toString();
@@ -10,10 +10,10 @@ import {
10
10
  OrderPendingEvent
11
11
  } from '../../../store/event';
12
12
  import { PaperAdapter } from '..';
13
- import { PaperModel } from './paper-model';
14
- import { timestamp } from '../../../common';
13
+ import { PaperExecutor } from './paper-executor';
14
+ import { timestamp } from '../../../shared';
15
15
 
16
- export class PaperSpotModel extends PaperModel {
16
+ export class PaperSpotExecutor extends PaperExecutor {
17
17
  constructor(readonly adapter: PaperAdapter) {
18
18
  super(adapter);
19
19
  }
@@ -39,7 +39,7 @@ export class PaperSpotModel extends PaperModel {
39
39
  switch (order.side) {
40
40
  case 'BUY':
41
41
  transacted.base += instrument.base.floor(
42
- instrument.commision.applyMakerFee(order.quantity)
42
+ instrument.commission.applyMakerFee(order.quantity)
43
43
  );
44
44
  transacted.quote -= instrument.quote.floor(averageExecutionRate * order.quantity);
45
45
  break;
@@ -47,7 +47,7 @@ export class PaperSpotModel extends PaperModel {
47
47
  case 'SELL':
48
48
  transacted.base -= instrument.base.floor(order.quantity);
49
49
  transacted.quote += instrument.quote.floor(
50
- instrument.commision.applyMakerFee(averageExecutionRate * order.quantity)
50
+ instrument.commission.applyMakerFee(averageExecutionRate * order.quantity)
51
51
  );
52
52
  break;
53
53
  }
@@ -1,3 +1,3 @@
1
1
  export * from './paper-adapter';
2
- export * from './model/paper-spot-model';
3
- export * from './model/paper-margin-model';
2
+ export * from './executor/paper-spot-executor';
3
+ export * from './executor/paper-margin-executor';
@@ -1,7 +1,7 @@
1
- import { PaperSpotModel } from '.';
1
+ import { PaperSpotExecutor } from '.';
2
2
  import { Store } from '../../store';
3
3
  import { Adapter } from '../adapter';
4
- import { PaperModel } from './model/paper-model';
4
+ import { PaperExecutor } from './executor/paper-executor';
5
5
  import { PaperAdapter } from './paper-adapter';
6
6
 
7
7
  class DefaultAdapter extends Adapter {
@@ -11,8 +11,8 @@ class DefaultAdapter extends Adapter {
11
11
  return 123;
12
12
  }
13
13
 
14
- createPaperModel(adapter: PaperAdapter): PaperModel {
15
- return new PaperSpotModel(adapter);
14
+ createPaperExecutor(adapter: PaperAdapter): PaperExecutor {
15
+ return new PaperSpotExecutor(adapter);
16
16
  }
17
17
  }
18
18
 
@@ -1,7 +1,7 @@
1
1
  import { Adapter, AdapterContext } from '..';
2
2
  import { Store } from '../../store';
3
- import { PaperModel } from './model/paper-model';
4
- import { handler } from '../../common/topic';
3
+ import { PaperExecutor } from './executor/paper-executor';
4
+ import { handler } from '../../shared/topic';
5
5
  import { assetOf } from '../../domain';
6
6
  import { BalancePatchEvent } from '../../store/event';
7
7
  import {
@@ -16,7 +16,7 @@ export class PaperOptions {
16
16
 
17
17
  export class PaperAdapter extends Adapter {
18
18
  readonly name = this.decoratedAdapter.name;
19
- readonly platform: PaperModel;
19
+ readonly executor: PaperExecutor;
20
20
 
21
21
  constructor(
22
22
  readonly decoratedAdapter: Adapter,
@@ -25,15 +25,15 @@ export class PaperAdapter extends Adapter {
25
25
  ) {
26
26
  super();
27
27
 
28
- this.platform = this.createPaperModel(this);
28
+ this.executor = this.createPaperExecutor(this);
29
29
  }
30
30
 
31
31
  timestamp() {
32
32
  return this.decoratedAdapter.timestamp();
33
33
  }
34
34
 
35
- createPaperModel(adapter: PaperAdapter): PaperModel {
36
- return this.decoratedAdapter.createPaperModel(adapter);
35
+ createPaperExecutor(adapter: PaperAdapter): PaperExecutor {
36
+ return this.decoratedAdapter.createPaperExecutor(adapter);
37
37
  }
38
38
 
39
39
  onUnknownEvent(event: { type: string }, context: AdapterContext) {
@@ -67,14 +67,14 @@ export class PaperAdapter extends Adapter {
67
67
 
68
68
  @handler(AdapterOrderOpenCommand)
69
69
  onOrderOpen(event: AdapterOrderOpenCommand, context: AdapterContext) {
70
- this.platform.open(event.order);
70
+ this.executor.open(event.order);
71
71
 
72
72
  return Promise.resolve();
73
73
  }
74
74
 
75
75
  @handler(AdapterOrderCancelCommand)
76
76
  onOrderCancel(event: AdapterOrderCancelCommand, context: AdapterContext) {
77
- this.platform.cancel(event.order);
77
+ this.executor.cancel(event.order);
78
78
 
79
79
  return Promise.resolve();
80
80
  }
package/src/bin.ts CHANGED
@@ -3,201 +3,17 @@ import {
3
3
  BacktesterOptions,
4
4
  BacktesterStreamer
5
5
  } from './adapter/backtester';
6
- import { AdapterAggregate, AdapterFeedCommand } from './adapter';
6
+ import { AdapterAggregate } from './adapter';
7
7
  import { PaperAdapter, PaperOptions } from './adapter/paper';
8
8
  import { Session, SessionDescriptor } from './session';
9
9
  import { Store } from './store';
10
- import { instrumentOf } from './domain';
11
- import { Topic, event, handler } from './common/topic';
12
- import minimist = require('minimist');
13
- import { Logger } from './common';
14
-
15
- export interface IpcCommand {
16
- type;
17
- }
18
-
19
- @event
20
- export class IpcPaperModeCommand implements IpcCommand {
21
- type = 'paper';
22
- id?: number;
23
- balance: { [key: string]: number };
24
- }
25
-
26
- @event
27
- export class IpcBacktestModeCommand implements IpcCommand {
28
- type = 'backtest';
29
- from: number;
30
- to: number;
31
- balance: { [key: string]: number };
32
- }
33
-
34
- @event
35
- export class IpcLiveModeCommand implements IpcCommand {
36
- id?: number;
37
- type = 'live';
38
- }
39
-
40
- @event
41
- export class IpcUniverseQuery implements IpcCommand {
42
- type = 'universe';
43
- exchange: string;
44
- }
45
-
46
- @event
47
- export class IpcFeedCommand implements IpcCommand {
48
- type = 'feed';
49
- instrument: string;
50
- from: number;
51
- to: number;
52
- }
53
-
54
- class ExecutionAccessor {
55
- session: Session;
56
- }
57
-
58
- class ExecutionHandler extends Topic<{ type: string }, ExecutionAccessor> {
59
- constructor(private readonly descriptor: SessionDescriptor) {
60
- super();
61
- }
62
-
63
- @handler(IpcLiveModeCommand)
64
- async onLiveMode(command: IpcLiveModeCommand, accessor: ExecutionAccessor) {
65
- if (command.id) {
66
- this.descriptor.id = command.id;
67
- }
68
-
69
- accessor.session = live(this.descriptor);
70
-
71
- await accessor.session.awake();
72
- }
73
-
74
- @handler(IpcPaperModeCommand)
75
- async onPaperMode(command: IpcPaperModeCommand, accessor: ExecutionAccessor) {
76
- if (command.id) {
77
- this.descriptor.id = command.id;
78
- }
79
-
80
- accessor.session = paper(this.descriptor, {
81
- balance: command.balance
82
- });
83
-
84
- await accessor.session.awake();
85
- }
86
-
87
- @handler(IpcBacktestModeCommand)
88
- onBacktestMode(command: IpcBacktestModeCommand, accessor: ExecutionAccessor) {
89
- return new Promise<void>(async resolve => {
90
- const [session, streamer] = backtest(this.descriptor, {
91
- from: command.from,
92
- to: command.to,
93
- balance: command.balance,
94
- progress: timestamp =>
95
- this.notify({
96
- type: 'backtest:updated',
97
- timestamp,
98
- from: command.from,
99
- to: command.to
100
- }),
101
- completed: async () => {
102
- const statement = {};
103
-
104
- await accessor.session.dispose();
105
-
106
- accessor.session.statement(statement);
107
-
108
- this.notify({ type: 'backtest:completed', statement });
109
-
110
- resolve();
111
- }
112
- });
113
-
114
- accessor.session = session;
115
-
116
- this.notify({ type: 'backtest:started' });
117
-
118
- await accessor.session.awake();
119
- await streamer.tryContinue().catch(it => Logger.error(it));
120
- });
121
- }
122
-
123
- @handler(IpcUniverseQuery)
124
- onUniverse(query: IpcUniverseQuery, accessor: ExecutionAccessor) {
125
- accessor.session = accessor.session ?? idle(this.descriptor);
126
- }
127
-
128
- @handler(IpcFeedCommand)
129
- async onFeed(command: IpcFeedCommand, accessor: ExecutionAccessor) {
130
- accessor.session = accessor.session ?? idle(this.descriptor);
131
- const instrument = instrumentOf(command.instrument);
132
-
133
- await accessor.session.awake();
134
-
135
- this.notify({ type: 'feed:started' });
136
-
137
- await accessor.session.aggregate.dispatch(
138
- instrument.base.exchange,
139
- new AdapterFeedCommand(
140
- instrument,
141
- command.from,
142
- command.to,
143
- this.descriptor.feed,
144
- timestamp =>
145
- this.notify({
146
- type: 'feed:updated',
147
- timestamp,
148
- from: command.from,
149
- to: command.to
150
- })
151
- )
152
- );
153
-
154
- this.notify({ type: 'feed:completed' });
155
-
156
- await accessor.session.dispose();
157
- }
158
-
159
- private notify(message: any) {
160
- if (!process.send) {
161
- return;
162
- }
163
-
164
- process.send(message);
165
- }
166
- }
167
-
168
- export async function run(
169
- descriptor: SessionDescriptor,
170
- ...commands: IpcCommand[]
171
- ): Promise<Session> {
172
- const handler = new ExecutionHandler(descriptor);
173
- const accessor = new ExecutionAccessor();
174
- const argv = minimist(process.argv.slice(2));
175
-
176
- if (argv.command) {
177
- const json = Buffer.from(argv.command, 'base64').toString('utf-8');
178
-
179
- commands.push(JSON.parse(json));
180
- } else {
181
- if (!commands.length) {
182
- commands.push(new IpcPaperModeCommand());
183
- }
184
- }
185
-
186
- for (const command of commands) {
187
- await handler.dispatch(command, accessor);
188
- }
189
-
190
- process.on('message', async (request: any) => {
191
- const response = await handler.dispatch(request, accessor);
192
-
193
- if (response) {
194
- process.send(response);
195
- }
196
- });
197
-
198
- return accessor.session;
199
- }
200
10
 
11
+ /**
12
+ * Starts a new backtest session.
13
+ * @param descriptor session descriptor.
14
+ * @param options backtest options.
15
+ * @returns new session object.
16
+ */
201
17
  export function backtest(
202
18
  descriptor: SessionDescriptor,
203
19
  options: BacktesterOptions
@@ -215,6 +31,12 @@ export function backtest(
215
31
  return [new Session(store, aggregate, descriptor), streamer];
216
32
  }
217
33
 
34
+ /**
35
+ * Starts a new paper session.
36
+ * @param descriptor session descriptor.
37
+ * @param options backtest options.
38
+ * @returns new session object.
39
+ */
218
40
  export function paper(descriptor: SessionDescriptor, options: PaperOptions): Session {
219
41
  const store = new Store();
220
42
 
@@ -226,6 +48,11 @@ export function paper(descriptor: SessionDescriptor, options: PaperOptions): Ses
226
48
  return new Session(store, aggregate, descriptor);
227
49
  }
228
50
 
51
+ /**
52
+ * Starts a new live session.
53
+ * @param descriptor session descriptor.
54
+ * @returns new session object.
55
+ */
229
56
  export function live(descriptor: SessionDescriptor): Session {
230
57
  const store = new Store();
231
58
  const aggregate = new AdapterAggregate(store, descriptor.adapter);
@@ -233,6 +60,10 @@ export function live(descriptor: SessionDescriptor): Session {
233
60
  return new Session(store, aggregate, descriptor);
234
61
  }
235
62
 
63
+ /**
64
+ * Starts a new idle session.
65
+ * @param descriptor session descriptor.
66
+ */
236
67
  export function idle(descriptor: SessionDescriptor): Session {
237
68
  const store = new Store();
238
69
  const aggregate = new AdapterAggregate(store, descriptor.adapter);
@@ -1,7 +1,7 @@
1
- import { ceil, fixed, floor } from '../common/decimals';
1
+ import { ceil, fixed, floor } from '../shared/decimals';
2
2
 
3
3
  /**
4
- * Supposed to query specific @see Asset from code based.
4
+ * Supposed to query specific @see Asset from based on string notation.
5
5
  */
6
6
  export class AssetSelector {
7
7
  private readonly id: string;
@@ -58,21 +58,21 @@ export class Asset extends AssetSelector {
58
58
  }
59
59
 
60
60
  /**
61
- * Trims a number to the specified precision.
61
+ * Trims a number to the asset precision.
62
62
  */
63
63
  fixed(number: number): number {
64
64
  return fixed(number, this.scale);
65
65
  }
66
66
 
67
67
  /**
68
- * Rounds down a number to the specified precision.
68
+ * Rounds down a number to the asset precision.
69
69
  */
70
70
  floor(number: number): number {
71
71
  return floor(number, this.scale);
72
72
  }
73
73
 
74
74
  /**
75
- * Rounds up a number to the specified precision.
75
+ * Rounds up a number to the asset precision.
76
76
  */
77
77
  ceil(number: number): number {
78
78
  return ceil(number, this.scale);
@@ -1,10 +1,10 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
  import { Asset } from './';
3
3
  import { Position, PositionMode } from './position';
4
4
  import { Component } from './component';
5
5
 
6
6
  /**
7
- * Represents single asset abalance in your wallet.
7
+ * Represents single asset balance in your wallet.
8
8
  */
9
9
  export class Balance implements Component {
10
10
  timestamp: timestamp;
@@ -38,9 +38,7 @@ export class Balance implements Component {
38
38
  */
39
39
  get total(): number {
40
40
  return (
41
- this._free +
42
- this._freezed +
43
- this.getEstimatedUnrealizedPnL() /* +
41
+ this._free + this._freezed + this.getEstimatedUnrealizedPnL() /* +
44
42
  this.getEstimatedMaintenanceMargin()*/
45
43
  );
46
44
  }
@@ -8,7 +8,7 @@ import {
8
8
  skipLast,
9
9
  withLatestFrom
10
10
  } from 'rxjs/operators';
11
- import { timestamp, toString } from '../common';
11
+ import { timestamp, toString } from '../shared';
12
12
  import { Candle } from './candle';
13
13
  import { tf } from './timeframe';
14
14
 
@@ -1,7 +1,7 @@
1
1
  import { from } from 'rxjs';
2
2
  import { map } from 'rxjs/operators';
3
3
  import { TradePatchEvent } from '../store/event';
4
- import { now } from '../common';
4
+ import { now } from '../shared';
5
5
  import { Candle } from './candle';
6
6
  import { mergeCandle } from './candle-builder';
7
7
  import { instrumentOf } from './instrument';
@@ -1,4 +1,4 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
 
3
3
  export class Candle {
4
4
  constructor(
@@ -1,4 +1,4 @@
1
- export class Commision {
1
+ export class Commission {
2
2
  constructor(readonly makerRate: number, readonly takerRate: number) {}
3
3
 
4
4
  calculateMakerFee(value: number) {
@@ -18,6 +18,6 @@ export class Commision {
18
18
  }
19
19
  }
20
20
 
21
- export function commisionPercentOf(maker: number, taker: number) {
22
- return new Commision(maker / 100.0, taker / 100.0);
21
+ export function commissionPercentOf(maker: number, taker: number) {
22
+ return new Commission(maker / 100.0, taker / 100.0);
23
23
  }
@@ -1,4 +1,4 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
 
3
3
  export interface Component {
4
4
  timestamp: timestamp;
@@ -3,7 +3,7 @@ export * from './instrument';
3
3
  export * from './balance';
4
4
  export * from './order';
5
5
  export * from './orderbook';
6
- export * from './commision';
6
+ export * from './commission';
7
7
  export * from './component';
8
8
  export * from './candle';
9
9
  export * from './candle-builder';
@@ -1,6 +1,6 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
  import { Asset, AssetSelector } from './asset';
3
- import { Commision } from './commision';
3
+ import { Commission } from './commission';
4
4
  import { Component } from './component';
5
5
 
6
6
  export class InstrumentSelector {
@@ -21,9 +21,12 @@ export class InstrumentSelector {
21
21
  }
22
22
  }
23
23
 
24
+ /**
25
+ * Represents trading market which is made up by two trading assets (base and quoted).
26
+ */
24
27
  export class Instrument extends InstrumentSelector implements Component {
25
28
  timestamp: timestamp;
26
- commision: Commision;
29
+ commission: Commission;
27
30
  cross: Instrument;
28
31
  leverage?: number = null;
29
32
 
@@ -1,7 +1,7 @@
1
1
  import { Component } from './component';
2
2
  import { v4 } from 'uuid';
3
3
  import { InstrumentSelector } from './instrument';
4
- import { timestamp } from '../common';
4
+ import { timestamp } from '../shared';
5
5
 
6
6
  export type OrderSide = 'SELL' | 'BUY';
7
7
  export type OrderType = 'MARKET' | 'LIMIT' | 'STOP-MARKET' | 'STOP-LIMIT';
@@ -1,14 +1,17 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
  import { Instrument } from '../domain';
3
3
  import { Component } from './component';
4
4
 
5
+ /**
6
+ * Provides an access to pending buy and sell orders on the specific market.
7
+ */
5
8
  export class Orderbook implements Component {
6
9
  timestamp: timestamp;
7
10
  bestAskRate: number;
8
11
  bestAskQuantity: number;
9
12
  bestBidRate: number;
10
13
  bestBidQuantity: number;
11
-
14
+ az;
12
15
  get midRate(): number {
13
16
  return this.instrument.quote.fixed((this.bestAskRate + this.bestBidRate) / 2);
14
17
  }
@@ -1,6 +1,6 @@
1
1
  import { Instrument } from '../domain';
2
2
  import { Component } from './component';
3
- import { pnl, timestamp, weightedMean } from '../common';
3
+ import { pnl, timestamp, weightedMean } from '../shared';
4
4
  import { Observable } from 'rxjs';
5
5
  import { map, share } from 'rxjs/operators';
6
6
 
@@ -34,7 +34,7 @@ export class Position implements Component {
34
34
  }
35
35
 
36
36
  export function positionsFlat() {
37
- return function(
37
+ return function (
38
38
  source: Observable<Position[]>
39
39
  ): Observable<{ size: number; rate: number }> {
40
40
  return source.pipe(
@@ -1,7 +1,11 @@
1
- import { timestamp } from '../common';
1
+ import { timestamp } from '../shared';
2
2
  import { Instrument } from '.';
3
3
  import { Component } from './component';
4
4
 
5
+ /**
6
+ * Simple trade or ticker executed on the market, it's a match of buyer
7
+ * and seller of the same asset.
8
+ */
5
9
  export class Trade implements Component {
6
10
  timestamp: timestamp;
7
11
  rate: number;
package/src/index.ts CHANGED
@@ -1,17 +1,12 @@
1
- export * from './behaviour';
2
- export * from './common';
3
-
1
+ export * from './shared';
4
2
  export * from './domain';
5
-
6
3
  export * from './adapter';
7
4
  export * from './adapter/backtester';
8
5
  export * from './adapter/paper';
9
-
10
6
  export * from './indicator';
11
7
  export * from './session';
12
8
  export * from './storage';
13
-
14
9
  export * from './store';
15
10
  export * from './store/event';
16
-
17
11
  export * from './bin';
12
+ export * from './ipc';
@@ -2,7 +2,7 @@ import { from } from 'rxjs';
2
2
  import { Candle } from '../domain';
3
3
  import { truerange } from './truerange';
4
4
  import { sma } from './sma';
5
- import { now } from '../common';
5
+ import { now } from '../shared';
6
6
 
7
7
  describe('truerange atr tests', () => {
8
8
  test('should return expected value', done => {