@quantform/core 0.3.267 → 0.4.5
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.js.map +1 -1
- package/dist/adapter/adapter.d.ts +4 -5
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +5 -5
- package/dist/adapter/backtester/backtester-adapter.js +3 -7
- package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-cursor.d.ts +2 -2
- package/dist/adapter/backtester/backtester-cursor.spec.js +9 -9
- package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.d.ts +6 -4
- package/dist/adapter/backtester/backtester-streamer.js +5 -5
- package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.spec.js +9 -11
- package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
- package/dist/adapter/index.d.ts +2 -0
- package/dist/adapter/index.js +2 -0
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/paper/index.d.ts +1 -1
- package/dist/adapter/paper/index.js +1 -1
- package/dist/adapter/paper/index.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.d.ts +3 -3
- package/dist/adapter/paper/paper-adapter.js +4 -7
- package/dist/adapter/paper/paper-adapter.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.spec.js +3 -5
- package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
- package/dist/adapter/paper/simulator/paper-margin-simulator.d.ts +1 -1
- package/dist/adapter/paper/simulator/paper-margin-simulator.js +6 -6
- package/dist/adapter/paper/simulator/paper-margin-simulator.js.map +1 -1
- package/dist/adapter/paper/simulator/paper-simulator.d.ts +1 -1
- package/dist/adapter/paper/simulator/paper-simulator.js +3 -3
- package/dist/adapter/paper/simulator/paper-simulator.js.map +1 -1
- package/dist/adapter/paper/simulator/paper-spot-simulator.d.ts +2 -2
- package/dist/adapter/paper/simulator/paper-spot-simulator.js +12 -12
- package/dist/adapter/paper/simulator/paper-spot-simulator.js.map +1 -1
- package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js +8 -9
- package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js.map +1 -1
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.js +3 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/domain/balance.d.ts +1 -1
- package/dist/domain/candle.d.ts +14 -0
- package/dist/domain/candle.js +65 -1
- package/dist/domain/candle.js.map +1 -1
- package/dist/domain/candle.spec.js +11 -13
- package/dist/domain/candle.spec.js.map +1 -1
- package/dist/domain/index.d.ts +6 -8
- package/dist/domain/index.js +6 -8
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/order.d.ts +1 -1
- package/dist/domain/order.js.map +1 -1
- package/dist/domain/orderbook.d.ts +1 -1
- package/dist/domain/position.d.ts +2 -2
- package/dist/domain/position.js +3 -3
- package/dist/domain/position.js.map +1 -1
- package/dist/domain/session.d.ts +14 -3
- package/dist/domain/session.js +17 -18
- package/dist/domain/session.js.map +1 -1
- package/dist/domain/session.spec.js +3 -3
- package/dist/domain/session.spec.js.map +1 -1
- package/dist/domain/statement.d.ts +1 -2
- package/dist/domain/statement.js.map +1 -1
- package/dist/domain/trade.d.ts +1 -1
- package/dist/index.d.ts +4 -7
- package/dist/index.js +4 -7
- package/dist/index.js.map +1 -1
- package/dist/indicator/atr.js +3 -3
- package/dist/indicator/atr.js.map +1 -1
- package/dist/indicator/cross.js +3 -3
- package/dist/indicator/cross.js.map +1 -1
- package/dist/indicator/donchian.js +3 -4
- package/dist/indicator/donchian.js.map +1 -1
- package/dist/indicator/drawdown.js +3 -3
- package/dist/indicator/drawdown.js.map +1 -1
- package/dist/indicator/ema.js +3 -3
- package/dist/indicator/ema.js.map +1 -1
- package/dist/indicator/envelope.js +3 -3
- package/dist/indicator/envelope.js.map +1 -1
- package/dist/indicator/index.d.ts +3 -3
- package/dist/indicator/index.js +3 -3
- package/dist/indicator/index.js.map +1 -1
- package/dist/indicator/macd.js +2 -3
- package/dist/indicator/macd.js.map +1 -1
- package/dist/indicator/min-max.js +3 -3
- package/dist/indicator/min-max.js.map +1 -1
- package/dist/indicator/rma.js +3 -3
- package/dist/indicator/rma.js.map +1 -1
- package/dist/indicator/sma.js +2 -3
- package/dist/indicator/sma.js.map +1 -1
- package/dist/indicator/swma.js +3 -3
- package/dist/indicator/swma.js.map +1 -1
- package/dist/indicator/tma.js +3 -3
- package/dist/indicator/tma.js.map +1 -1
- package/dist/indicator/trailing.js +3 -3
- package/dist/indicator/trailing.js.map +1 -1
- package/dist/indicator/truerange.js +3 -3
- package/dist/indicator/truerange.js.map +1 -1
- package/dist/indicator/truerange.spec.js +2 -2
- package/dist/indicator/truerange.spec.js.map +1 -1
- package/dist/indicator/wma.js +3 -3
- package/dist/indicator/wma.js.map +1 -1
- package/dist/ipc.d.ts +1 -1
- package/dist/ipc.js +3 -3
- package/dist/ipc.js.map +1 -1
- package/dist/ipc.spec.js +3 -4
- package/dist/ipc.spec.js.map +1 -1
- package/dist/shared/index.d.ts +4 -4
- package/dist/shared/index.js +4 -4
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/policy.js +1 -1
- package/dist/shared/policy.js.map +1 -1
- package/dist/storage/feed.d.ts +1 -1
- package/dist/storage/feed.js.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/measurement.js.map +1 -1
- package/dist/storage/storage.js.map +1 -1
- package/dist/store/event/index.d.ts +4 -4
- package/dist/store/event/index.js +4 -4
- package/dist/store/event/index.js.map +1 -1
- package/dist/store/event/store-balance.event.d.ts +1 -1
- package/dist/store/event/store-balance.event.js +1 -1
- package/dist/store/event/store-balance.event.js.map +1 -1
- package/dist/store/event/store-balance.event.spec.js +3 -3
- package/dist/store/event/store-balance.event.spec.js.map +1 -1
- package/dist/store/event/store-candle.event.d.ts +2 -2
- package/dist/store/event/store-candle.event.js +2 -2
- package/dist/store/event/store-candle.event.js.map +1 -1
- package/dist/store/event/store-candle.event.spec.js +1 -1
- package/dist/store/event/store-candle.event.spec.js.map +1 -1
- package/dist/store/event/store-instrument.event.d.ts +1 -1
- package/dist/store/event/store-instrument.event.js +1 -1
- package/dist/store/event/store-instrument.event.js.map +1 -1
- package/dist/store/event/store-instrument.event.spec.js +1 -1
- package/dist/store/event/store-instrument.event.spec.js.map +1 -1
- package/dist/store/event/store-order.event.d.ts +1 -1
- package/dist/store/event/store-order.event.js +1 -1
- package/dist/store/event/store-order.event.js.map +1 -1
- package/dist/store/event/store-order.event.spec.js +2 -2
- package/dist/store/event/store-order.event.spec.js.map +1 -1
- package/dist/store/event/store-orderbook.event.d.ts +1 -1
- package/dist/store/event/store-orderbook.event.js +1 -1
- package/dist/store/event/store-orderbook.event.js.map +1 -1
- package/dist/store/event/store-position.event.d.ts +1 -1
- package/dist/store/event/store-position.event.js +1 -1
- package/dist/store/event/store-position.event.js.map +1 -1
- package/dist/store/event/store-trade.event.d.ts +1 -1
- package/dist/store/event/store-trade.event.js +1 -1
- package/dist/store/event/store-trade.event.js.map +1 -1
- package/dist/store/event/store-trade.event.spec.js +2 -2
- package/dist/store/event/store-trade.event.spec.js.map +1 -1
- package/dist/store/index.d.ts +1 -0
- package/dist/store/index.js +1 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/store.d.ts +2 -5
- package/dist/store/store.js +4 -8
- package/dist/store/store.js.map +1 -1
- package/dist/store/store.state.d.ts +1 -1
- package/dist/tests/backtester-adapter.spec.js +6 -13
- package/dist/tests/backtester-adapter.spec.js.map +1 -1
- package/dist/tests/session.spec.d.ts +0 -1
- package/dist/tests/session.spec.js +0 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/adapter/adapter-aggregate.ts +2 -3
- package/src/adapter/adapter.ts +4 -5
- package/src/adapter/backtester/backtester-adapter.ts +6 -6
- package/src/adapter/backtester/backtester-cursor.spec.ts +1 -1
- package/src/adapter/backtester/backtester-cursor.ts +2 -2
- package/src/adapter/backtester/backtester-streamer.spec.ts +1 -3
- package/src/adapter/backtester/backtester-streamer.ts +7 -8
- package/src/adapter/index.ts +2 -0
- package/src/adapter/paper/index.ts +1 -1
- package/src/adapter/paper/paper-adapter.spec.ts +3 -5
- package/src/adapter/paper/paper-adapter.ts +3 -5
- package/src/adapter/paper/simulator/paper-margin-simulator.ts +3 -3
- package/src/adapter/paper/simulator/paper-simulator.ts +3 -3
- package/src/adapter/paper/simulator/paper-spot-simulator.spec.ts +12 -13
- package/src/adapter/paper/simulator/paper-spot-simulator.ts +4 -4
- package/src/bootstrap.ts +4 -4
- package/src/domain/balance.ts +1 -1
- package/src/domain/candle.spec.ts +3 -5
- package/src/domain/candle.ts +103 -0
- package/src/domain/index.ts +6 -8
- package/src/domain/order.ts +2 -2
- package/src/domain/orderbook.ts +1 -1
- package/src/domain/position.ts +2 -3
- package/src/domain/session.spec.ts +3 -3
- package/src/domain/session.ts +61 -8
- package/src/domain/statement.ts +1 -2
- package/src/domain/trade.ts +1 -1
- package/src/index.ts +4 -7
- package/src/indicator/atr.ts +1 -2
- package/src/indicator/cross.ts +3 -4
- package/src/indicator/donchian.ts +2 -3
- package/src/indicator/drawdown.ts +2 -3
- package/src/indicator/ema.ts +1 -2
- package/src/indicator/envelope.ts +1 -2
- package/src/indicator/index.ts +3 -3
- package/src/indicator/macd.ts +1 -2
- package/src/indicator/min-max.ts +1 -2
- package/src/indicator/rma.ts +1 -2
- package/src/indicator/sma.ts +1 -2
- package/src/indicator/swma.ts +1 -2
- package/src/indicator/tma.ts +1 -2
- package/src/indicator/trailing.ts +3 -4
- package/src/indicator/truerange.spec.ts +2 -2
- package/src/indicator/truerange.ts +1 -2
- package/src/indicator/window.ts +1 -1
- package/src/indicator/wma.ts +1 -2
- package/src/ipc.spec.ts +3 -4
- package/src/ipc.ts +6 -6
- package/src/shared/index.ts +4 -4
- package/src/shared/policy.ts +1 -1
- package/src/shared/topic.spec.ts +1 -1
- package/src/storage/feed.ts +20 -1
- package/src/storage/index.ts +1 -1
- package/src/storage/measurement.ts +19 -0
- package/src/storage/storage.ts +37 -0
- package/src/store/event/index.ts +4 -4
- package/src/store/event/store-balance.event.spec.ts +3 -3
- package/src/store/event/store-balance.event.ts +2 -2
- package/src/store/event/store-candle.event.spec.ts +1 -1
- package/src/store/event/store-candle.event.ts +5 -5
- package/src/store/event/store-instrument.event.spec.ts +1 -1
- package/src/store/event/store-instrument.event.ts +2 -2
- package/src/store/event/store-order.event.spec.ts +2 -2
- package/src/store/event/store-order.event.ts +2 -2
- package/src/store/event/store-orderbook.event.ts +2 -2
- package/src/store/event/store-position.event.ts +2 -2
- package/src/store/event/store-trade.event.spec.ts +2 -2
- package/src/store/event/store-trade.event.ts +2 -2
- package/src/store/index.ts +1 -0
- package/src/store/store.state.ts +7 -7
- package/src/store/store.ts +6 -9
- package/src/tests/backtester-adapter.spec.ts +6 -13
- package/src/tests/session.spec.ts +0 -3
- package/dist/domain/candle-builder.d.ts +0 -16
- package/dist/domain/candle-builder.js +0 -70
- package/dist/domain/candle-builder.js.map +0 -1
- package/dist/domain/session-descriptor.d.ts +0 -15
- package/dist/domain/session-descriptor.js +0 -3
- package/dist/domain/session-descriptor.js.map +0 -1
- package/src/domain/candle-builder.ts +0 -104
- package/src/domain/session-descriptor.ts +0 -53
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { concat, Observable } from 'rxjs';
|
|
2
|
-
import {
|
|
3
|
-
filter,
|
|
4
|
-
last,
|
|
5
|
-
map,
|
|
6
|
-
mergeMap,
|
|
7
|
-
share,
|
|
8
|
-
skipLast,
|
|
9
|
-
withLatestFrom
|
|
10
|
-
} from 'rxjs/operators';
|
|
11
|
-
import { timestamp, toString } from '../shared';
|
|
12
|
-
import { Candle } from './candle';
|
|
13
|
-
import { tf } from './timeframe';
|
|
14
|
-
|
|
15
|
-
export class CandleBuilder {
|
|
16
|
-
private _candle: Candle;
|
|
17
|
-
|
|
18
|
-
get candle(): Candle {
|
|
19
|
-
return this._candle;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
constructor(readonly timeframe: number) {}
|
|
23
|
-
|
|
24
|
-
append(value: number, timestamp: timestamp): Candle {
|
|
25
|
-
const frame = tf(timestamp, this.timeframe);
|
|
26
|
-
|
|
27
|
-
if (!this._candle) {
|
|
28
|
-
this._candle = new Candle(frame, value, value, value, value);
|
|
29
|
-
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (this.candle.timestamp == frame) {
|
|
34
|
-
this.candle.apply(value);
|
|
35
|
-
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const previous = this._candle;
|
|
40
|
-
|
|
41
|
-
this._candle = new Candle(frame, value, value, value, value);
|
|
42
|
-
return previous;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function candle<T extends { timestamp: number }>(
|
|
47
|
-
timeframe: number,
|
|
48
|
-
fn: (x: T) => number
|
|
49
|
-
) {
|
|
50
|
-
return function (source: Observable<T>): Observable<Candle> {
|
|
51
|
-
const builder = new CandleBuilder(timeframe);
|
|
52
|
-
let candle: Candle;
|
|
53
|
-
|
|
54
|
-
return source.pipe(
|
|
55
|
-
filter(it => {
|
|
56
|
-
return (candle = builder.append(fn(it), it.timestamp)) != null;
|
|
57
|
-
}),
|
|
58
|
-
map(_ => candle),
|
|
59
|
-
share()
|
|
60
|
-
);
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function mergeCandle<T extends { timestamp: number }>(
|
|
65
|
-
timeframe: number,
|
|
66
|
-
fn: (x: T) => number,
|
|
67
|
-
history$: Observable<Candle>
|
|
68
|
-
) {
|
|
69
|
-
return function (source$: Observable<T>): Observable<Candle> {
|
|
70
|
-
const builder = new CandleBuilder(timeframe);
|
|
71
|
-
let hasMergedHistory = false;
|
|
72
|
-
|
|
73
|
-
return concat(
|
|
74
|
-
history$.pipe(skipLast(1)),
|
|
75
|
-
source$.pipe(
|
|
76
|
-
withLatestFrom(history$.pipe(last())),
|
|
77
|
-
mergeMap(([it, history]) => {
|
|
78
|
-
const completed = builder.append(fn(it), it.timestamp);
|
|
79
|
-
|
|
80
|
-
if (completed) {
|
|
81
|
-
if (completed.timestamp == history.timestamp) {
|
|
82
|
-
completed.open = history.open;
|
|
83
|
-
completed.high = Math.max(completed.high, history.high);
|
|
84
|
-
completed.low = Math.min(completed.low, history.low);
|
|
85
|
-
|
|
86
|
-
hasMergedHistory = true;
|
|
87
|
-
} else if (completed.timestamp > history.timestamp) {
|
|
88
|
-
if (!hasMergedHistory) {
|
|
89
|
-
hasMergedHistory = true;
|
|
90
|
-
return [history, completed];
|
|
91
|
-
}
|
|
92
|
-
} else if (completed.timestamp < history.timestamp) {
|
|
93
|
-
throw new Error('invalid candle sequence, input data is to old.');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return [completed];
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return [];
|
|
100
|
-
})
|
|
101
|
-
)
|
|
102
|
-
);
|
|
103
|
-
};
|
|
104
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Adapter } from '../adapter';
|
|
2
|
-
import { Measurement } from '../storage/measurement';
|
|
3
|
-
import { Feed } from '../storage';
|
|
4
|
-
import { BacktesterOptions } from '../adapter/backtester';
|
|
5
|
-
import { PaperOptions } from '../adapter/paper';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Describes a single session.
|
|
9
|
-
* You can use @run function to start a new session managed by CLI.
|
|
10
|
-
* To start managed session you should install @quantform/cli package and run
|
|
11
|
-
* specific command:
|
|
12
|
-
* - qf paper (to paper trade strategy)
|
|
13
|
-
* - qf backtest (to backtest strategy based on provided feed)
|
|
14
|
-
* - qf live (to live trade strategy)
|
|
15
|
-
* or run on your own in code:
|
|
16
|
-
* - paper(descriptor, options)
|
|
17
|
-
* - backtest(descriptor, options)
|
|
18
|
-
* - live(descriptor)
|
|
19
|
-
*/
|
|
20
|
-
export interface SessionDescriptor {
|
|
21
|
-
/**
|
|
22
|
-
* Unique session identifier, used to identify session in the storage.
|
|
23
|
-
* You can generate new id every time you start the new session or provide
|
|
24
|
-
* session id explicitly to resume previous session (in code or via CLI).
|
|
25
|
-
* If you don't provide session id, it will generate new one based on time.
|
|
26
|
-
*/
|
|
27
|
-
id?: number;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Collection of adapters used to connect to the exchanges.
|
|
31
|
-
*/
|
|
32
|
-
adapter: Adapter[];
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Provides historical data for backtest, it's not required for live and paper
|
|
36
|
-
* sessions.
|
|
37
|
-
*/
|
|
38
|
-
feed?: Feed;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Stores session variables i.e. indicators, orders, or any other type of time
|
|
42
|
-
* series data. You can install @quantform/editor to render this data in your browser.
|
|
43
|
-
*/
|
|
44
|
-
measurement?: Measurement;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Session additional options.
|
|
48
|
-
*/
|
|
49
|
-
options?: {
|
|
50
|
-
backtester?: BacktesterOptions;
|
|
51
|
-
paper?: PaperOptions;
|
|
52
|
-
};
|
|
53
|
-
}
|