@quantform/core 0.6.4 → 0.6.6
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 +2 -2
- package/dist/adapter/adapter-aggregate.d.ts.map +1 -1
- package/dist/adapter/adapter-aggregate.js +1 -2
- package/dist/adapter/adapter.d.ts +2 -2
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +2 -2
- package/dist/adapter/backtester/backtester-adapter.d.ts.map +1 -1
- package/dist/adapter/paper/paper-adapter.d.ts +2 -2
- package/dist/adapter/paper/paper-adapter.d.ts.map +1 -1
- package/dist/cli/dev.js +2 -2
- package/dist/cli/pull.js +2 -2
- package/dist/cli/run.js +2 -2
- package/dist/cli/test.js +2 -2
- package/dist/domain/asset.d.ts +0 -4
- package/dist/domain/asset.d.ts.map +1 -1
- package/dist/domain/asset.js +0 -6
- package/dist/domain/balance.d.ts +0 -2
- package/dist/domain/balance.d.ts.map +1 -1
- package/dist/domain/balance.js +0 -4
- package/dist/domain/component.d.ts +0 -1
- package/dist/domain/component.d.ts.map +1 -1
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +2 -2
- package/dist/domain/instrument.d.ts +0 -2
- package/dist/domain/instrument.d.ts.map +1 -1
- package/dist/domain/instrument.js +0 -4
- package/dist/domain/ohlc-operator.d.ts +11 -0
- package/dist/domain/ohlc-operator.d.ts.map +1 -0
- package/dist/domain/{candle-operator.js → ohlc-operator.js} +11 -11
- package/dist/domain/{candle.d.ts → ohlc.d.ts} +2 -2
- package/dist/domain/ohlc.d.ts.map +1 -0
- package/dist/domain/{candle.js → ohlc.js} +3 -3
- package/dist/domain/order.d.ts +0 -2
- package/dist/domain/order.d.ts.map +1 -1
- package/dist/domain/order.js +0 -4
- package/dist/domain/orderbook.d.ts +0 -2
- package/dist/domain/orderbook.d.ts.map +1 -1
- package/dist/domain/orderbook.js +0 -4
- package/dist/domain/position.d.ts +0 -2
- package/dist/domain/position.d.ts.map +1 -1
- package/dist/domain/position.js +0 -4
- package/dist/domain/session-builder.d.ts +1 -1
- package/dist/domain/session-builder.d.ts.map +1 -1
- package/dist/domain/session-builder.js +3 -2
- package/dist/domain/session.d.ts +2 -2
- package/dist/domain/session.d.ts.map +1 -1
- package/dist/domain/trade.d.ts +0 -2
- package/dist/domain/trade.d.ts.map +1 -1
- package/dist/domain/trade.js +0 -4
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -1
- package/dist/shared/logger.d.ts +1 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +7 -4
- package/package.json +1 -1
- package/src/adapter/adapter-aggregate.ts +4 -6
- package/src/adapter/adapter.ts +3 -3
- package/src/adapter/backtester/backtester-adapter.ts +2 -2
- package/src/adapter/backtester/backtester-cursor.ts +1 -1
- package/src/adapter/paper/paper-adapter.ts +2 -2
- package/src/cli/dev.ts +2 -2
- package/src/cli/pull.ts +2 -2
- package/src/cli/run.ts +2 -2
- package/src/cli/test.ts +2 -2
- package/src/domain/asset.ts +0 -7
- package/src/domain/balance.ts +0 -5
- package/src/domain/component.ts +0 -1
- package/src/domain/index.ts +2 -2
- package/src/domain/instrument.ts +0 -5
- package/src/domain/ohlc-operator.spec.ts +126 -0
- package/src/domain/{candle-operator.ts → ohlc-operator.ts} +15 -15
- package/src/domain/{candle.spec.ts → ohlc.spec.ts} +6 -6
- package/src/domain/{candle.ts → ohlc.ts} +2 -2
- package/src/domain/order.ts +0 -5
- package/src/domain/orderbook.ts +0 -5
- package/src/domain/position.ts +0 -5
- package/src/domain/session-builder.ts +3 -3
- package/src/domain/session.ts +3 -3
- package/src/domain/trade.ts +0 -5
- package/src/index.ts +75 -1
- package/src/shared/logger.ts +6 -4
- package/dist/domain/candle-operator.d.ts +0 -11
- package/dist/domain/candle-operator.d.ts.map +0 -1
- package/dist/domain/candle.d.ts.map +0 -1
- package/dist/strategy.d.ts +0 -8
- package/dist/strategy.d.ts.map +0 -1
- package/dist/strategy.js +0 -44
- package/src/domain/candle-operator.spec.ts +0 -126
- package/src/strategy.ts +0 -47
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstrumentSelector, Ohlc, Order } from '../domain';
|
|
2
2
|
import { timestamp } from '../shared';
|
|
3
3
|
import { Cache } from '../storage';
|
|
4
4
|
import { Store } from '../store';
|
|
@@ -47,7 +47,7 @@ export declare class AdapterAggregate {
|
|
|
47
47
|
*
|
|
48
48
|
* @returns
|
|
49
49
|
*/
|
|
50
|
-
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<
|
|
50
|
+
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<Ohlc[]>;
|
|
51
51
|
/**
|
|
52
52
|
* Feeds a storage with historical instrument data.
|
|
53
53
|
* @returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-aggregate.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter-aggregate.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAU,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGnF;;;GAGG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAGpC,SAAS,EAAE,cAAc,EAAE,EAC3B,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK;IAG/B;;;;OAIG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAUjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/D;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnC;;;OAGG;IACH,OAAO,CACL,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,EAAE,CAAC;IAUlB;;;OAGG;IACH,IAAI,CACF,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;CASjB"}
|
|
@@ -86,7 +86,6 @@ class AdapterAggregate {
|
|
|
86
86
|
return aggregate;
|
|
87
87
|
}, {});
|
|
88
88
|
for (const adapterName in grouped) {
|
|
89
|
-
shared_1.Logger.debug(adapterName, `subscribing for ${grouped[adapterName].join(', ')}`);
|
|
90
89
|
try {
|
|
91
90
|
yield this.get(adapterName).subscribe(grouped[adapterName]);
|
|
92
91
|
}
|
|
@@ -104,7 +103,7 @@ class AdapterAggregate {
|
|
|
104
103
|
open(order) {
|
|
105
104
|
return __awaiter(this, void 0, void 0, function* () {
|
|
106
105
|
const { adapterName } = order.instrument.base;
|
|
107
|
-
shared_1.Logger.debug(adapterName, `opening a new order on ${order.instrument.
|
|
106
|
+
shared_1.Logger.debug(adapterName, `opening a new order on ${order.instrument.id} as ${order.id}`);
|
|
108
107
|
try {
|
|
109
108
|
yield this.get(adapterName).open(order);
|
|
110
109
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ohlc, InstrumentSelector, Order } from '../domain';
|
|
2
2
|
import { timestamp } from '../shared';
|
|
3
3
|
import { Cache, StorageEvent } from '../storage';
|
|
4
4
|
import { Store } from '../store';
|
|
@@ -47,7 +47,7 @@ export declare abstract class Adapter {
|
|
|
47
47
|
* Cancels specific order.
|
|
48
48
|
*/
|
|
49
49
|
abstract cancel(order: Order): Promise<void>;
|
|
50
|
-
abstract history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<
|
|
50
|
+
abstract history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<Ohlc[]>;
|
|
51
51
|
abstract feed(instrument: InstrumentSelector, from: timestamp, to: timestamp, callback: FeedAsyncCallback): Promise<void>;
|
|
52
52
|
abstract createPaperEngine(adapter: PaperAdapter): PaperEngine;
|
|
53
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAO,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,oBAAY,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAEF,oBAAY,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;AAEnF,oBAAY,cAAc,GAAG,CAC3B,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,KACT,OAAO,CAAC;AAEb;;;GAGG;AACH,8BAAsB,OAAO;IAOf,OAAO,CAAC,QAAQ,CAAC,YAAY;IANzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,SAAS,IAAI,SAAS;gBAIO,YAAY,EAAE,mBAAmB;IAE9D;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpE;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,QAAQ,CAAC,OAAO,CACd,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,EAAE,CAAC;IAElB,QAAQ,CAAC,IAAI,CACX,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAEhB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;CAC/D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstrumentSelector, Ohlc, Order } from '../../domain';
|
|
2
2
|
import { timestamp } from '../../shared';
|
|
3
3
|
import { Store } from '../../store';
|
|
4
4
|
import { Adapter } from '..';
|
|
@@ -23,7 +23,7 @@ export declare class BacktesterAdapter extends Adapter {
|
|
|
23
23
|
account(): Promise<void>;
|
|
24
24
|
open(order: Order): Promise<void>;
|
|
25
25
|
cancel(order: Order): Promise<void>;
|
|
26
|
-
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<
|
|
26
|
+
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<Ohlc[]>;
|
|
27
27
|
feed(instrument: InstrumentSelector, from: timestamp, to: timestamp, callback: FeedAsyncCallback): Promise<void>;
|
|
28
28
|
createPaperEngine(adapter: PaperAdapter): PaperEngine;
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backtester-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"backtester-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/backtester/backtester-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAA+B,KAAK,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;CACf;AAED,wBAAgB,8BAA8B,CAC5C,uBAAuB,EAAE,cAAc,EACvC,QAAQ,EAAE,kBAAkB,GAC3B,cAAc,CAOhB;AAED,qBAAa,iBAAkB,SAAQ,OAAO;IAI1C,QAAQ,CAAC,gBAAgB,EAAE,OAAO;IAClC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK;IALvB,QAAQ,CAAC,IAAI,SAA8B;gBAGhC,gBAAgB,EAAE,OAAO,EACzB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,KAAK;IAKjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlB,SAAS,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7B,OAAO,CACX,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,EAAE,CAAC;IAUlB,IAAI,CACF,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIhB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;CAGtD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstrumentSelector, Ohlc, Order } from '../../domain';
|
|
2
2
|
import { decimal, timestamp } from '../../shared';
|
|
3
3
|
import { Store } from '../../store';
|
|
4
4
|
import { Adapter } from '..';
|
|
@@ -23,7 +23,7 @@ export declare class PaperAdapter extends Adapter {
|
|
|
23
23
|
account(): Promise<void>;
|
|
24
24
|
open(order: Order): Promise<void>;
|
|
25
25
|
cancel(order: Order): Promise<void>;
|
|
26
|
-
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<
|
|
26
|
+
history(instrument: InstrumentSelector, timeframe: number, length: number): Promise<Ohlc[]>;
|
|
27
27
|
feed(instrument: InstrumentSelector, from: timestamp, to: timestamp, callback: FeedAsyncCallback): Promise<void>;
|
|
28
28
|
createPaperEngine(adapter: PaperAdapter): PaperEngine;
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paper-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,
|
|
1
|
+
{"version":3,"file":"paper-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/paper/paper-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAK,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAqB,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACrC;AAED,wBAAgB,yBAAyB,CACvC,uBAAuB,EAAE,cAAc,EACvC,OAAO,EAAE,YAAY,GACpB,cAAc,CAGhB;AAED,qBAAa,YAAa,SAAQ,OAAO;IAKrC,QAAQ,CAAC,gBAAgB,EAAE,OAAO;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK;IACrB,QAAQ,CAAC,OAAO,EAAE,YAAY;IANhC,QAAQ,CAAC,IAAI,SAA8B;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAc;gBAGlB,gBAAgB,EAAE,OAAO,EACzB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY;IAO1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,SAAS,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,OAAO,CACL,UAAU,EAAE,kBAAkB,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,EAAE,CAAC;IAIlB,IAAI,CACF,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIhB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;CAGtD"}
|
package/dist/cli/dev.js
CHANGED
|
@@ -36,9 +36,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
const path_1 = require("path");
|
|
39
|
+
const __1 = require("..");
|
|
39
40
|
const session_builder_1 = require("../domain/session-builder");
|
|
40
41
|
const shared_1 = require("../shared");
|
|
41
|
-
const strategy_1 = require("../strategy");
|
|
42
42
|
const build_1 = __importDefault(require("./build"));
|
|
43
43
|
const workspace_1 = require("./internal/workspace");
|
|
44
44
|
function default_1(name, options) {
|
|
@@ -48,7 +48,7 @@ function default_1(name, options) {
|
|
|
48
48
|
}
|
|
49
49
|
yield Promise.resolve().then(() => __importStar(require((0, path_1.join)((0, workspace_1.buildDirectory)(), 'index'))));
|
|
50
50
|
const builder = new session_builder_1.SessionBuilder().useSessionId(options.id ? Number(options.id) : (0, shared_1.now)());
|
|
51
|
-
const rules = yield (0,
|
|
51
|
+
const rules = yield (0, __1.spawn)(name, builder);
|
|
52
52
|
const session = builder.paper();
|
|
53
53
|
yield session.awake();
|
|
54
54
|
rules(session).subscribe();
|
package/dist/cli/pull.js
CHANGED
|
@@ -37,11 +37,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
const cli_progress_1 = require("cli-progress");
|
|
39
39
|
const path_1 = require("path");
|
|
40
|
+
const __1 = require("..");
|
|
40
41
|
const domain_1 = require("../domain");
|
|
41
42
|
const session_builder_1 = require("../domain/session-builder");
|
|
42
43
|
const shared_1 = require("../shared");
|
|
43
44
|
const storage_1 = require("../storage");
|
|
44
|
-
const strategy_1 = require("../strategy");
|
|
45
45
|
const build_1 = __importDefault(require("./build"));
|
|
46
46
|
const workspace_1 = require("./internal/workspace");
|
|
47
47
|
function default_1(name, instrument, options) {
|
|
@@ -51,7 +51,7 @@ function default_1(name, instrument, options) {
|
|
|
51
51
|
}
|
|
52
52
|
yield Promise.resolve().then(() => __importStar(require((0, path_1.join)((0, workspace_1.buildDirectory)(), 'index'))));
|
|
53
53
|
const builder = new session_builder_1.SessionBuilder().useSessionId(options.id ? Number(options.id) : (0, shared_1.now)());
|
|
54
|
-
yield (0,
|
|
54
|
+
yield (0, __1.spawn)(name, builder);
|
|
55
55
|
const session = builder.paper();
|
|
56
56
|
console.time('Pulling completed in');
|
|
57
57
|
yield session.awake();
|
package/dist/cli/run.js
CHANGED
|
@@ -36,9 +36,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
const path_1 = require("path");
|
|
39
|
+
const __1 = require("..");
|
|
39
40
|
const session_builder_1 = require("../domain/session-builder");
|
|
40
41
|
const shared_1 = require("../shared");
|
|
41
|
-
const strategy_1 = require("../strategy");
|
|
42
42
|
const build_1 = __importDefault(require("./build"));
|
|
43
43
|
const workspace_1 = require("./internal/workspace");
|
|
44
44
|
function default_1(name, options) {
|
|
@@ -48,7 +48,7 @@ function default_1(name, options) {
|
|
|
48
48
|
}
|
|
49
49
|
yield Promise.resolve().then(() => __importStar(require((0, path_1.join)((0, workspace_1.buildDirectory)(), 'index'))));
|
|
50
50
|
const builder = new session_builder_1.SessionBuilder().useSessionId(options.id ? Number(options.id) : (0, shared_1.now)());
|
|
51
|
-
const rules = yield (0,
|
|
51
|
+
const rules = yield (0, __1.spawn)(name, builder);
|
|
52
52
|
const session = builder.live();
|
|
53
53
|
yield session.awake();
|
|
54
54
|
rules(session).subscribe();
|
package/dist/cli/test.js
CHANGED
|
@@ -38,7 +38,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
38
38
|
const path_1 = require("path");
|
|
39
39
|
const session_builder_1 = require("../domain/session-builder");
|
|
40
40
|
const shared_1 = require("../shared");
|
|
41
|
-
const
|
|
41
|
+
const __1 = require("..");
|
|
42
42
|
const build_1 = __importDefault(require("./build"));
|
|
43
43
|
const workspace_1 = require("./internal/workspace");
|
|
44
44
|
function default_1(name, options) {
|
|
@@ -48,7 +48,7 @@ function default_1(name, options) {
|
|
|
48
48
|
}
|
|
49
49
|
yield Promise.resolve().then(() => __importStar(require((0, path_1.join)((0, workspace_1.buildDirectory)(), 'index'))));
|
|
50
50
|
const builder = new session_builder_1.SessionBuilder().useSessionId(options.id ? Number(options.id) : (0, shared_1.now)());
|
|
51
|
-
const rules = yield (0,
|
|
51
|
+
const rules = yield (0, __1.spawn)(name, builder);
|
|
52
52
|
const startTime = performance.now();
|
|
53
53
|
const [session, backtester] = builder.backtest({
|
|
54
54
|
onBacktestStarted: () => shared_1.Logger.info('backtest', `new session ${session.id} started`),
|
package/dist/domain/asset.d.ts
CHANGED
|
@@ -8,10 +8,6 @@ export declare class AssetSelector {
|
|
|
8
8
|
readonly name: string;
|
|
9
9
|
readonly adapterName: string;
|
|
10
10
|
constructor(name: string, adapterName: string);
|
|
11
|
-
/**
|
|
12
|
-
* Returns unified notation of the asset.
|
|
13
|
-
*/
|
|
14
|
-
toString(): string;
|
|
15
11
|
}
|
|
16
12
|
/**
|
|
17
13
|
* Creates @see AssetSelector based on unified string notation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/domain/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGlD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;GAEG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/domain/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGlD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;GAEG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAa9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAQvD;AAED;;;GAGG;AACH,qBAAa,KAAM,SAAQ,aAAa;aAGyB,KAAK,EAAE,MAAM;IAF5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAkB,KAAK,EAAE,MAAM;IAU5E;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAI/B;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;CAG/B"}
|
package/dist/domain/asset.js
CHANGED
|
@@ -19,12 +19,6 @@ class AssetSelector {
|
|
|
19
19
|
this.adapterName = adapterName.toLowerCase();
|
|
20
20
|
this.id = `${this.adapterName}${exports.AssetSelectorSeparator}${this.name}`;
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Returns unified notation of the asset.
|
|
24
|
-
*/
|
|
25
|
-
toString() {
|
|
26
|
-
return this.id;
|
|
27
|
-
}
|
|
28
22
|
}
|
|
29
23
|
exports.AssetSelector = AssetSelector;
|
|
30
24
|
/**
|
package/dist/domain/balance.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export declare class Balance implements Component {
|
|
|
9
9
|
timestamp: number;
|
|
10
10
|
readonly asset: Asset;
|
|
11
11
|
id: string;
|
|
12
|
-
kind: string;
|
|
13
12
|
private locker;
|
|
14
13
|
private available;
|
|
15
14
|
private unavailable;
|
|
@@ -44,6 +43,5 @@ export declare class Balance implements Component {
|
|
|
44
43
|
*/
|
|
45
44
|
getEstimatedUnrealizedPnL(mode?: PositionMode): decimal;
|
|
46
45
|
getEstimatedMargin(mode?: PositionMode): decimal;
|
|
47
|
-
toString(): string;
|
|
48
46
|
}
|
|
49
47
|
//# sourceMappingURL=balance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/domain/balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,qBAAa,OAAQ,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/domain/balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,qBAAa,OAAQ,YAAW,SAAS;IAoCpB,SAAS,EAAE,MAAM;aAAkB,KAAK,EAAE,KAAK;IAnClE,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAU;IAE7B;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAElB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;OAGG;IACH,IAAI,KAAK,IAAI,OAAO,CAInB;IAED;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAE9B,SAAS,EAAE,MAAM,EAAkB,KAAK,EAAE,KAAK;IAIlE,OAAO,CAAC,MAAM,EAAE,OAAO;IAQvB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAMlC;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAchC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmB9B;;OAEG;IACH,yBAAyB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO;IAYvD,kBAAkB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO;CAOjD"}
|
package/dist/domain/balance.js
CHANGED
|
@@ -10,7 +10,6 @@ class Balance {
|
|
|
10
10
|
constructor(timestamp, asset) {
|
|
11
11
|
this.timestamp = timestamp;
|
|
12
12
|
this.asset = asset;
|
|
13
|
-
this.kind = 'balance';
|
|
14
13
|
this.locker = {};
|
|
15
14
|
this.available = shared_1.d.Zero;
|
|
16
15
|
this.unavailable = shared_1.d.Zero;
|
|
@@ -94,8 +93,5 @@ class Balance {
|
|
|
94
93
|
getEstimatedMargin(mode) {
|
|
95
94
|
return Object.values(this.position).reduce((aggregate, position) => (aggregate = aggregate.add(mode && mode != position.mode ? 0 : position.margin)), shared_1.d.Zero);
|
|
96
95
|
}
|
|
97
|
-
toString() {
|
|
98
|
-
return this.asset.toString();
|
|
99
|
-
}
|
|
100
96
|
}
|
|
101
97
|
exports.Balance = Balance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/domain/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/domain/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;CACtB"}
|
package/dist/domain/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export * from './asset';
|
|
|
2
2
|
export * from './balance';
|
|
3
3
|
export * from './balance-operator';
|
|
4
4
|
export * from './error';
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
5
|
+
export * from './ohlc';
|
|
6
|
+
export * from './ohlc-operator';
|
|
7
7
|
export * from './commission';
|
|
8
8
|
export * from './component';
|
|
9
9
|
export * from './instrument';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC"}
|
package/dist/domain/index.js
CHANGED
|
@@ -18,8 +18,8 @@ __exportStar(require("./asset"), exports);
|
|
|
18
18
|
__exportStar(require("./balance"), exports);
|
|
19
19
|
__exportStar(require("./balance-operator"), exports);
|
|
20
20
|
__exportStar(require("./error"), exports);
|
|
21
|
-
__exportStar(require("./
|
|
22
|
-
__exportStar(require("./
|
|
21
|
+
__exportStar(require("./ohlc"), exports);
|
|
22
|
+
__exportStar(require("./ohlc-operator"), exports);
|
|
23
23
|
__exportStar(require("./commission"), exports);
|
|
24
24
|
__exportStar(require("./component"), exports);
|
|
25
25
|
__exportStar(require("./instrument"), exports);
|
|
@@ -7,7 +7,6 @@ export declare class InstrumentSelector {
|
|
|
7
7
|
readonly base: AssetSelector;
|
|
8
8
|
readonly quote: AssetSelector;
|
|
9
9
|
constructor(base: string, quote: string, adapter: string);
|
|
10
|
-
toString(): string;
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
13
12
|
* Represents trading market which is made up by two trading assets (base and quoted).
|
|
@@ -18,7 +17,6 @@ export declare class Instrument extends InstrumentSelector implements Component
|
|
|
18
17
|
readonly quote: Asset;
|
|
19
18
|
readonly raw: string;
|
|
20
19
|
commission: Commission;
|
|
21
|
-
readonly kind = "instrument";
|
|
22
20
|
readonly cross: Instrument | undefined;
|
|
23
21
|
leverage: number | undefined;
|
|
24
22
|
constructor(timestamp: number, base: Asset, quote: Asset, raw: string, commission: Commission);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/domain/instrument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAA0B,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;gBAElB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/domain/instrument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAA0B,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;gBAElB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMzD;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,kBAAmB,YAAW,SAAS;IAK5D,SAAS,EAAE,MAAM;aACN,IAAI,EAAE,KAAK;aACX,KAAK,EAAE,KAAK;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM;IACb,UAAU,EAAE,UAAU;IAR/B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAa;gBAGhC,SAAS,EAAE,MAAM,EACN,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,KAAK,EACrB,GAAG,EAAE,MAAM,EACb,UAAU,EAAE,UAAU;CAQhC;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAYjE"}
|
|
@@ -10,9 +10,6 @@ class InstrumentSelector {
|
|
|
10
10
|
this.quote = new asset_1.AssetSelector(quote.toLowerCase(), adapter.toLowerCase());
|
|
11
11
|
this.id = `${this.base.id}${exports.InstrumentSelectorSeparator}${this.quote.name}`;
|
|
12
12
|
}
|
|
13
|
-
toString() {
|
|
14
|
-
return this.id;
|
|
15
|
-
}
|
|
16
13
|
}
|
|
17
14
|
exports.InstrumentSelector = InstrumentSelector;
|
|
18
15
|
/**
|
|
@@ -26,7 +23,6 @@ class Instrument extends InstrumentSelector {
|
|
|
26
23
|
this.quote = quote;
|
|
27
24
|
this.raw = raw;
|
|
28
25
|
this.commission = commission;
|
|
29
|
-
this.kind = 'instrument';
|
|
30
26
|
this.leverage = undefined;
|
|
31
27
|
if (base.adapterName != quote.adapterName) {
|
|
32
28
|
throw (0, error_1.adapterMismatchError)();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { decimal } from '../shared';
|
|
3
|
+
import { Ohlc } from './ohlc';
|
|
4
|
+
export declare function ohlc<T extends {
|
|
5
|
+
timestamp: number;
|
|
6
|
+
}>(timeframe: number, fn: (x: T) => decimal, candleToStartWith?: Ohlc): (source: Observable<T>) => Observable<Ohlc>;
|
|
7
|
+
export declare function mergeOhlc<T extends {
|
|
8
|
+
timestamp: number;
|
|
9
|
+
}>(timeframe: number, fn: (x: T) => decimal, history$: Observable<Ohlc>): (source$: Observable<T>) => Observable<Ohlc>;
|
|
10
|
+
export declare function ohlcCompleted(): (source: Observable<Ohlc>) => Observable<Ohlc>;
|
|
11
|
+
//# sourceMappingURL=ohlc-operator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlc-operator.d.ts","sourceRoot":"","sources":["../../src/domain/ohlc-operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,UAAU,EAKX,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuB9B,wBAAgB,IAAI,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAClD,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,EACrB,iBAAiB,CAAC,EAAE,IAAI,YAEC,WAAW,CAAC,CAAC,KAAG,WAAW,IAAI,CAAC,CAmC1D;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EACvD,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,EACrB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,aAEA,WAAW,CAAC,CAAC,KAAG,WAAW,IAAI,CAAC,CAY3D;AAED,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,CAwB9E"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ohlcCompleted = exports.mergeOhlc = exports.ohlc = void 0;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
|
-
const
|
|
5
|
+
const ohlc_1 = require("./ohlc");
|
|
6
6
|
const timeframe_1 = require("./timeframe");
|
|
7
7
|
function aggregate(candle, timeframe, value, timestamp) {
|
|
8
8
|
const frame = (0, timeframe_1.tf)(timestamp, timeframe);
|
|
9
9
|
if (!candle) {
|
|
10
|
-
return new
|
|
10
|
+
return new ohlc_1.Ohlc(frame, value, value, value, value);
|
|
11
11
|
}
|
|
12
12
|
if (candle.timestamp === frame) {
|
|
13
13
|
candle.apply(value);
|
|
14
14
|
return undefined;
|
|
15
15
|
}
|
|
16
16
|
else {
|
|
17
|
-
return new
|
|
17
|
+
return new ohlc_1.Ohlc(frame, candle.close, value, value, value);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function ohlc(timeframe, fn, candleToStartWith) {
|
|
21
21
|
return function (source) {
|
|
22
22
|
let candle = candleToStartWith;
|
|
23
23
|
return source.pipe((0, rxjs_1.map)(it => {
|
|
@@ -43,14 +43,14 @@ function candle(timeframe, fn, candleToStartWith) {
|
|
|
43
43
|
}), (0, rxjs_1.mergeMap)(it => it), (0, rxjs_1.share)());
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
exports.
|
|
47
|
-
function
|
|
46
|
+
exports.ohlc = ohlc;
|
|
47
|
+
function mergeOhlc(timeframe, fn, history$) {
|
|
48
48
|
return function (source$) {
|
|
49
|
-
return (0, rxjs_1.concat)(history$.pipe((0, rxjs_1.skipLast)(1)), history$.pipe((0, rxjs_1.last)(), (0, rxjs_1.switchMap)(lastHistoricalCandle => source$.pipe(
|
|
49
|
+
return (0, rxjs_1.concat)(history$.pipe((0, rxjs_1.skipLast)(1)), history$.pipe((0, rxjs_1.last)(), (0, rxjs_1.switchMap)(lastHistoricalCandle => source$.pipe(ohlc(timeframe, fn, lastHistoricalCandle))), (0, rxjs_1.share)()));
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
exports.
|
|
53
|
-
function
|
|
52
|
+
exports.mergeOhlc = mergeOhlc;
|
|
53
|
+
function ohlcCompleted() {
|
|
54
54
|
let currCandle;
|
|
55
55
|
return (source) => source.pipe((0, rxjs_1.map)(it => {
|
|
56
56
|
if (!currCandle) {
|
|
@@ -67,4 +67,4 @@ function candleCompleted() {
|
|
|
67
67
|
}
|
|
68
68
|
}), (0, rxjs_1.filter)(it => it !== undefined), (0, rxjs_1.share)());
|
|
69
69
|
}
|
|
70
|
-
exports.
|
|
70
|
+
exports.ohlcCompleted = ohlcCompleted;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { decimal, timestamp } from '../shared';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class Ohlc {
|
|
3
3
|
timestamp: timestamp;
|
|
4
4
|
open: decimal;
|
|
5
5
|
high: decimal;
|
|
@@ -9,4 +9,4 @@ export declare class Candle {
|
|
|
9
9
|
constructor(timestamp: timestamp, open: decimal, high: decimal, low: decimal, close: decimal, volume?: decimal | undefined);
|
|
10
10
|
apply(value: decimal): void;
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=ohlc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlc.d.ts","sourceRoot":"","sources":["../../src/domain/ohlc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,qBAAa,IAAI;IAEN,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,CAAC;gBALP,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,qBAAS;IAGzB,KAAK,CAAC,KAAK,EAAE,OAAO;CAKrB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Ohlc = void 0;
|
|
4
4
|
const shared_1 = require("../shared");
|
|
5
|
-
class
|
|
5
|
+
class Ohlc {
|
|
6
6
|
constructor(timestamp, open, high, low, close, volume) {
|
|
7
7
|
this.timestamp = timestamp;
|
|
8
8
|
this.open = open;
|
|
@@ -17,4 +17,4 @@ class Candle {
|
|
|
17
17
|
this.close = value;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
exports.
|
|
20
|
+
exports.Ohlc = Ohlc;
|
package/dist/domain/order.d.ts
CHANGED
|
@@ -11,13 +11,11 @@ export declare class Order implements Component {
|
|
|
11
11
|
createdAt: number;
|
|
12
12
|
readonly rate?: decimal | undefined;
|
|
13
13
|
readonly stopRate?: decimal | undefined;
|
|
14
|
-
readonly kind = "order";
|
|
15
14
|
state: OrderState;
|
|
16
15
|
quantityExecuted: decimal;
|
|
17
16
|
averageExecutionRate?: decimal;
|
|
18
17
|
externalId?: string;
|
|
19
18
|
constructor(timestamp: number, id: string, instrument: Instrument, quantity: decimal, createdAt: number, rate?: decimal | undefined, stopRate?: decimal | undefined);
|
|
20
|
-
toString(): string;
|
|
21
19
|
calculateBalanceToLock(base: Balance, quote: Balance): {
|
|
22
20
|
base?: decimal;
|
|
23
21
|
quote?: decimal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../src/domain/order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oBAAY,UAAU,GAClB,KAAK,GACL,SAAS,GACT,QAAQ,GACR,WAAW,GACX,UAAU,GACV,UAAU,CAAC;AAEf,qBAAa,KAAM,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../src/domain/order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oBAAY,UAAU,GAClB,KAAK,GACL,SAAS,GACT,QAAQ,GACR,WAAW,GACX,UAAU,GACV,UAAU,CAAC;AAEf,qBAAa,KAAM,YAAW,SAAS;IAO5B,SAAS,EAAE,MAAM;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO;IACnB,SAAS,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,CAAC;IACd,QAAQ,CAAC,QAAQ,CAAC;IAZpB,KAAK,EAAE,UAAU,CAAS;IAC1B,gBAAgB,UAAU;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGX,SAAS,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM,EACf,IAAI,CAAC,qBAAS,EACd,QAAQ,CAAC,qBAAS;IAW7B,sBAAsB,CACpB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,OAAO,GACb;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CA0BvC"}
|
package/dist/domain/order.js
CHANGED
|
@@ -12,7 +12,6 @@ class Order {
|
|
|
12
12
|
this.createdAt = createdAt;
|
|
13
13
|
this.rate = rate;
|
|
14
14
|
this.stopRate = stopRate;
|
|
15
|
-
this.kind = 'order';
|
|
16
15
|
this.state = 'NEW';
|
|
17
16
|
this.quantityExecuted = shared_1.d.Zero;
|
|
18
17
|
if (!quantity || Number.isNaN(quantity)) {
|
|
@@ -22,9 +21,6 @@ class Order {
|
|
|
22
21
|
throw (0, error_1.invalidArgumentError)(rate);
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
|
-
toString() {
|
|
26
|
-
return this.id;
|
|
27
|
-
}
|
|
28
24
|
calculateBalanceToLock(base, quote) {
|
|
29
25
|
const qty = this.quantity.abs();
|
|
30
26
|
if (this.quantity.greaterThan(0)) {
|
|
@@ -25,8 +25,6 @@ export declare class Orderbook implements Component {
|
|
|
25
25
|
asks: Liquidity;
|
|
26
26
|
bids: Liquidity;
|
|
27
27
|
readonly id: string;
|
|
28
|
-
readonly kind = "orderbook";
|
|
29
28
|
constructor(timestamp: number, instrument: Instrument, asks: Liquidity, bids: Liquidity);
|
|
30
|
-
toString(): string;
|
|
31
29
|
}
|
|
32
30
|
//# sourceMappingURL=orderbook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/domain/orderbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAChC,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAEhC;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/domain/orderbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAChC,eAAO,MAAM,oBAAoB,QAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,OAAO;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,WACpD,CAAC;AAEhC;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IAIhC,SAAS,EAAE,MAAM;aACR,UAAU,EAAE,UAAU;IAC/B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IANxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAGX,SAAS,EAAE,MAAM,EACR,UAAU,EAAE,UAAU,EAC/B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS;CAIzB"}
|
package/dist/domain/orderbook.js
CHANGED
|
@@ -10,11 +10,9 @@ export declare class Position implements Component {
|
|
|
10
10
|
averageExecutionRate: decimal;
|
|
11
11
|
size: decimal;
|
|
12
12
|
leverage: number;
|
|
13
|
-
readonly kind = "position";
|
|
14
13
|
estimatedUnrealizedPnL?: decimal;
|
|
15
14
|
get margin(): decimal;
|
|
16
15
|
constructor(timestamp: number, id: string, instrument: Instrument, mode: PositionMode, averageExecutionRate: decimal, size: decimal, leverage: number);
|
|
17
16
|
calculateEstimatedUnrealizedPnL(rate: decimal): decimal;
|
|
18
|
-
toString(): string;
|
|
19
17
|
}
|
|
20
18
|
//# sourceMappingURL=position.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/domain/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,oBAAY,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,qBAAa,QAAS,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/domain/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,oBAAY,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,qBAAa,QAAS,YAAW,SAAS;IAQ/B,SAAS,EAAE,MAAM;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY;IACpB,oBAAoB,EAAE,OAAO;IAC7B,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,MAAM;IAbzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,IAAI,MAAM,IAAI,OAAO,CAEpB;gBAGQ,SAAS,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,YAAY,EACpB,oBAAoB,EAAE,OAAO,EAC7B,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM;IAGzB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAOxD"}
|
package/dist/domain/position.js
CHANGED
|
@@ -11,7 +11,6 @@ class Position {
|
|
|
11
11
|
this.averageExecutionRate = averageExecutionRate;
|
|
12
12
|
this.size = size;
|
|
13
13
|
this.leverage = leverage;
|
|
14
|
-
this.kind = 'position';
|
|
15
14
|
}
|
|
16
15
|
get margin() {
|
|
17
16
|
return this.instrument.quote.floor(this.size.abs().div(this.leverage));
|
|
@@ -20,8 +19,5 @@ class Position {
|
|
|
20
19
|
this.estimatedUnrealizedPnL = this.instrument.quote.floor((0, shared_1.pnl)(this.averageExecutionRate, rate, this.size));
|
|
21
20
|
return this.estimatedUnrealizedPnL;
|
|
22
21
|
}
|
|
23
|
-
toString() {
|
|
24
|
-
return this.id;
|
|
25
|
-
}
|
|
26
22
|
}
|
|
27
23
|
exports.Position = Position;
|
|
@@ -5,7 +5,7 @@ import { AssetSelector } from './asset';
|
|
|
5
5
|
import { Session } from './session';
|
|
6
6
|
export declare type SessionFeature = (builder: SessionBuilder) => void;
|
|
7
7
|
export declare function deposit(selector: AssetSelector, amount: decimal): SessionFeature;
|
|
8
|
-
export declare function period(from: Date, to
|
|
8
|
+
export declare function period(from: Date, to?: Date): SessionFeature;
|
|
9
9
|
export declare class SessionBuilder {
|
|
10
10
|
id: number;
|
|
11
11
|
adapter: AdapterFactory[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-builder.d.ts","sourceRoot":"","sources":["../../src/domain/session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAKL,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oBAAY,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAE/D,wBAAgB,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc,CAIhF;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"session-builder.d.ts","sourceRoot":"","sources":["../../src/domain/session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AACzC,OAAO,EAKL,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oBAAY,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAE/D,wBAAgB,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc,CAIhF;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,cAAc,CAI5D;AAED,qBAAa,cAAc;IAClB,EAAE,EAAE,MAAM,CAAS;IACnB,OAAO,mBAA+B;IACtC,OAAO,EAAE,cAAc,CAA4B;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACtC,MAAM;;;MAGX;IAEF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;IAMxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAMnD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAMnD,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc;IAMpE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc;IAOnD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAyBtE;;;OAGG;IACH,KAAK,IAAI,OAAO;IAehB;;;OAGG;IACH,IAAI,IAAI,OAAO;CAchB"}
|