@quantform/core 0.3.243 → 0.3.251
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 +11 -5
- package/dist/adapter/adapter-aggregate.js +38 -8
- package/dist/adapter/adapter-aggregate.js.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +1 -2
- package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.d.ts +2 -1
- package/dist/adapter/backtester/backtester-streamer.js +8 -7
- package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.spec.js +9 -10
- package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
- package/dist/bin.d.ts +3 -4
- package/dist/bin.js +6 -6
- package/dist/bin.js.map +1 -1
- package/dist/ipc.d.ts +6 -12
- package/dist/ipc.js +71 -55
- package/dist/ipc.js.map +1 -1
- package/dist/ipc.spec.js +9 -9
- package/dist/ipc.spec.js.map +1 -1
- package/dist/session/session-descriptor.d.ts +6 -3
- package/dist/session/session.d.ts +1 -1
- package/dist/session/session.js +9 -25
- package/dist/session/session.js.map +1 -1
- package/dist/session/session.spec.js +1 -5
- package/dist/session/session.spec.js.map +1 -1
- package/dist/tests/backtester-adapter.spec.js +7 -8
- 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 +110 -13
- package/src/adapter/backtester/backtester-adapter.ts +2 -3
- package/src/adapter/backtester/backtester-streamer.spec.ts +10 -6
- package/src/adapter/backtester/backtester-streamer.ts +8 -7
- package/src/bin.ts +21 -11
- package/src/ipc.spec.ts +9 -8
- package/src/ipc.ts +97 -90
- package/src/session/session-descriptor.ts +7 -4
- package/src/session/session.spec.ts +1 -5
- package/src/session/session.ts +9 -48
- package/src/tests/backtester-adapter.spec.ts +11 -7
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Adapter } from '../adapter';
|
|
2
|
-
import { Session } from '.';
|
|
3
2
|
import { Measurement } from '../storage/measurement';
|
|
4
3
|
import { Feed } from '../storage';
|
|
5
|
-
import {
|
|
4
|
+
import { BacktesterOptions } from './../adapter/backtester';
|
|
5
|
+
import { PaperOptions } from './../adapter/paper';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Describes a single session.
|
|
@@ -44,7 +44,10 @@ export interface SessionDescriptor {
|
|
|
44
44
|
measurement?: Measurement;
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* Session additional options.
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
options?: {
|
|
50
|
+
backtester?: BacktesterOptions;
|
|
51
|
+
paper?: PaperOptions;
|
|
52
|
+
};
|
|
50
53
|
}
|
|
@@ -13,11 +13,7 @@ describe('session tests', () => {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
test('should trigger once', done => {
|
|
16
|
-
const session = paper(descriptor
|
|
17
|
-
balance: {
|
|
18
|
-
['binance:btc']: 1.23
|
|
19
|
-
}
|
|
20
|
-
});
|
|
16
|
+
const session = paper(descriptor);
|
|
21
17
|
|
|
22
18
|
session.instruments().subscribe({
|
|
23
19
|
next: it => {
|
package/src/session/session.ts
CHANGED
|
@@ -26,12 +26,6 @@ import { AdapterAggregate } from '../adapter/adapter-aggregate';
|
|
|
26
26
|
import { Worker, now } from '../shared';
|
|
27
27
|
import { Trade } from '../domain/trade';
|
|
28
28
|
import { SessionDescriptor } from './session-descriptor';
|
|
29
|
-
import {
|
|
30
|
-
AdapterHistoryQuery,
|
|
31
|
-
AdapterOrderCancelCommand,
|
|
32
|
-
AdapterOrderOpenCommand,
|
|
33
|
-
AdapterSubscribeCommand
|
|
34
|
-
} from '../adapter';
|
|
35
29
|
|
|
36
30
|
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
|
|
37
31
|
|
|
@@ -57,7 +51,7 @@ export class Session {
|
|
|
57
51
|
}
|
|
58
52
|
}
|
|
59
53
|
|
|
60
|
-
async awake(
|
|
54
|
+
async awake(describe: (session: Session) => Observable<any>): Promise<void> {
|
|
61
55
|
if (this.initialized) {
|
|
62
56
|
return;
|
|
63
57
|
}
|
|
@@ -65,10 +59,10 @@ export class Session {
|
|
|
65
59
|
this.initialized = true;
|
|
66
60
|
|
|
67
61
|
// awake all adapters and synchronize trading accounts with store.
|
|
68
|
-
await this.aggregate.awake(
|
|
62
|
+
await this.aggregate.awake();
|
|
69
63
|
|
|
70
|
-
if (
|
|
71
|
-
this.subscription =
|
|
64
|
+
if (describe) {
|
|
65
|
+
this.subscription = describe(this).subscribe();
|
|
72
66
|
}
|
|
73
67
|
}
|
|
74
68
|
|
|
@@ -147,24 +141,8 @@ export class Session {
|
|
|
147
141
|
* Subscribes to specific instrument. Usually forces adapter to subscribe
|
|
148
142
|
* for orderbook and ticker streams.
|
|
149
143
|
*/
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
.filter(it => it != null)
|
|
153
|
-
.reduce((aggregate, it) => {
|
|
154
|
-
const adapter = it.base.adapter;
|
|
155
|
-
|
|
156
|
-
if (aggregate[adapter]) {
|
|
157
|
-
aggregate[adapter].push(it);
|
|
158
|
-
} else {
|
|
159
|
-
aggregate[adapter] = [it];
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return aggregate;
|
|
163
|
-
}, {});
|
|
164
|
-
|
|
165
|
-
for (const group in grouped) {
|
|
166
|
-
this.aggregate.dispatch(group, new AdapterSubscribeCommand(grouped[group]));
|
|
167
|
-
}
|
|
144
|
+
subscribe(instrument: Array<InstrumentSelector>): Promise<void> {
|
|
145
|
+
return this.aggregate.subscribe(instrument);
|
|
168
146
|
}
|
|
169
147
|
|
|
170
148
|
/**
|
|
@@ -173,24 +151,14 @@ export class Session {
|
|
|
173
151
|
* session.open(Order.buyMarket(instrument, 100));
|
|
174
152
|
*/
|
|
175
153
|
async open(...orders: Order[]): Promise<void> {
|
|
176
|
-
await Promise.all(
|
|
177
|
-
orders.map(it =>
|
|
178
|
-
this.aggregate.dispatch<AdapterOrderOpenCommand, void>(
|
|
179
|
-
it.instrument.base.adapter,
|
|
180
|
-
new AdapterOrderOpenCommand(it)
|
|
181
|
-
)
|
|
182
|
-
)
|
|
183
|
-
);
|
|
154
|
+
await Promise.all(orders.map(it => this.aggregate.open(it)));
|
|
184
155
|
}
|
|
185
156
|
|
|
186
157
|
/**
|
|
187
158
|
* Cancels specific order.
|
|
188
159
|
*/
|
|
189
160
|
cancel(order: Order): Promise<void> {
|
|
190
|
-
return this.aggregate.
|
|
191
|
-
order.instrument.base.adapter,
|
|
192
|
-
new AdapterOrderCancelCommand(order)
|
|
193
|
-
);
|
|
161
|
+
return this.aggregate.cancel(order);
|
|
194
162
|
}
|
|
195
163
|
|
|
196
164
|
/**
|
|
@@ -372,14 +340,7 @@ export class Session {
|
|
|
372
340
|
return this.store.changes$.pipe(
|
|
373
341
|
startWith(this.store.snapshot.universe.instrument[selector.toString()]),
|
|
374
342
|
filter(it => it instanceof Instrument && it.toString() == selector.toString()),
|
|
375
|
-
switchMap(() =>
|
|
376
|
-
from(
|
|
377
|
-
this.aggregate.dispatch<AdapterHistoryQuery, Candle[]>(
|
|
378
|
-
selector.base.adapter,
|
|
379
|
-
new AdapterHistoryQuery(selector, timeframe, length)
|
|
380
|
-
)
|
|
381
|
-
)
|
|
382
|
-
),
|
|
343
|
+
switchMap(() => from(this.aggregate.history(selector, timeframe, length))),
|
|
383
344
|
take(1),
|
|
384
345
|
shareReplay(),
|
|
385
346
|
mergeMap(it => it)
|
|
@@ -63,13 +63,17 @@ describe('backtester adapter tests', () => {
|
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
test('should stream data from input array', done => {
|
|
66
|
-
const streamer = new BacktesterStreamer(
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
const streamer = new BacktesterStreamer(
|
|
67
|
+
store,
|
|
68
|
+
feed,
|
|
69
|
+
{
|
|
70
|
+
balance: {
|
|
71
|
+
['binance:usdt']: 1000
|
|
72
|
+
},
|
|
73
|
+
from: 0,
|
|
74
|
+
to: 100
|
|
69
75
|
},
|
|
70
|
-
|
|
71
|
-
to: 100,
|
|
72
|
-
listener: {
|
|
76
|
+
{
|
|
73
77
|
onBacktestCompleted: () => {
|
|
74
78
|
expect(store.snapshot.timestamp).toEqual(1);
|
|
75
79
|
expect(store.snapshot.trade[instrument.toString()].rate).toEqual(100);
|
|
@@ -78,7 +82,7 @@ describe('backtester adapter tests', () => {
|
|
|
78
82
|
done();
|
|
79
83
|
}
|
|
80
84
|
}
|
|
81
|
-
|
|
85
|
+
);
|
|
82
86
|
|
|
83
87
|
feed.save(instrument, [new TradePatchEvent(instrument, 100, 10, 1)]);
|
|
84
88
|
|