@quantform/core 0.3.260 → 0.3.262

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 (45) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +4 -5
  2. package/dist/adapter/adapter-aggregate.js +50 -21
  3. package/dist/adapter/adapter-aggregate.js.map +1 -1
  4. package/dist/adapter/adapter.d.ts +30 -7
  5. package/dist/adapter/adapter.js +29 -2
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/backtester/backtester-adapter.d.ts +13 -8
  8. package/dist/adapter/backtester/backtester-adapter.js +25 -32
  9. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  10. package/dist/adapter/index.d.ts +0 -1
  11. package/dist/adapter/index.js +0 -1
  12. package/dist/adapter/index.js.map +1 -1
  13. package/dist/adapter/paper/paper-adapter.d.ts +10 -7
  14. package/dist/adapter/paper/paper-adapter.js +24 -42
  15. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  16. package/dist/adapter/paper/paper-adapter.spec.js +25 -7
  17. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  18. package/dist/bootstrap.js +1 -1
  19. package/dist/bootstrap.js.map +1 -1
  20. package/dist/ipc.js +11 -5
  21. package/dist/ipc.js.map +1 -1
  22. package/dist/ipc.spec.js +4 -57
  23. package/dist/ipc.spec.js.map +1 -1
  24. package/dist/session/session.d.ts +2 -2
  25. package/dist/session/session.js +4 -4
  26. package/dist/session/session.js.map +1 -1
  27. package/dist/tests/backtester-adapter.spec.js +7 -24
  28. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +1 -1
  31. package/src/adapter/adapter-aggregate.ts +55 -75
  32. package/src/adapter/adapter.ts +83 -5
  33. package/src/adapter/backtester/backtester-adapter.ts +39 -19
  34. package/src/adapter/index.ts +0 -1
  35. package/src/adapter/paper/paper-adapter.spec.ts +42 -7
  36. package/src/adapter/paper/paper-adapter.ts +31 -23
  37. package/src/bootstrap.ts +1 -1
  38. package/src/ipc.spec.ts +7 -45
  39. package/src/ipc.ts +6 -6
  40. package/src/session/session.ts +18 -6
  41. package/src/tests/backtester-adapter.spec.ts +6 -12
  42. package/dist/adapter/adapter.event.d.ts +0 -43
  43. package/dist/adapter/adapter.event.js +0 -104
  44. package/dist/adapter/adapter.event.js.map +0 -1
  45. package/src/adapter/adapter.event.ts +0 -64
@@ -146,19 +146,29 @@ export class Session {
146
146
  }
147
147
 
148
148
  /**
149
- * Opens collection of orders.
149
+ * Opens a new order.
150
150
  * Example:
151
151
  * session.open(Order.buyMarket(instrument, 100));
152
152
  */
153
- async open(...orders: Order[]): Promise<void> {
154
- await Promise.all(orders.map(it => this.aggregate.open(it)));
153
+ open(order: Order): Observable<Order> {
154
+ return from(this.aggregate.open(order)).pipe(
155
+ switchMap(it =>
156
+ this.store.changes$.pipe(filter(it => it instanceof Order && it.id == it.id))
157
+ ),
158
+ map(it => it as Order)
159
+ );
155
160
  }
156
161
 
157
162
  /**
158
163
  * Cancels specific order.
159
164
  */
160
- cancel(order: Order): Promise<void> {
161
- return this.aggregate.cancel(order);
165
+ cancel(order: Order): Observable<Order> {
166
+ return from(this.aggregate.cancel(order)).pipe(
167
+ switchMap(it =>
168
+ this.store.changes$.pipe(filter(it => it instanceof Order && it.id == it.id))
169
+ ),
170
+ map(it => it as Order)
171
+ );
162
172
  }
163
173
 
164
174
  /**
@@ -305,7 +315,9 @@ export class Session {
305
315
  return this.store.changes$.pipe(
306
316
  startWith(this.store.snapshot.universe.instrument[selector.toString()]),
307
317
  filter(it => it instanceof Instrument && it.toString() == selector.toString()),
308
- switchMap(() => from(this.aggregate.history(selector, timeframe, length))),
318
+ switchMap(() =>
319
+ from(this.aggregate.history({ instrument: selector, timeframe, length }))
320
+ ),
309
321
  take(1),
310
322
  shareReplay(),
311
323
  mergeMap(it => it)
@@ -1,5 +1,3 @@
1
- import { AdapterAwakeCommand } from '../adapter';
2
- import { AdapterSubscribeCommand } from '../adapter';
3
1
  import { Asset, Commission, instrumentOf } from '../domain';
4
2
  import { InMemoryStorage, Feed } from '../storage';
5
3
  import { Store } from '../store';
@@ -10,7 +8,6 @@ import { PaperExecutor } from '../adapter/paper/executor/paper-executor';
10
8
  import { PaperAdapter } from '../adapter/paper/paper-adapter';
11
9
  import { BacktesterAdapter } from '../adapter/backtester/backtester-adapter';
12
10
  import { BacktesterStreamer } from '../adapter/backtester/backtester-streamer';
13
- import { handler } from '../shared';
14
11
 
15
12
  const base = new Asset('btc', 'binance', 8);
16
13
  const quote = new Asset('usdt', 'binance', 4);
@@ -26,9 +23,10 @@ class DefaultAdapter extends Adapter {
26
23
  return new PaperSpotExecutor(adapter);
27
24
  }
28
25
 
29
- @handler(AdapterAwakeCommand)
30
- onAwake(command: AdapterAwakeCommand, context: AdapterContext) {
31
- context.store.dispatch(
26
+ async awake(context: AdapterContext): Promise<void> {
27
+ await super.awake(context);
28
+
29
+ context.dispatch(
32
30
  new InstrumentPatchEvent(
33
31
  context.timestamp,
34
32
  base,
@@ -88,12 +86,8 @@ describe('backtester adapter tests', () => {
88
86
 
89
87
  const sut = new BacktesterAdapter(adapter, streamer);
90
88
 
91
- sut.dispatch(new AdapterAwakeCommand(), new AdapterContext(sut, store));
92
-
93
- sut.dispatch(
94
- new AdapterSubscribeCommand([instrument]),
95
- new AdapterContext(sut, store)
96
- );
89
+ sut.awake(new AdapterContext(sut, store));
90
+ sut.subscribe([instrument]);
97
91
 
98
92
  expect(sut.name).toEqual('default');
99
93
  });
@@ -1,43 +0,0 @@
1
- import { Feed } from '../storage';
2
- import { timestamp } from '../shared';
3
- import { InstrumentSelector, Order } from '../domain';
4
- export declare class AdapterAwakeCommand {
5
- type: string;
6
- }
7
- export declare class AdapterDisposeCommand {
8
- type: string;
9
- }
10
- export declare class AdapterAccountCommand {
11
- type: string;
12
- }
13
- export declare class AdapterSubscribeCommand {
14
- readonly instrument: Array<InstrumentSelector>;
15
- type: string;
16
- constructor(instrument: Array<InstrumentSelector>);
17
- }
18
- export declare class AdapterOrderOpenCommand {
19
- readonly order: Order;
20
- type: string;
21
- constructor(order: Order);
22
- }
23
- export declare class AdapterOrderCancelCommand {
24
- readonly order: Order;
25
- type: string;
26
- constructor(order: Order);
27
- }
28
- export declare class AdapterHistoryQuery {
29
- readonly instrument: InstrumentSelector;
30
- readonly timeframe: number;
31
- readonly length: number;
32
- type: string;
33
- constructor(instrument: InstrumentSelector, timeframe: number, length: number);
34
- }
35
- export declare class AdapterFeedCommand {
36
- readonly instrument: InstrumentSelector;
37
- readonly from: timestamp;
38
- readonly to: timestamp;
39
- readonly feed: Feed;
40
- readonly progress: (timestamp: number) => void;
41
- type: string;
42
- constructor(instrument: InstrumentSelector, from: timestamp, to: timestamp, feed: Feed, progress: (timestamp: number) => void);
43
- }
@@ -1,104 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AdapterFeedCommand = exports.AdapterHistoryQuery = exports.AdapterOrderCancelCommand = exports.AdapterOrderOpenCommand = exports.AdapterSubscribeCommand = exports.AdapterAccountCommand = exports.AdapterDisposeCommand = exports.AdapterAwakeCommand = void 0;
13
- const storage_1 = require("../storage");
14
- const domain_1 = require("../domain");
15
- const topic_1 = require("../shared/topic");
16
- let AdapterAwakeCommand = class AdapterAwakeCommand {
17
- constructor() {
18
- this.type = 'awake';
19
- }
20
- };
21
- AdapterAwakeCommand = __decorate([
22
- topic_1.event
23
- ], AdapterAwakeCommand);
24
- exports.AdapterAwakeCommand = AdapterAwakeCommand;
25
- let AdapterDisposeCommand = class AdapterDisposeCommand {
26
- constructor() {
27
- this.type = 'dispose';
28
- }
29
- };
30
- AdapterDisposeCommand = __decorate([
31
- topic_1.event
32
- ], AdapterDisposeCommand);
33
- exports.AdapterDisposeCommand = AdapterDisposeCommand;
34
- let AdapterAccountCommand = class AdapterAccountCommand {
35
- constructor() {
36
- this.type = 'account';
37
- }
38
- };
39
- AdapterAccountCommand = __decorate([
40
- topic_1.event
41
- ], AdapterAccountCommand);
42
- exports.AdapterAccountCommand = AdapterAccountCommand;
43
- let AdapterSubscribeCommand = class AdapterSubscribeCommand {
44
- constructor(instrument) {
45
- this.instrument = instrument;
46
- this.type = 'subscribe';
47
- }
48
- };
49
- AdapterSubscribeCommand = __decorate([
50
- topic_1.event,
51
- __metadata("design:paramtypes", [Array])
52
- ], AdapterSubscribeCommand);
53
- exports.AdapterSubscribeCommand = AdapterSubscribeCommand;
54
- let AdapterOrderOpenCommand = class AdapterOrderOpenCommand {
55
- constructor(order) {
56
- this.order = order;
57
- this.type = 'order-open';
58
- }
59
- };
60
- AdapterOrderOpenCommand = __decorate([
61
- topic_1.event,
62
- __metadata("design:paramtypes", [domain_1.Order])
63
- ], AdapterOrderOpenCommand);
64
- exports.AdapterOrderOpenCommand = AdapterOrderOpenCommand;
65
- let AdapterOrderCancelCommand = class AdapterOrderCancelCommand {
66
- constructor(order) {
67
- this.order = order;
68
- this.type = 'order-cancel';
69
- }
70
- };
71
- AdapterOrderCancelCommand = __decorate([
72
- topic_1.event,
73
- __metadata("design:paramtypes", [domain_1.Order])
74
- ], AdapterOrderCancelCommand);
75
- exports.AdapterOrderCancelCommand = AdapterOrderCancelCommand;
76
- let AdapterHistoryQuery = class AdapterHistoryQuery {
77
- constructor(instrument, timeframe, length) {
78
- this.instrument = instrument;
79
- this.timeframe = timeframe;
80
- this.length = length;
81
- this.type = 'history';
82
- }
83
- };
84
- AdapterHistoryQuery = __decorate([
85
- topic_1.event,
86
- __metadata("design:paramtypes", [domain_1.InstrumentSelector, Number, Number])
87
- ], AdapterHistoryQuery);
88
- exports.AdapterHistoryQuery = AdapterHistoryQuery;
89
- let AdapterFeedCommand = class AdapterFeedCommand {
90
- constructor(instrument, from, to, feed, progress) {
91
- this.instrument = instrument;
92
- this.from = from;
93
- this.to = to;
94
- this.feed = feed;
95
- this.progress = progress;
96
- this.type = 'feed';
97
- }
98
- };
99
- AdapterFeedCommand = __decorate([
100
- topic_1.event,
101
- __metadata("design:paramtypes", [domain_1.InstrumentSelector, Number, Number, storage_1.Feed, Function])
102
- ], AdapterFeedCommand);
103
- exports.AdapterFeedCommand = AdapterFeedCommand;
104
- //# sourceMappingURL=adapter.event.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.event.js","sourceRoot":"","sources":["../../src/adapter/adapter.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAkC;AAElC,sCAAsD;AACtD,2CAAwC;AAGxC,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAAhC;QACE,SAAI,GAAG,OAAO,CAAC;IACjB,CAAC;CAAA,CAAA;AAFY,mBAAmB;IAD/B,aAAK;GACO,mBAAmB,CAE/B;AAFY,kDAAmB;AAKhC,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAAlC;QACE,SAAI,GAAG,SAAS,CAAC;IACnB,CAAC;CAAA,CAAA;AAFY,qBAAqB;IADjC,aAAK;GACO,qBAAqB,CAEjC;AAFY,sDAAqB;AAKlC,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAAlC;QACE,SAAI,GAAG,SAAS,CAAC;IACnB,CAAC;CAAA,CAAA;AAFY,qBAAqB;IADjC,aAAK;GACO,qBAAqB,CAEjC;AAFY,sDAAqB;AAKlC,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAGlC,YAAqB,UAAqC;QAArC,eAAU,GAAV,UAAU,CAA2B;QAF1D,SAAI,GAAG,WAAW,CAAC;IAE0C,CAAC;CAC/D,CAAA;AAJY,uBAAuB;IADnC,aAAK;qCAI6B,KAAK;GAH3B,uBAAuB,CAInC;AAJY,0DAAuB;AAOpC,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAGlC,YAAqB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFjC,SAAI,GAAG,YAAY,CAAC;IAEgB,CAAC;CACtC,CAAA;AAJY,uBAAuB;IADnC,aAAK;qCAIwB,cAAK;GAHtB,uBAAuB,CAInC;AAJY,0DAAuB;AAOpC,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAGpC,YAAqB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFjC,SAAI,GAAG,cAAc,CAAC;IAEc,CAAC;CACtC,CAAA;AAJY,yBAAyB;IADrC,aAAK;qCAIwB,cAAK;GAHtB,yBAAyB,CAIrC;AAJY,8DAAyB;AAOtC,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAG9B,YACW,UAA8B,EAC9B,SAAiB,EACjB,MAAc;QAFd,eAAU,GAAV,UAAU,CAAoB;QAC9B,cAAS,GAAT,SAAS,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAQ;QALzB,SAAI,GAAG,SAAS,CAAC;IAMd,CAAC;CACL,CAAA;AARY,mBAAmB;IAD/B,aAAK;qCAKmB,2BAAkB;GAJ9B,mBAAmB,CAQ/B;AARY,kDAAmB;AAWhC,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAG7B,YACW,UAA8B,EAC9B,IAAe,EACf,EAAa,EACb,IAAU,EACV,QAAqC;QAJrC,eAAU,GAAV,UAAU,CAAoB;QAC9B,SAAI,GAAJ,IAAI,CAAW;QACf,OAAE,GAAF,EAAE,CAAW;QACb,SAAI,GAAJ,IAAI,CAAM;QACV,aAAQ,GAAR,QAAQ,CAA6B;QAPhD,SAAI,GAAG,MAAM,CAAC;IAQX,CAAC;CACL,CAAA;AAVY,kBAAkB;IAD9B,aAAK;qCAKmB,2BAAkB,kBAGxB,cAAI;GAPV,kBAAkB,CAU9B;AAVY,gDAAkB"}
@@ -1,64 +0,0 @@
1
- import { Feed } from '../storage';
2
- import { timestamp } from '../shared';
3
- import { InstrumentSelector, Order } from '../domain';
4
- import { event } from '../shared/topic';
5
-
6
- @event
7
- export class AdapterAwakeCommand {
8
- type = 'awake';
9
- }
10
-
11
- @event
12
- export class AdapterDisposeCommand {
13
- type = 'dispose';
14
- }
15
-
16
- @event
17
- export class AdapterAccountCommand {
18
- type = 'account';
19
- }
20
-
21
- @event
22
- export class AdapterSubscribeCommand {
23
- type = 'subscribe';
24
-
25
- constructor(readonly instrument: Array<InstrumentSelector>) {}
26
- }
27
-
28
- @event
29
- export class AdapterOrderOpenCommand {
30
- type = 'order-open';
31
-
32
- constructor(readonly order: Order) {}
33
- }
34
-
35
- @event
36
- export class AdapterOrderCancelCommand {
37
- type = 'order-cancel';
38
-
39
- constructor(readonly order: Order) {}
40
- }
41
-
42
- @event
43
- export class AdapterHistoryQuery {
44
- type = 'history';
45
-
46
- constructor(
47
- readonly instrument: InstrumentSelector,
48
- readonly timeframe: number,
49
- readonly length: number
50
- ) {}
51
- }
52
-
53
- @event
54
- export class AdapterFeedCommand {
55
- type = 'feed';
56
-
57
- constructor(
58
- readonly instrument: InstrumentSelector,
59
- readonly from: timestamp,
60
- readonly to: timestamp,
61
- readonly feed: Feed,
62
- readonly progress: (timestamp: number) => void
63
- ) {}
64
- }