hft-js 0.1.3 → 0.1.4
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/lib/bar.d.ts +1 -0
- package/lib/bar.js +26 -0
- package/lib/bar.js.map +1 -1
- package/lib/interfaces.d.ts +4 -3
- package/package.json +1 -1
- package/src/bar.ts +24 -0
- package/src/interfaces.ts +7 -3
package/lib/bar.d.ts
CHANGED
package/lib/bar.js
CHANGED
|
@@ -9,6 +9,17 @@
|
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/shixiongfei/hft.js
|
|
11
11
|
*/
|
|
12
|
+
var __assign = (this && this.__assign) || function () {
|
|
13
|
+
__assign = Object.assign || function(t) {
|
|
14
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
15
|
+
s = arguments[i];
|
|
16
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
17
|
+
t[p] = s[p];
|
|
18
|
+
}
|
|
19
|
+
return t;
|
|
20
|
+
};
|
|
21
|
+
return __assign.apply(this, arguments);
|
|
22
|
+
};
|
|
12
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
24
|
exports.createBarGenerator = exports.BarGenerator = void 0;
|
|
14
25
|
var utils_js_1 = require("./utils.js");
|
|
@@ -16,6 +27,7 @@ var BarGenerator = /** @class */ (function () {
|
|
|
16
27
|
function BarGenerator(symbol) {
|
|
17
28
|
this.receivers = [];
|
|
18
29
|
this.symbol = symbol;
|
|
30
|
+
this.shouldUpdate = 0;
|
|
19
31
|
}
|
|
20
32
|
Object.defineProperty(BarGenerator.prototype, "isWorking", {
|
|
21
33
|
get: function () {
|
|
@@ -26,12 +38,18 @@ var BarGenerator = /** @class */ (function () {
|
|
|
26
38
|
});
|
|
27
39
|
BarGenerator.prototype.addReceiver = function (receiver) {
|
|
28
40
|
if (!this.receivers.includes(receiver)) {
|
|
41
|
+
if (receiver.onUpdateBar) {
|
|
42
|
+
this.shouldUpdate += 1;
|
|
43
|
+
}
|
|
29
44
|
this.receivers.push(receiver);
|
|
30
45
|
}
|
|
31
46
|
};
|
|
32
47
|
BarGenerator.prototype.removeReceiver = function (receiver) {
|
|
33
48
|
var index = this.receivers.indexOf(receiver);
|
|
34
49
|
if (index >= 0) {
|
|
50
|
+
if (receiver.onUpdateBar) {
|
|
51
|
+
this.shouldUpdate -= 1;
|
|
52
|
+
}
|
|
35
53
|
this.receivers.splice(index, 1);
|
|
36
54
|
}
|
|
37
55
|
};
|
|
@@ -87,6 +105,14 @@ var BarGenerator = /** @class */ (function () {
|
|
|
87
105
|
this.bar.poc = tick.lastPrice;
|
|
88
106
|
}
|
|
89
107
|
}
|
|
108
|
+
if (this.shouldUpdate > 0) {
|
|
109
|
+
var bar_2 = Object.freeze(__assign(__assign({}, this.bar), { buyVolumes: Object.freeze(__assign({}, this.bar.buyVolumes)), sellVolumes: Object.freeze(__assign({}, this.bar.sellVolumes)) }));
|
|
110
|
+
this.receivers.forEach(function (receiver) {
|
|
111
|
+
if (receiver.onUpdateBar) {
|
|
112
|
+
receiver.onUpdateBar(bar_2, tick, tape);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
90
116
|
};
|
|
91
117
|
BarGenerator.prototype._createBar = function (date, time, tick) {
|
|
92
118
|
return {
|
package/lib/bar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar.js","sourceRoot":"","sources":["../src/bar.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG
|
|
1
|
+
{"version":3,"file":"bar.js","sourceRoot":"","sources":["../src/bar.ts"],"names":[],"mappings":"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"}
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export interface ITickUnsubscriber {
|
|
|
37
37
|
}
|
|
38
38
|
export interface IBarReceiver {
|
|
39
39
|
onBar: (bar: BarData) => void;
|
|
40
|
+
onUpdateBar?: (bar: BarData, tick: TickData, tape: TapeData) => void;
|
|
40
41
|
}
|
|
41
42
|
export interface IBarSubscriber {
|
|
42
43
|
subscribeBar: (symbols: string[], receiver: IBarReceiver) => void;
|
|
@@ -80,7 +81,7 @@ export interface IOrderEmitter {
|
|
|
80
81
|
addReceiver: (receiver: IOrderReceiver) => void;
|
|
81
82
|
removeReceiver: (receiver: IOrderReceiver) => void;
|
|
82
83
|
}
|
|
83
|
-
export interface
|
|
84
|
+
export interface IQueryProvider {
|
|
84
85
|
getTradingDay: () => number;
|
|
85
86
|
getOrderStatistics: () => OrderStatistic[];
|
|
86
87
|
getOrderStatistic: (symbol: string) => OrderStatistic;
|
|
@@ -112,11 +113,11 @@ export type ICancelOrderResultReceiver = {
|
|
|
112
113
|
onCancelOrderSent: () => void;
|
|
113
114
|
onCancelOrderError: (reason: string) => void;
|
|
114
115
|
};
|
|
115
|
-
export interface ITraderProvider extends IProvider, IOrderEmitter,
|
|
116
|
+
export interface ITraderProvider extends IProvider, IOrderEmitter, IQueryProvider {
|
|
116
117
|
placeOrder: (symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver) => void;
|
|
117
118
|
cancelOrder: (order: OrderData, receiver: ICancelOrderResultReceiver) => void;
|
|
118
119
|
}
|
|
119
|
-
export interface IRuntimeEngine extends
|
|
120
|
+
export interface IRuntimeEngine extends IQueryProvider, ITickSubscriber, ITickUnsubscriber, IBarSubscriber, IBarUnsubscriber {
|
|
120
121
|
addStrategy: (strategy: IStrategy) => void;
|
|
121
122
|
removeStrategy: (strategy: IStrategy) => void;
|
|
122
123
|
addPlaceOrderRiskManager: (riskMgr: IPlaceOrderRiskManager) => void;
|
package/package.json
CHANGED
package/src/bar.ts
CHANGED
|
@@ -18,11 +18,13 @@ export type BarInfo = Writeable<BarData>;
|
|
|
18
18
|
export class BarGenerator implements ITickReceiver {
|
|
19
19
|
private readonly receivers: IBarReceiver[];
|
|
20
20
|
private readonly symbol: string;
|
|
21
|
+
private shouldUpdate: number;
|
|
21
22
|
private bar?: BarInfo;
|
|
22
23
|
|
|
23
24
|
constructor(symbol: string) {
|
|
24
25
|
this.receivers = [];
|
|
25
26
|
this.symbol = symbol;
|
|
27
|
+
this.shouldUpdate = 0;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
get isWorking() {
|
|
@@ -31,6 +33,10 @@ export class BarGenerator implements ITickReceiver {
|
|
|
31
33
|
|
|
32
34
|
addReceiver(receiver: IBarReceiver) {
|
|
33
35
|
if (!this.receivers.includes(receiver)) {
|
|
36
|
+
if (receiver.onUpdateBar) {
|
|
37
|
+
this.shouldUpdate += 1;
|
|
38
|
+
}
|
|
39
|
+
|
|
34
40
|
this.receivers.push(receiver);
|
|
35
41
|
}
|
|
36
42
|
}
|
|
@@ -39,6 +45,10 @@ export class BarGenerator implements ITickReceiver {
|
|
|
39
45
|
const index = this.receivers.indexOf(receiver);
|
|
40
46
|
|
|
41
47
|
if (index >= 0) {
|
|
48
|
+
if (receiver.onUpdateBar) {
|
|
49
|
+
this.shouldUpdate -= 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
42
52
|
this.receivers.splice(index, 1);
|
|
43
53
|
}
|
|
44
54
|
}
|
|
@@ -108,6 +118,20 @@ export class BarGenerator implements ITickReceiver {
|
|
|
108
118
|
this.bar.poc = tick.lastPrice;
|
|
109
119
|
}
|
|
110
120
|
}
|
|
121
|
+
|
|
122
|
+
if (this.shouldUpdate > 0) {
|
|
123
|
+
const bar: BarData = Object.freeze({
|
|
124
|
+
...this.bar,
|
|
125
|
+
buyVolumes: Object.freeze({ ...this.bar.buyVolumes }),
|
|
126
|
+
sellVolumes: Object.freeze({ ...this.bar.sellVolumes }),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
this.receivers.forEach((receiver) => {
|
|
130
|
+
if (receiver.onUpdateBar) {
|
|
131
|
+
receiver.onUpdateBar(bar, tick, tape);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
111
135
|
}
|
|
112
136
|
|
|
113
137
|
private _createBar(date: number, time: number, tick: TickData): BarInfo {
|
package/src/interfaces.ts
CHANGED
|
@@ -94,6 +94,7 @@ export interface ITickUnsubscriber {
|
|
|
94
94
|
|
|
95
95
|
export interface IBarReceiver {
|
|
96
96
|
onBar: (bar: BarData) => void;
|
|
97
|
+
onUpdateBar?: (bar: BarData, tick: TickData, tape: TapeData) => void;
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
export interface IBarSubscriber {
|
|
@@ -151,7 +152,7 @@ export interface IOrderEmitter {
|
|
|
151
152
|
removeReceiver: (receiver: IOrderReceiver) => void;
|
|
152
153
|
}
|
|
153
154
|
|
|
154
|
-
export interface
|
|
155
|
+
export interface IQueryProvider {
|
|
155
156
|
getTradingDay: () => number;
|
|
156
157
|
|
|
157
158
|
getOrderStatistics: () => OrderStatistic[];
|
|
@@ -208,7 +209,10 @@ export type ICancelOrderResultReceiver = {
|
|
|
208
209
|
onCancelOrderError: (reason: string) => void;
|
|
209
210
|
};
|
|
210
211
|
|
|
211
|
-
export interface ITraderProvider
|
|
212
|
+
export interface ITraderProvider
|
|
213
|
+
extends IProvider,
|
|
214
|
+
IOrderEmitter,
|
|
215
|
+
IQueryProvider {
|
|
212
216
|
placeOrder: (
|
|
213
217
|
symbol: string,
|
|
214
218
|
offset: OffsetType,
|
|
@@ -223,7 +227,7 @@ export interface ITraderProvider extends IProvider, IOrderEmitter, IQueryApi {
|
|
|
223
227
|
}
|
|
224
228
|
|
|
225
229
|
export interface IRuntimeEngine
|
|
226
|
-
extends
|
|
230
|
+
extends IQueryProvider,
|
|
227
231
|
ITickSubscriber,
|
|
228
232
|
ITickUnsubscriber,
|
|
229
233
|
IBarSubscriber,
|