@quantform/core 0.3.260 → 0.3.265
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.d.ts +1 -1
- package/dist/bootstrap.js +5 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.js +3 -0
- package/dist/domain/index.js.map +1 -1
- package/dist/{session → domain}/session-descriptor.d.ts +2 -2
- package/dist/{session → domain}/session-descriptor.js +0 -0
- package/dist/domain/session-descriptor.js.map +1 -0
- package/dist/{session → domain}/session.d.ts +2 -2
- package/dist/{session → domain}/session.js +4 -4
- package/dist/domain/session.js.map +1 -0
- package/dist/{session → domain}/session.spec.d.ts +0 -0
- package/dist/{session → domain}/session.spec.js +0 -0
- package/dist/domain/session.spec.js.map +1 -0
- package/dist/{session/session-statement.d.ts → domain/statement.d.ts} +2 -2
- package/dist/{session/session-statement.js → domain/statement.js} +1 -1
- package/dist/domain/statement.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/ipc.d.ts +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/shared/task.d.ts +1 -1
- package/dist/store/event/store-order.event.js +5 -5
- package/dist/store/event/store-order.event.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 +2 -2
- package/src/domain/index.ts +3 -0
- package/src/{session → domain}/session-descriptor.ts +2 -2
- package/src/{session → domain}/session.spec.ts +0 -0
- package/src/{session → domain}/session.ts +18 -6
- package/src/{session/session-statement.ts → domain/statement.ts} +1 -1
- package/src/index.ts +0 -1
- package/src/ipc.spec.ts +7 -45
- package/src/ipc.ts +7 -8
- package/src/shared/task.ts +1 -1
- package/src/store/event/store-order.event.ts +5 -5
- package/src/tests/backtester-adapter.spec.ts +6 -12
- package/src/tests/session.spec.ts +1 -1
- 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/dist/session/index.d.ts +0 -4
- package/dist/session/index.js +0 -17
- package/dist/session/index.js.map +0 -1
- package/dist/session/session-descriptor.js.map +0 -1
- package/dist/session/session-optimizer.d.ts +0 -10
- package/dist/session/session-optimizer.js +0 -62
- package/dist/session/session-optimizer.js.map +0 -1
- package/dist/session/session-optimizer.spec.d.ts +0 -1
- package/dist/session/session-optimizer.spec.js +0 -103
- package/dist/session/session-optimizer.spec.js.map +0 -1
- package/dist/session/session-statement.js.map +0 -1
- package/dist/session/session.js.map +0 -1
- package/dist/session/session.spec.js.map +0 -1
- package/src/adapter/adapter.event.ts +0 -64
- package/src/session/index.ts +0 -4
- package/src/session/session-optimizer.spec.ts +0 -86
- package/src/session/session-optimizer.ts +0 -81
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Store } from '../store';
|
|
2
|
-
import { Adapter } from '.';
|
|
2
|
+
import { Adapter, FeedQuery, HistoryQuery } from '.';
|
|
3
3
|
import { InstrumentSelector, Order, Candle } from '../domain';
|
|
4
|
-
import { Feed } from './../storage';
|
|
5
4
|
export declare class AdapterAggregate {
|
|
6
5
|
private readonly store;
|
|
7
6
|
private readonly adapter;
|
|
@@ -12,7 +11,7 @@ export declare class AdapterAggregate {
|
|
|
12
11
|
subscribe(selectors: InstrumentSelector[]): Promise<void>;
|
|
13
12
|
open(order: Order): Promise<void>;
|
|
14
13
|
cancel(order: Order): Promise<void>;
|
|
15
|
-
history(
|
|
16
|
-
feed(
|
|
17
|
-
private
|
|
14
|
+
history(query: HistoryQuery): Promise<Candle[]>;
|
|
15
|
+
feed(query: FeedQuery): Promise<void>;
|
|
16
|
+
private createContext;
|
|
18
17
|
}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AdapterAggregate = void 0;
|
|
4
4
|
const _1 = require(".");
|
|
5
5
|
const shared_1 = require("../shared");
|
|
6
|
-
const adapter_event_1 = require("./adapter.event");
|
|
7
6
|
class AdapterAggregate {
|
|
8
7
|
constructor(adapters, store) {
|
|
9
8
|
this.store = store;
|
|
@@ -11,17 +10,31 @@ class AdapterAggregate {
|
|
|
11
10
|
adapters.forEach(it => (this.adapter[it.name] = it));
|
|
12
11
|
}
|
|
13
12
|
get(adapterName) {
|
|
14
|
-
|
|
13
|
+
const adapter = this.adapter[adapterName];
|
|
14
|
+
if (!adapter) {
|
|
15
|
+
throw new Error(`Unknown adapter: ${adapterName}. You should provide adapter in session descriptor.`);
|
|
16
|
+
}
|
|
17
|
+
return adapter;
|
|
15
18
|
}
|
|
16
19
|
async awake() {
|
|
17
|
-
for (const adapter
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
for (const adapter of Object.values(this.adapter)) {
|
|
21
|
+
try {
|
|
22
|
+
await adapter.awake(this.createContext(adapter));
|
|
23
|
+
await adapter.account();
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
shared_1.Logger.error(e);
|
|
27
|
+
}
|
|
20
28
|
}
|
|
21
29
|
}
|
|
22
30
|
async dispose() {
|
|
23
|
-
for (const adapter
|
|
24
|
-
|
|
31
|
+
for (const adapter of Object.values(this.adapter)) {
|
|
32
|
+
try {
|
|
33
|
+
await adapter.dispose();
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
shared_1.Logger.error(e);
|
|
37
|
+
}
|
|
25
38
|
}
|
|
26
39
|
}
|
|
27
40
|
async subscribe(selectors) {
|
|
@@ -38,33 +51,49 @@ class AdapterAggregate {
|
|
|
38
51
|
return aggregate;
|
|
39
52
|
}, {});
|
|
40
53
|
for (const adapterName in grouped) {
|
|
41
|
-
|
|
54
|
+
try {
|
|
55
|
+
await this.get(adapterName).subscribe(grouped[adapterName]);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
shared_1.Logger.error(e);
|
|
59
|
+
}
|
|
42
60
|
}
|
|
43
61
|
}
|
|
44
62
|
open(order) {
|
|
45
|
-
|
|
63
|
+
try {
|
|
64
|
+
return this.get(order.instrument.base.adapter).open(order);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
shared_1.Logger.error(e);
|
|
68
|
+
}
|
|
46
69
|
}
|
|
47
70
|
cancel(order) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return this.dispatch(selector.base.adapter, new adapter_event_1.AdapterFeedCommand(selector, from, to, destination, callback));
|
|
71
|
+
try {
|
|
72
|
+
return this.get(order.instrument.base.adapter).cancel(order);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
shared_1.Logger.error(e);
|
|
76
|
+
}
|
|
55
77
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
throw new Error(`Unknown adapter: ${adapterName}. You should provide adapter in session descriptor.`);
|
|
78
|
+
history(query) {
|
|
79
|
+
try {
|
|
80
|
+
return this.get(query.instrument.base.adapter).history(query);
|
|
60
81
|
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
shared_1.Logger.error(e);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
feed(query) {
|
|
61
87
|
try {
|
|
62
|
-
return
|
|
88
|
+
return this.get(query.instrument.base.adapter).feed(query);
|
|
63
89
|
}
|
|
64
90
|
catch (e) {
|
|
65
91
|
shared_1.Logger.error(e);
|
|
66
92
|
}
|
|
67
93
|
}
|
|
94
|
+
createContext(adapter) {
|
|
95
|
+
return new _1.AdapterContext(adapter, this.store);
|
|
96
|
+
}
|
|
68
97
|
}
|
|
69
98
|
exports.AdapterAggregate = AdapterAggregate;
|
|
70
99
|
//# sourceMappingURL=adapter-aggregate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-aggregate.js","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"adapter-aggregate.js","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
import { timestamp } from '../shared';
|
|
2
2
|
import { PaperExecutor } from './paper/executor/paper-executor';
|
|
3
3
|
import { PaperAdapter } from './paper';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { State, Store } from '../store';
|
|
5
|
+
import { InstrumentSelector, Order, Candle } from '../domain';
|
|
6
|
+
import { Feed } from '../storage';
|
|
7
|
+
import { StoreEvent } from '../store/event';
|
|
6
8
|
export declare class AdapterContext {
|
|
7
9
|
private readonly adapter;
|
|
8
|
-
readonly store
|
|
10
|
+
private readonly store;
|
|
9
11
|
get timestamp(): timestamp;
|
|
12
|
+
get snapshot(): State;
|
|
10
13
|
constructor(adapter: Adapter, store: Store);
|
|
14
|
+
dispatch(...events: StoreEvent[]): void;
|
|
11
15
|
}
|
|
12
|
-
export declare
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
export declare type HistoryQuery = {
|
|
17
|
+
instrument: InstrumentSelector;
|
|
18
|
+
timeframe: number;
|
|
19
|
+
length: number;
|
|
20
|
+
};
|
|
21
|
+
export declare type FeedQuery = {
|
|
22
|
+
instrument: InstrumentSelector;
|
|
23
|
+
from: timestamp;
|
|
24
|
+
to: timestamp;
|
|
25
|
+
destination: Feed;
|
|
26
|
+
callback: (timestamp: number) => void;
|
|
27
|
+
};
|
|
28
|
+
export declare abstract class Adapter {
|
|
29
|
+
context: AdapterContext;
|
|
15
30
|
abstract name: string;
|
|
16
|
-
abstract createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
|
|
17
31
|
timestamp(): timestamp;
|
|
32
|
+
awake(context: AdapterContext): Promise<void>;
|
|
33
|
+
dispose(): Promise<void>;
|
|
34
|
+
subscribe(instruments: InstrumentSelector[]): Promise<void>;
|
|
35
|
+
account(): Promise<void>;
|
|
36
|
+
open(order: Order): Promise<void>;
|
|
37
|
+
cancel(order: Order): Promise<void>;
|
|
38
|
+
history(query: HistoryQuery): Promise<Candle[]>;
|
|
39
|
+
feed(query: FeedQuery): Promise<void>;
|
|
40
|
+
abstract createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
|
|
18
41
|
}
|
package/dist/adapter/adapter.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Adapter = exports.AdapterContext = void 0;
|
|
4
4
|
const shared_1 = require("../shared");
|
|
5
|
-
const topic_1 = require("../shared/topic");
|
|
6
5
|
class AdapterContext {
|
|
7
6
|
constructor(adapter, store) {
|
|
8
7
|
this.adapter = adapter;
|
|
@@ -11,12 +10,40 @@ class AdapterContext {
|
|
|
11
10
|
get timestamp() {
|
|
12
11
|
return this.adapter.timestamp();
|
|
13
12
|
}
|
|
13
|
+
get snapshot() {
|
|
14
|
+
return this.store.snapshot;
|
|
15
|
+
}
|
|
16
|
+
dispatch(...events) {
|
|
17
|
+
return this.store.dispatch(...events);
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
20
|
exports.AdapterContext = AdapterContext;
|
|
16
|
-
class Adapter
|
|
21
|
+
class Adapter {
|
|
17
22
|
timestamp() {
|
|
18
23
|
return (0, shared_1.now)();
|
|
19
24
|
}
|
|
25
|
+
async awake(context) {
|
|
26
|
+
this.context = context;
|
|
27
|
+
}
|
|
28
|
+
async dispose() { }
|
|
29
|
+
subscribe(instruments) {
|
|
30
|
+
throw new Error('method not implemented');
|
|
31
|
+
}
|
|
32
|
+
account() {
|
|
33
|
+
throw new Error('method not implemented');
|
|
34
|
+
}
|
|
35
|
+
open(order) {
|
|
36
|
+
throw new Error('method not implemented');
|
|
37
|
+
}
|
|
38
|
+
cancel(order) {
|
|
39
|
+
throw new Error('method not implemented');
|
|
40
|
+
}
|
|
41
|
+
history(query) {
|
|
42
|
+
throw new Error('method not implemented');
|
|
43
|
+
}
|
|
44
|
+
feed(query) {
|
|
45
|
+
throw new Error('method not implemented');
|
|
46
|
+
}
|
|
20
47
|
}
|
|
21
48
|
exports.Adapter = Adapter;
|
|
22
49
|
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":";;;AAAA,sCAA2C;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":";;;AAAA,sCAA2C;AAW3C,MAAa,cAAc;IAYzB,YAA6B,OAAgB,EAAmB,KAAY;QAA/C,YAAO,GAAP,OAAO,CAAS;QAAmB,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IARhF,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAID,QAAQ,CAAC,GAAG,MAAoB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC;CACF;AAjBD,wCAiBC;AAoBD,MAAsB,OAAO;IAK3B,SAAS;QACP,OAAO,IAAA,YAAG,GAAE,CAAC;IACf,CAAC;IAMD,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAKD,KAAK,CAAC,OAAO,KAAmB,CAAC;IAMjC,SAAS,CAAC,WAAiC;QACzC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAKD,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAMD,IAAI,CAAC,KAAY;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAKD,MAAM,CAAC,KAAY;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,KAAmB;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;CAGF;AA7DD,0BA6DC"}
|
|
@@ -2,7 +2,9 @@ import { Adapter, AdapterContext } from '..';
|
|
|
2
2
|
import { BacktesterStreamer } from './backtester-streamer';
|
|
3
3
|
import { PaperAdapter, PaperOptions } from '../paper';
|
|
4
4
|
import { timestamp } from '../../shared';
|
|
5
|
-
import {
|
|
5
|
+
import { InstrumentSelector, Order, Candle } from '../../domain';
|
|
6
|
+
import { PaperExecutor } from '../paper/executor/paper-executor';
|
|
7
|
+
import { FeedQuery, HistoryQuery } from '../adapter';
|
|
6
8
|
export declare class BacktesterOptions extends PaperOptions {
|
|
7
9
|
from: timestamp;
|
|
8
10
|
to: timestamp;
|
|
@@ -11,12 +13,15 @@ export declare class BacktesterAdapter extends Adapter {
|
|
|
11
13
|
readonly decoratedAdapter: Adapter;
|
|
12
14
|
readonly streamer: BacktesterStreamer;
|
|
13
15
|
readonly name: string;
|
|
14
|
-
constructor(decoratedAdapter: Adapter, streamer: BacktesterStreamer);
|
|
15
16
|
timestamp(): number;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
constructor(decoratedAdapter: Adapter, streamer: BacktesterStreamer);
|
|
18
|
+
awake(context: AdapterContext): Promise<void>;
|
|
19
|
+
dispose(): Promise<void>;
|
|
20
|
+
subscribe(instruments: InstrumentSelector[]): Promise<void>;
|
|
21
|
+
account(): Promise<void>;
|
|
22
|
+
open(order: Order): Promise<void>;
|
|
23
|
+
cancel(order: Order): Promise<void>;
|
|
24
|
+
history(query: HistoryQuery): Promise<Candle[]>;
|
|
25
|
+
feed(query: FeedQuery): Promise<void>;
|
|
26
|
+
createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
|
|
22
27
|
}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.BacktesterAdapter = exports.BacktesterOptions = void 0;
|
|
13
4
|
const __1 = require("..");
|
|
14
5
|
const paper_1 = require("../paper");
|
|
15
|
-
const topic_1 = require("../../shared/topic");
|
|
16
|
-
const adapter_event_1 = require("../adapter.event");
|
|
17
6
|
const event_1 = require("../../store/event");
|
|
18
7
|
class BacktesterOptions extends paper_1.PaperOptions {
|
|
19
8
|
}
|
|
@@ -28,36 +17,40 @@ class BacktesterAdapter extends __1.Adapter {
|
|
|
28
17
|
timestamp() {
|
|
29
18
|
return this.streamer.timestamp;
|
|
30
19
|
}
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
async awake(context) {
|
|
21
|
+
await super.awake(context);
|
|
22
|
+
await this.decoratedAdapter.awake(context);
|
|
33
23
|
}
|
|
34
|
-
|
|
35
|
-
return this.decoratedAdapter.
|
|
24
|
+
dispose() {
|
|
25
|
+
return this.decoratedAdapter.dispose();
|
|
36
26
|
}
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
async subscribe(instruments) {
|
|
28
|
+
instruments.forEach(it => {
|
|
39
29
|
this.streamer.subscribe(it);
|
|
40
30
|
});
|
|
41
|
-
context.
|
|
31
|
+
this.context.dispatch(...instruments.map(it => new event_1.InstrumentSubscriptionEvent(this.context.timestamp, it, true)));
|
|
32
|
+
}
|
|
33
|
+
account() {
|
|
34
|
+
return this.decoratedAdapter.account();
|
|
35
|
+
}
|
|
36
|
+
open(order) {
|
|
37
|
+
return this.decoratedAdapter.open(order);
|
|
38
|
+
}
|
|
39
|
+
cancel(order) {
|
|
40
|
+
return this.decoratedAdapter.cancel(order);
|
|
42
41
|
}
|
|
43
|
-
async
|
|
42
|
+
async history(query) {
|
|
44
43
|
this.streamer.stop();
|
|
45
|
-
const response = await this.decoratedAdapter.
|
|
44
|
+
const response = await this.decoratedAdapter.history(query);
|
|
46
45
|
this.streamer.tryContinue();
|
|
47
46
|
return response;
|
|
48
47
|
}
|
|
48
|
+
feed(query) {
|
|
49
|
+
return this.decoratedAdapter.feed(query);
|
|
50
|
+
}
|
|
51
|
+
createPaperExecutor(adapter) {
|
|
52
|
+
return this.decoratedAdapter.createPaperExecutor(adapter);
|
|
53
|
+
}
|
|
49
54
|
}
|
|
50
|
-
__decorate([
|
|
51
|
-
(0, topic_1.handler)(adapter_event_1.AdapterSubscribeCommand),
|
|
52
|
-
__metadata("design:type", Function),
|
|
53
|
-
__metadata("design:paramtypes", [adapter_event_1.AdapterSubscribeCommand, __1.AdapterContext]),
|
|
54
|
-
__metadata("design:returntype", void 0)
|
|
55
|
-
], BacktesterAdapter.prototype, "onSubscribe", null);
|
|
56
|
-
__decorate([
|
|
57
|
-
(0, topic_1.handler)(adapter_event_1.AdapterHistoryQuery),
|
|
58
|
-
__metadata("design:type", Function),
|
|
59
|
-
__metadata("design:paramtypes", [adapter_event_1.AdapterHistoryQuery, __1.AdapterContext]),
|
|
60
|
-
__metadata("design:returntype", Promise)
|
|
61
|
-
], BacktesterAdapter.prototype, "onHistory", null);
|
|
62
55
|
exports.BacktesterAdapter = BacktesterAdapter;
|
|
63
56
|
//# sourceMappingURL=backtester-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtester-adapter.js","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backtester-adapter.js","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":";;;AAAA,0BAA6C;AAE7C,oCAAsD;AAEtD,6CAAgE;AAKhE,MAAa,iBAAkB,SAAQ,oBAAY;CAGlD;AAHD,8CAGC;AAED,MAAa,iBAAkB,SAAQ,WAAO;IAO5C,YAAqB,gBAAyB,EAAW,QAA4B;QACnF,KAAK,EAAE,CAAC;QADW,qBAAgB,GAAhB,gBAAgB,CAAS;QAAW,aAAQ,GAAR,QAAQ,CAAoB;QAN5E,SAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAQ3C,CAAC;IAND,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAMD,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAiC;QAC/C,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CACnB,GAAG,WAAW,CAAC,GAAG,CAChB,EAAE,CAAC,EAAE,CAAC,IAAI,mCAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CACxE,CACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AA7DD,8CA6DC"}
|
package/dist/adapter/index.d.ts
CHANGED
package/dist/adapter/index.js
CHANGED
|
@@ -12,5 +12,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./adapter"), exports);
|
|
14
14
|
__exportStar(require("./adapter-aggregate"), exports);
|
|
15
|
-
__exportStar(require("./adapter.event"), exports);
|
|
16
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,sDAAoC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,sDAAoC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Adapter, AdapterContext } from '..';
|
|
2
2
|
import { Store } from '../../store';
|
|
3
3
|
import { PaperExecutor } from './executor/paper-executor';
|
|
4
|
-
import {
|
|
4
|
+
import { Candle, InstrumentSelector, Order } from '../../domain';
|
|
5
|
+
import { FeedQuery, HistoryQuery } from '../adapter';
|
|
5
6
|
export declare class PaperOptions {
|
|
6
7
|
balance: {
|
|
7
8
|
[key: string]: number;
|
|
@@ -15,11 +16,13 @@ export declare class PaperAdapter extends Adapter {
|
|
|
15
16
|
readonly executor: PaperExecutor;
|
|
16
17
|
constructor(decoratedAdapter: Adapter, store: Store, options: PaperOptions);
|
|
17
18
|
timestamp(): number;
|
|
19
|
+
awake(context: AdapterContext): Promise<void>;
|
|
20
|
+
dispose(): Promise<void>;
|
|
21
|
+
subscribe(instruments: InstrumentSelector[]): Promise<void>;
|
|
22
|
+
account(): Promise<void>;
|
|
23
|
+
open(order: Order): Promise<void>;
|
|
24
|
+
cancel(order: Order): Promise<void>;
|
|
25
|
+
history(query: HistoryQuery): Promise<Candle[]>;
|
|
26
|
+
feed(query: FeedQuery): Promise<void>;
|
|
18
27
|
createPaperExecutor(adapter: PaperAdapter): PaperExecutor;
|
|
19
|
-
onUnknownEvent(event: {
|
|
20
|
-
type: string;
|
|
21
|
-
}, context: AdapterContext): any;
|
|
22
|
-
onAccount(event: AdapterAccountCommand, context: AdapterContext): void;
|
|
23
|
-
onOrderOpen(event: AdapterOrderOpenCommand, context: AdapterContext): Promise<void>;
|
|
24
|
-
onOrderCancel(event: AdapterOrderCancelCommand, context: AdapterContext): Promise<void>;
|
|
25
28
|
}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.PaperAdapter = exports.PaperOptions = void 0;
|
|
13
4
|
const __1 = require("..");
|
|
14
|
-
const topic_1 = require("../../shared/topic");
|
|
15
5
|
const domain_1 = require("../../domain");
|
|
16
6
|
const event_1 = require("../../store/event");
|
|
17
|
-
const adapter_event_1 = require("../adapter.event");
|
|
18
7
|
class PaperOptions {
|
|
19
8
|
}
|
|
20
9
|
exports.PaperOptions = PaperOptions;
|
|
@@ -30,13 +19,17 @@ class PaperAdapter extends __1.Adapter {
|
|
|
30
19
|
timestamp() {
|
|
31
20
|
return this.decoratedAdapter.timestamp();
|
|
32
21
|
}
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
async awake(context) {
|
|
23
|
+
await super.awake(context);
|
|
24
|
+
await this.decoratedAdapter.awake(context);
|
|
35
25
|
}
|
|
36
|
-
|
|
37
|
-
return this.decoratedAdapter.
|
|
26
|
+
dispose() {
|
|
27
|
+
return this.decoratedAdapter.dispose();
|
|
38
28
|
}
|
|
39
|
-
|
|
29
|
+
subscribe(instruments) {
|
|
30
|
+
return this.decoratedAdapter.subscribe(instruments);
|
|
31
|
+
}
|
|
32
|
+
async account() {
|
|
40
33
|
let subscribed = Object.values(this.store.snapshot.subscription.asset).filter(it => it.adapter == this.name);
|
|
41
34
|
for (const balance in this.options.balance) {
|
|
42
35
|
const asset = (0, domain_1.assetOf)(balance);
|
|
@@ -45,38 +38,27 @@ class PaperAdapter extends __1.Adapter {
|
|
|
45
38
|
}
|
|
46
39
|
const free = this.options.balance[balance];
|
|
47
40
|
subscribed = subscribed.filter(it => it.toString() != asset.toString());
|
|
48
|
-
this.store.dispatch(new event_1.BalancePatchEvent(asset, free, 0, context.timestamp));
|
|
41
|
+
this.store.dispatch(new event_1.BalancePatchEvent(asset, free, 0, this.context.timestamp));
|
|
49
42
|
}
|
|
50
43
|
for (const missingAsset of subscribed) {
|
|
51
|
-
this.store.dispatch(new event_1.BalancePatchEvent(missingAsset, 0, 0, context.timestamp));
|
|
44
|
+
this.store.dispatch(new event_1.BalancePatchEvent(missingAsset, 0, 0, this.context.timestamp));
|
|
52
45
|
}
|
|
53
46
|
}
|
|
54
|
-
|
|
55
|
-
this.executor.open(
|
|
56
|
-
|
|
47
|
+
async open(order) {
|
|
48
|
+
this.executor.open(order);
|
|
49
|
+
}
|
|
50
|
+
async cancel(order) {
|
|
51
|
+
this.executor.cancel(order);
|
|
57
52
|
}
|
|
58
|
-
|
|
59
|
-
this.
|
|
60
|
-
|
|
53
|
+
history(query) {
|
|
54
|
+
return this.decoratedAdapter.history(query);
|
|
55
|
+
}
|
|
56
|
+
feed(query) {
|
|
57
|
+
return this.decoratedAdapter.feed(query);
|
|
58
|
+
}
|
|
59
|
+
createPaperExecutor(adapter) {
|
|
60
|
+
return this.decoratedAdapter.createPaperExecutor(adapter);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
__decorate([
|
|
64
|
-
(0, topic_1.handler)(adapter_event_1.AdapterAccountCommand),
|
|
65
|
-
__metadata("design:type", Function),
|
|
66
|
-
__metadata("design:paramtypes", [adapter_event_1.AdapterAccountCommand, __1.AdapterContext]),
|
|
67
|
-
__metadata("design:returntype", void 0)
|
|
68
|
-
], PaperAdapter.prototype, "onAccount", null);
|
|
69
|
-
__decorate([
|
|
70
|
-
(0, topic_1.handler)(adapter_event_1.AdapterOrderOpenCommand),
|
|
71
|
-
__metadata("design:type", Function),
|
|
72
|
-
__metadata("design:paramtypes", [adapter_event_1.AdapterOrderOpenCommand, __1.AdapterContext]),
|
|
73
|
-
__metadata("design:returntype", void 0)
|
|
74
|
-
], PaperAdapter.prototype, "onOrderOpen", null);
|
|
75
|
-
__decorate([
|
|
76
|
-
(0, topic_1.handler)(adapter_event_1.AdapterOrderCancelCommand),
|
|
77
|
-
__metadata("design:type", Function),
|
|
78
|
-
__metadata("design:paramtypes", [adapter_event_1.AdapterOrderCancelCommand, __1.AdapterContext]),
|
|
79
|
-
__metadata("design:returntype", void 0)
|
|
80
|
-
], PaperAdapter.prototype, "onOrderCancel", null);
|
|
81
63
|
exports.PaperAdapter = PaperAdapter;
|
|
82
64
|
//# sourceMappingURL=paper-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paper-adapter.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paper-adapter.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":";;;AAAA,0BAA6C;AAG7C,yCAA0E;AAC1E,6CAAsD;AAItD,MAAa,YAAY;CAExB;AAFD,oCAEC;AAED,MAAa,YAAa,SAAQ,WAAO;IAIvC,YACW,gBAAyB,EACzB,KAAY,EACZ,OAAqB;QAE9B,KAAK,EAAE,CAAC;QAJC,qBAAgB,GAAhB,gBAAgB,CAAS;QACzB,UAAK,GAAL,KAAK,CAAO;QACZ,YAAO,GAAP,OAAO,CAAc;QANvB,SAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAUzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,WAAiC;QACzC,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAC3E,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAC9B,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAA,gBAAO,EAAC,OAAO,CAAC,CAAC;YAE/B,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC9B,SAAS;aACV;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE3C,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,yBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;SACpF;QAED,KAAK,MAAM,YAAY,IAAI,UAAU,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,IAAI,yBAAiB,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAClE,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAY;QACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAmB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,KAAgB;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AA5ED,oCA4EC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const _1 = require(".");
|
|
4
|
+
const __1 = require("..");
|
|
4
5
|
const store_1 = require("../../store");
|
|
5
6
|
const adapter_1 = require("../adapter");
|
|
6
7
|
const paper_adapter_1 = require("./paper-adapter");
|
|
8
|
+
const domain_1 = require("./../../domain");
|
|
9
|
+
const instrument_1 = require("./../../domain/instrument");
|
|
10
|
+
const event_1 = require("../../store/event");
|
|
7
11
|
class DefaultAdapter extends adapter_1.Adapter {
|
|
8
12
|
constructor() {
|
|
9
13
|
super(...arguments);
|
|
@@ -12,22 +16,36 @@ class DefaultAdapter extends adapter_1.Adapter {
|
|
|
12
16
|
timestamp() {
|
|
13
17
|
return 123;
|
|
14
18
|
}
|
|
19
|
+
async awake(context) {
|
|
20
|
+
super.awake(context);
|
|
21
|
+
context.dispatch(new event_1.InstrumentPatchEvent(context.timestamp, new domain_1.Asset('a', this.name, 8), new domain_1.Asset('b', this.name, 4), new domain_1.Commission(0.1, 0.1), 'a-b'));
|
|
22
|
+
}
|
|
15
23
|
createPaperExecutor(adapter) {
|
|
16
24
|
return new _1.PaperSpotExecutor(adapter);
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
describe('paper adapter tests', () => {
|
|
28
|
+
const options = {
|
|
29
|
+
balance: {
|
|
30
|
+
['default:a']: 1000,
|
|
31
|
+
['default:b']: 200
|
|
32
|
+
}
|
|
33
|
+
};
|
|
20
34
|
test('should return wrapped adapter name and timestamp', () => {
|
|
21
|
-
const adapter = new DefaultAdapter();
|
|
22
35
|
const store = new store_1.Store();
|
|
23
|
-
const
|
|
24
|
-
balance: {
|
|
25
|
-
['binance:usdt']: 1000
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
const sut = new paper_adapter_1.PaperAdapter(adapter, store, options);
|
|
36
|
+
const sut = new paper_adapter_1.PaperAdapter(new DefaultAdapter(), store, options);
|
|
29
37
|
expect(sut.name).toEqual('default');
|
|
30
38
|
expect(sut.timestamp()).toEqual(123);
|
|
31
39
|
});
|
|
40
|
+
test('', async () => {
|
|
41
|
+
const store = new store_1.Store();
|
|
42
|
+
const adapter = new DefaultAdapter();
|
|
43
|
+
const sut = new paper_adapter_1.PaperAdapter(adapter, store, options);
|
|
44
|
+
await sut.awake(new __1.AdapterContext(sut, store));
|
|
45
|
+
await sut.account();
|
|
46
|
+
const order = domain_1.Order.buyMarket((0, instrument_1.instrumentOf)('default:a-b'), 1.0);
|
|
47
|
+
await sut.open(order);
|
|
48
|
+
expect(store.snapshot.order[order.id]).toEqual(order);
|
|
49
|
+
});
|
|
32
50
|
});
|
|
33
51
|
//# sourceMappingURL=paper-adapter.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paper-adapter.spec.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.spec.ts"],"names":[],"mappings":";;AAAA,wBAAsC;AACtC,uCAAoC;AACpC,wCAAqC;AAErC,mDAA+C;
|
|
1
|
+
{"version":3,"file":"paper-adapter.spec.js","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.spec.ts"],"names":[],"mappings":";;AAAA,wBAAsC;AACtC,0BAAoC;AACpC,uCAAoC;AACpC,wCAAqC;AAErC,mDAA+C;AAC/C,2CAAmE;AACnE,0DAAyD;AACzD,6CAA4E;AAE5E,MAAM,cAAe,SAAQ,iBAAO;IAApC;;QACE,SAAI,GAAG,SAAS,CAAC;IAuBnB,CAAC;IArBC,SAAS;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErB,OAAO,CAAC,QAAQ,CACd,IAAI,4BAAoB,CACtB,OAAO,CAAC,SAAS,EACjB,IAAI,cAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC5B,IAAI,cAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC5B,IAAI,mBAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB,KAAK,CACN,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAqB;QACvC,OAAO,IAAI,oBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG;QACd,OAAO,EAAE;YACP,CAAC,WAAW,CAAC,EAAE,IAAI;YACnB,CAAC,WAAW,CAAC,EAAE,GAAG;SACnB;KACF,CAAC;IAEF,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,4BAAY,CAAC,IAAI,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,4BAAY,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,kBAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAG,cAAK,CAAC,SAAS,CAAC,IAAA,yBAAY,EAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;QAEhE,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BacktesterListener, BacktesterStreamer } from './adapter/backtester';
|
|
2
|
-
import { Session, SessionDescriptor } from './
|
|
2
|
+
import { Session, SessionDescriptor } from './domain';
|
|
3
3
|
export declare class Bootstrap {
|
|
4
4
|
readonly descriptor: SessionDescriptor;
|
|
5
5
|
constructor(descriptor: SessionDescriptor);
|