@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.
- package/dist/adapter/adapter-aggregate.d.ts +4 -5
- package/dist/adapter/adapter-aggregate.js +50 -21
- package/dist/adapter/adapter-aggregate.js.map +1 -1
- package/dist/adapter/adapter.d.ts +30 -7
- package/dist/adapter/adapter.js +29 -2
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +13 -8
- package/dist/adapter/backtester/backtester-adapter.js +25 -32
- package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
- package/dist/adapter/index.d.ts +0 -1
- package/dist/adapter/index.js +0 -1
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.d.ts +10 -7
- package/dist/adapter/paper/paper-adapter.js +24 -42
- package/dist/adapter/paper/paper-adapter.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.spec.js +25 -7
- package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/ipc.js +11 -5
- package/dist/ipc.js.map +1 -1
- package/dist/ipc.spec.js +4 -57
- package/dist/ipc.spec.js.map +1 -1
- package/dist/session/session.d.ts +2 -2
- package/dist/session/session.js +4 -4
- package/dist/session/session.js.map +1 -1
- package/dist/tests/backtester-adapter.spec.js +7 -24
- package/dist/tests/backtester-adapter.spec.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/adapter/adapter-aggregate.ts +55 -75
- package/src/adapter/adapter.ts +83 -5
- package/src/adapter/backtester/backtester-adapter.ts +39 -19
- package/src/adapter/index.ts +0 -1
- package/src/adapter/paper/paper-adapter.spec.ts +42 -7
- package/src/adapter/paper/paper-adapter.ts +31 -23
- package/src/bootstrap.ts +1 -1
- package/src/ipc.spec.ts +7 -45
- package/src/ipc.ts +6 -6
- package/src/session/session.ts +18 -6
- package/src/tests/backtester-adapter.spec.ts +6 -12
- package/dist/adapter/adapter.event.d.ts +0 -43
- package/dist/adapter/adapter.event.js +0 -104
- package/dist/adapter/adapter.event.js.map +0 -1
- package/src/adapter/adapter.event.ts +0 -64
package/src/session/session.ts
CHANGED
|
@@ -146,19 +146,29 @@ export class Session {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/**
|
|
149
|
-
* Opens
|
|
149
|
+
* Opens a new order.
|
|
150
150
|
* Example:
|
|
151
151
|
* session.open(Order.buyMarket(instrument, 100));
|
|
152
152
|
*/
|
|
153
|
-
|
|
154
|
-
|
|
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):
|
|
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(() =>
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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.
|
|
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
|
-
}
|