hft-js 0.1.0 → 0.1.2
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 +15 -0
- package/lib/bar.js +114 -0
- package/lib/bar.js.map +1 -0
- package/lib/broker.d.ts +8 -1
- package/lib/broker.js +42 -2
- package/lib/broker.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.test.js +41 -31
- package/lib/index.test.js.map +1 -1
- package/lib/interfaces.d.ts +18 -6
- package/lib/market.d.ts +2 -0
- package/lib/market.js +19 -8
- package/lib/market.js.map +1 -1
- package/lib/provider.d.ts +0 -1
- package/lib/provider.js +0 -4
- package/lib/provider.js.map +1 -1
- package/lib/tape.js +10 -10
- package/lib/tape.js.map +1 -1
- package/lib/trader.d.ts +2 -2
- package/lib/trader.js +34 -32
- package/lib/trader.js.map +1 -1
- package/lib/typedef.d.ts +24 -7
- package/lib/utils.d.ts +6 -0
- package/lib/utils.js +106 -0
- package/lib/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/bar.ts +133 -0
- package/src/broker.ts +120 -2
- package/src/index.test.ts +57 -49
- package/src/index.ts +1 -1
- package/src/interfaces.ts +54 -5
- package/src/market.ts +26 -10
- package/src/provider.ts +0 -5
- package/src/tape.ts +11 -10
- package/src/trader.ts +39 -46
- package/src/typedef.ts +25 -6
- package/src/utils.ts +110 -0
package/lib/bar.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BarData, TapeData, TickData, Writeable } from "./typedef.js";
|
|
2
|
+
import { IBarReceiver, ITickReceiver } from "./interfaces.js";
|
|
3
|
+
export type BarInfo = Writeable<BarData>;
|
|
4
|
+
export declare class BarGenerator implements ITickReceiver {
|
|
5
|
+
private readonly receivers;
|
|
6
|
+
private readonly symbol;
|
|
7
|
+
private bar?;
|
|
8
|
+
constructor(symbol: string);
|
|
9
|
+
get isWorking(): boolean;
|
|
10
|
+
addReceiver(receiver: IBarReceiver): void;
|
|
11
|
+
removeReceiver(receiver: IBarReceiver): void;
|
|
12
|
+
onTick(tick: TickData, tape: TapeData): void;
|
|
13
|
+
private _createBar;
|
|
14
|
+
}
|
|
15
|
+
export declare const createBarGenerator: (symbol: string) => BarGenerator;
|
package/lib/bar.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* bar.ts
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Xiongfei Shi
|
|
6
|
+
*
|
|
7
|
+
* Author: Xiongfei Shi <xiongfei.shi(a)icloud.com>
|
|
8
|
+
* License: Apache-2.0
|
|
9
|
+
*
|
|
10
|
+
* https://github.com/shixiongfei/hft.js
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.createBarGenerator = exports.BarGenerator = void 0;
|
|
14
|
+
var utils_js_1 = require("./utils.js");
|
|
15
|
+
var BarGenerator = /** @class */ (function () {
|
|
16
|
+
function BarGenerator(symbol) {
|
|
17
|
+
this.receivers = [];
|
|
18
|
+
this.symbol = symbol;
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(BarGenerator.prototype, "isWorking", {
|
|
21
|
+
get: function () {
|
|
22
|
+
return this.receivers.length > 0;
|
|
23
|
+
},
|
|
24
|
+
enumerable: false,
|
|
25
|
+
configurable: true
|
|
26
|
+
});
|
|
27
|
+
BarGenerator.prototype.addReceiver = function (receiver) {
|
|
28
|
+
if (!this.receivers.includes(receiver)) {
|
|
29
|
+
this.receivers.push(receiver);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
BarGenerator.prototype.removeReceiver = function (receiver) {
|
|
33
|
+
var index = this.receivers.indexOf(receiver);
|
|
34
|
+
if (index >= 0) {
|
|
35
|
+
this.receivers.splice(index, 1);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
BarGenerator.prototype.onTick = function (tick, tape) {
|
|
39
|
+
if (tick.symbol !== this.symbol) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var date = tick.date;
|
|
43
|
+
var time = Math.floor(tick.time / 100) * 100;
|
|
44
|
+
if (this.bar && (this.bar.date !== date || this.bar.time !== time)) {
|
|
45
|
+
var bar_1 = Object.freeze(this.bar);
|
|
46
|
+
Object.freeze(bar_1.buyVolumes);
|
|
47
|
+
Object.freeze(bar_1.sellVolumes);
|
|
48
|
+
this.receivers.forEach(function (receiver) { return receiver.onBar(bar_1); });
|
|
49
|
+
this.bar = undefined;
|
|
50
|
+
}
|
|
51
|
+
if (tape.volumeDelta === 0) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!this.bar) {
|
|
55
|
+
this.bar = this._createBar(date, time, tick);
|
|
56
|
+
}
|
|
57
|
+
this.bar.openInterest = tick.openInterest;
|
|
58
|
+
this.bar.closePrice = tick.lastPrice;
|
|
59
|
+
this.bar.highPrice = Math.max(this.bar.highPrice, tick.lastPrice);
|
|
60
|
+
this.bar.lowPrice = Math.min(this.bar.lowPrice, tick.lastPrice);
|
|
61
|
+
this.bar.volume += tape.volumeDelta;
|
|
62
|
+
this.bar.amount += tape.amountDelta;
|
|
63
|
+
switch (tape.direction) {
|
|
64
|
+
case "up":
|
|
65
|
+
if (tick.lastPrice in this.bar.buyVolumes) {
|
|
66
|
+
this.bar.buyVolumes[tick.lastPrice] += tape.volumeDelta;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.bar.buyVolumes[tick.lastPrice] = tape.volumeDelta;
|
|
70
|
+
}
|
|
71
|
+
this.bar.delta += tape.volumeDelta;
|
|
72
|
+
break;
|
|
73
|
+
case "down":
|
|
74
|
+
if (tick.lastPrice in this.bar.sellVolumes) {
|
|
75
|
+
this.bar.sellVolumes[tick.lastPrice] += tape.volumeDelta;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.bar.sellVolumes[tick.lastPrice] = tape.volumeDelta;
|
|
79
|
+
}
|
|
80
|
+
this.bar.delta -= tape.volumeDelta;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
if (tape.direction !== "none") {
|
|
84
|
+
var tickVP = (0, utils_js_1.getBarVolume)(this.bar, tick.lastPrice);
|
|
85
|
+
var pocVP = (0, utils_js_1.getBarVolume)(this.bar, this.bar.poc);
|
|
86
|
+
if (tickVP > pocVP) {
|
|
87
|
+
this.bar.poc = tick.lastPrice;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
BarGenerator.prototype._createBar = function (date, time, tick) {
|
|
92
|
+
return {
|
|
93
|
+
symbol: this.symbol,
|
|
94
|
+
date: date,
|
|
95
|
+
time: time,
|
|
96
|
+
openInterest: tick.openInterest,
|
|
97
|
+
openPrice: tick.lastPrice,
|
|
98
|
+
highPrice: tick.lastPrice,
|
|
99
|
+
lowPrice: tick.lastPrice,
|
|
100
|
+
closePrice: tick.lastPrice,
|
|
101
|
+
volume: 0,
|
|
102
|
+
amount: 0,
|
|
103
|
+
delta: 0,
|
|
104
|
+
poc: tick.lastPrice,
|
|
105
|
+
buyVolumes: {},
|
|
106
|
+
sellVolumes: {},
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
return BarGenerator;
|
|
110
|
+
}());
|
|
111
|
+
exports.BarGenerator = BarGenerator;
|
|
112
|
+
var createBarGenerator = function (symbol) { return new BarGenerator(symbol); };
|
|
113
|
+
exports.createBarGenerator = createBarGenerator;
|
|
114
|
+
//# sourceMappingURL=bar.js.map
|
package/lib/bar.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar.js","sourceRoot":"","sources":["../src/bar.ts"],"names":[],"mappings":"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"}
|
package/lib/broker.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OffsetType, OrderData, OrderFlag, SideType } from "./typedef.js";
|
|
2
|
-
import { ICancelOrderResultReceiver, ICancelOrderRiskManager, ICommissionRateReceiver, IErrorReceiver, IInstrumentReceiver, IInstrumentsReceiver, IMarginRateReceiver, IMarketProvider, IOrdersReceiver, IPlaceOrderRiskManager, IPositionsReceiver, IRuntimeEngine, IStrategy, ITickReceiver, ITraderProvider, ITradingAccountsReceiver, IPlaceOrderResultReceiver, IPositionReceiver, IPositionDetailsReceiver } from "./interfaces.js";
|
|
2
|
+
import { ICancelOrderResultReceiver, ICancelOrderRiskManager, ICommissionRateReceiver, IErrorReceiver, IInstrumentReceiver, IInstrumentsReceiver, IMarginRateReceiver, IMarketProvider, IOrdersReceiver, IPlaceOrderRiskManager, IPositionsReceiver, IRuntimeEngine, IStrategy, ITickReceiver, ITraderProvider, ITradingAccountsReceiver, IPlaceOrderResultReceiver, IPositionReceiver, IPositionDetailsReceiver, IBarReceiver } from "./interfaces.js";
|
|
3
3
|
export declare class Broker implements IRuntimeEngine {
|
|
4
4
|
private readonly trader;
|
|
5
5
|
private readonly market;
|
|
@@ -8,6 +8,7 @@ export declare class Broker implements IRuntimeEngine {
|
|
|
8
8
|
private readonly strategies;
|
|
9
9
|
private readonly placeOrderRiskManagers;
|
|
10
10
|
private readonly cancelOrderRiskManagers;
|
|
11
|
+
private readonly generators;
|
|
11
12
|
constructor(trader: ITraderProvider, market: IMarketProvider, errorReceiver?: IErrorReceiver);
|
|
12
13
|
start(): boolean;
|
|
13
14
|
stop(): void;
|
|
@@ -17,8 +18,14 @@ export declare class Broker implements IRuntimeEngine {
|
|
|
17
18
|
addCancelOrderRiskManager(riskMgr: ICancelOrderRiskManager): void;
|
|
18
19
|
subscribe(symbols: string[], receiver: ITickReceiver): void;
|
|
19
20
|
unsubscribe(symbols: string[], receiver: ITickReceiver): void;
|
|
21
|
+
subscribeBar(symbols: string[], receiver: IBarReceiver): void;
|
|
22
|
+
unsubscribeBar(symbols: string[], receiver: IBarReceiver): void;
|
|
20
23
|
placeOrder(strategy: IStrategy, symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver): void;
|
|
21
24
|
cancelOrder(strategy: IStrategy, order: OrderData, receiver: ICancelOrderResultReceiver): void;
|
|
25
|
+
buyOpen(strategy: IStrategy, symbol: string, volume: number, price: number, receiver: IPlaceOrderResultReceiver): void;
|
|
26
|
+
buyClose(strategy: IStrategy, symbol: string, volume: number, price: number, isToday: boolean, receiver: IPlaceOrderResultReceiver): void;
|
|
27
|
+
sellOpen(strategy: IStrategy, symbol: string, volume: number, price: number, receiver: IPlaceOrderResultReceiver): void;
|
|
28
|
+
sellClose(strategy: IStrategy, symbol: string, volume: number, price: number, isToday: boolean, receiver: IPlaceOrderResultReceiver): void;
|
|
22
29
|
getTradingDay(): number;
|
|
23
30
|
queryCommissionRate(symbol: string, receiver: ICommissionRateReceiver): void;
|
|
24
31
|
queryMarginRate(symbol: string, receiver: IMarginRateReceiver): void;
|
package/lib/broker.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.createBroker = exports.Broker = void 0;
|
|
14
|
+
var bar_js_1 = require("./bar.js");
|
|
14
15
|
var Broker = /** @class */ (function () {
|
|
15
16
|
function Broker(trader, market, errorReceiver) {
|
|
16
17
|
var _this = this;
|
|
@@ -19,6 +20,7 @@ var Broker = /** @class */ (function () {
|
|
|
19
20
|
this.cancelOrderRiskManagers = [];
|
|
20
21
|
this.trader = trader;
|
|
21
22
|
this.market = market;
|
|
23
|
+
this.generators = new Map();
|
|
22
24
|
this.marketLifecycle = {
|
|
23
25
|
onOpen: function () {
|
|
24
26
|
if (_this.market.hasRecorder()) {
|
|
@@ -30,10 +32,10 @@ var Broker = /** @class */ (function () {
|
|
|
30
32
|
},
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
|
-
_this.strategies.forEach(function (strategy) { return strategy.onInit(
|
|
35
|
+
_this.strategies.forEach(function (strategy) { return strategy.onInit(); });
|
|
34
36
|
},
|
|
35
37
|
onClose: function () {
|
|
36
|
-
_this.strategies.forEach(function (strategy) { return strategy.onDestroy(
|
|
38
|
+
_this.strategies.forEach(function (strategy) { return strategy.onDestroy(); });
|
|
37
39
|
_this.market.stopRecorder();
|
|
38
40
|
},
|
|
39
41
|
onError: function (error, message) {
|
|
@@ -92,6 +94,32 @@ var Broker = /** @class */ (function () {
|
|
|
92
94
|
Broker.prototype.unsubscribe = function (symbols, receiver) {
|
|
93
95
|
return this.market.unsubscribe(symbols, receiver);
|
|
94
96
|
};
|
|
97
|
+
Broker.prototype.subscribeBar = function (symbols, receiver) {
|
|
98
|
+
var _this = this;
|
|
99
|
+
symbols.forEach(function (symbol) {
|
|
100
|
+
var generator = _this.generators.get(symbol);
|
|
101
|
+
if (!generator) {
|
|
102
|
+
generator = (0, bar_js_1.createBarGenerator)(symbol);
|
|
103
|
+
_this.generators.set(symbol, generator);
|
|
104
|
+
_this.subscribe([symbol], generator);
|
|
105
|
+
}
|
|
106
|
+
generator.addReceiver(receiver);
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
Broker.prototype.unsubscribeBar = function (symbols, receiver) {
|
|
110
|
+
var _this = this;
|
|
111
|
+
symbols.forEach(function (symbol) {
|
|
112
|
+
var generator = _this.generators.get(symbol);
|
|
113
|
+
if (!generator) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
generator.removeReceiver(receiver);
|
|
117
|
+
if (!generator.isWorking) {
|
|
118
|
+
_this.unsubscribe([symbol], generator);
|
|
119
|
+
_this.generators.delete(symbol);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
};
|
|
95
123
|
Broker.prototype.placeOrder = function (strategy, symbol, offset, side, volume, price, flag, receiver) {
|
|
96
124
|
for (var _i = 0, _a = this.placeOrderRiskManagers; _i < _a.length; _i++) {
|
|
97
125
|
var placeOrderRiskManager = _a[_i];
|
|
@@ -130,6 +158,18 @@ var Broker = /** @class */ (function () {
|
|
|
130
158
|
}
|
|
131
159
|
return this.trader.cancelOrder(order, receiver);
|
|
132
160
|
};
|
|
161
|
+
Broker.prototype.buyOpen = function (strategy, symbol, volume, price, receiver) {
|
|
162
|
+
return this.placeOrder(strategy, symbol, "open", "long", volume, price, "limit", receiver);
|
|
163
|
+
};
|
|
164
|
+
Broker.prototype.buyClose = function (strategy, symbol, volume, price, isToday, receiver) {
|
|
165
|
+
return this.placeOrder(strategy, symbol, isToday ? "close-today" : "close", "long", volume, price, "limit", receiver);
|
|
166
|
+
};
|
|
167
|
+
Broker.prototype.sellOpen = function (strategy, symbol, volume, price, receiver) {
|
|
168
|
+
return this.placeOrder(strategy, symbol, "open", "short", volume, price, "limit", receiver);
|
|
169
|
+
};
|
|
170
|
+
Broker.prototype.sellClose = function (strategy, symbol, volume, price, isToday, receiver) {
|
|
171
|
+
return this.placeOrder(strategy, symbol, isToday ? "close-today" : "close", "short", volume, price, "limit", receiver);
|
|
172
|
+
};
|
|
133
173
|
Broker.prototype.getTradingDay = function () {
|
|
134
174
|
return this.trader.getTradingDay();
|
|
135
175
|
};
|
package/lib/broker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -27,7 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
27
27
|
__exportStar(require("./typedef.js"), exports);
|
|
28
28
|
__exportStar(require("./interfaces.js"), exports);
|
|
29
29
|
__exportStar(require("./broker.js"), exports);
|
|
30
|
-
__exportStar(require("./tape.js"), exports);
|
|
31
30
|
__exportStar(require("./trader.js"), exports);
|
|
32
31
|
__exportStar(require("./market.js"), exports);
|
|
32
|
+
__exportStar(require("./utils.js"), exports);
|
|
33
33
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,kDAAgC;AAChC,8CAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,6CAA2B"}
|
package/lib/index.test.js
CHANGED
|
@@ -70,9 +70,10 @@ var Strategy = /** @class */ (function () {
|
|
|
70
70
|
this.symbol = "ni2505.SHFE";
|
|
71
71
|
this.engine = engine;
|
|
72
72
|
}
|
|
73
|
-
Strategy.prototype.onInit = function (
|
|
73
|
+
Strategy.prototype.onInit = function () {
|
|
74
74
|
var _this = this;
|
|
75
|
-
|
|
75
|
+
this.engine.subscribe([this.symbol], this);
|
|
76
|
+
this.engine.subscribeBar([this.symbol], this);
|
|
76
77
|
console.log("Strategy init");
|
|
77
78
|
console.log("Trading Day", this.engine.getTradingDay());
|
|
78
79
|
this.engine.queryInstrument(this.symbol, {
|
|
@@ -119,7 +120,10 @@ var Strategy = /** @class */ (function () {
|
|
|
119
120
|
console.error("Market data is not found");
|
|
120
121
|
return;
|
|
121
122
|
}
|
|
122
|
-
|
|
123
|
+
if (_this.lastBar) {
|
|
124
|
+
console.log(_this.lastBar);
|
|
125
|
+
}
|
|
126
|
+
_this.engine.buyOpen(_this, _this.symbol, 1, _this.lastTick.orderBook.asks.price[0], {
|
|
123
127
|
onPlaceOrderSent: function (receiptId) {
|
|
124
128
|
console.log("Open Place Order Receipt Id", receiptId);
|
|
125
129
|
},
|
|
@@ -129,8 +133,9 @@ var Strategy = /** @class */ (function () {
|
|
|
129
133
|
});
|
|
130
134
|
}, 30 * 1000);
|
|
131
135
|
};
|
|
132
|
-
Strategy.prototype.onDestroy = function (
|
|
133
|
-
|
|
136
|
+
Strategy.prototype.onDestroy = function () {
|
|
137
|
+
this.engine.unsubscribeBar([this.symbol], this);
|
|
138
|
+
this.engine.unsubscribe([this.symbol], this);
|
|
134
139
|
console.log("Strategy destroy");
|
|
135
140
|
};
|
|
136
141
|
Strategy.prototype.onRisk = function (type, reason) {
|
|
@@ -140,31 +145,33 @@ var Strategy = /** @class */ (function () {
|
|
|
140
145
|
console.log("Entrust order", order);
|
|
141
146
|
};
|
|
142
147
|
Strategy.prototype.onTrade = function (order, trade) {
|
|
143
|
-
console.log("Order", order, "Traded", trade);
|
|
144
|
-
};
|
|
145
|
-
Strategy.prototype.onFinish = function (order) {
|
|
146
148
|
var _this = this;
|
|
147
|
-
console.log("
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
console.log(
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
149
|
+
console.log("Order", order, "Traded", trade);
|
|
150
|
+
if (order.status === "filled") {
|
|
151
|
+
setTimeout(function () {
|
|
152
|
+
_this.engine.queryPosition(_this.symbol, {
|
|
153
|
+
onPosition: function (position) {
|
|
154
|
+
if (!position || !_this.lastTick) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
var todayLong = position.today.long.position - position.today.long.frozen;
|
|
158
|
+
if (todayLong > 0) {
|
|
159
|
+
if (_this.lastBar) {
|
|
160
|
+
console.log(_this.lastBar);
|
|
161
|
+
}
|
|
162
|
+
_this.engine.sellClose(_this, _this.symbol, todayLong, _this.lastTick.orderBook.bids.price[0], true, {
|
|
163
|
+
onPlaceOrderSent: function (receiptId) {
|
|
164
|
+
console.log("Close Place Order Receipt Id", receiptId);
|
|
165
|
+
},
|
|
166
|
+
onPlaceOrderError: function (reason) {
|
|
167
|
+
console.error("Close Place Order Error", reason);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
}, 30 * 1000);
|
|
174
|
+
}
|
|
168
175
|
};
|
|
169
176
|
Strategy.prototype.onCancel = function (order) {
|
|
170
177
|
console.log("Cancel Order", order);
|
|
@@ -172,12 +179,15 @@ var Strategy = /** @class */ (function () {
|
|
|
172
179
|
Strategy.prototype.onReject = function (order) {
|
|
173
180
|
console.log("Reject Order", order);
|
|
174
181
|
};
|
|
175
|
-
Strategy.prototype.onTick = function (tick) {
|
|
176
|
-
//const tape = hft.calcTapeData(tick, this.lastTick);
|
|
182
|
+
Strategy.prototype.onTick = function (tick, tape) {
|
|
177
183
|
//console.log(tick);
|
|
178
184
|
//console.log(tape);
|
|
179
185
|
this.lastTick = tick;
|
|
180
186
|
};
|
|
187
|
+
Strategy.prototype.onBar = function (bar) {
|
|
188
|
+
//console.log(bar)
|
|
189
|
+
this.lastBar = bar;
|
|
190
|
+
};
|
|
181
191
|
return Strategy;
|
|
182
192
|
}());
|
|
183
193
|
var trader = hft.createTrader(config.FlowTdPath, config.FrontTdAddrs, config.UserInfo);
|
package/lib/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oDAAyB;AACzB,6CAAoC;AAEpC,qCAAyB;AAUzB,IAAM,UAAU,GAAG,UAAC,QAAgB;IAClC,IAAI,CAAC;QACH,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,iBAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAC7B,CAAC;AAEf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACnC,iBAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACnC,iBAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oDAAyB;AACzB,6CAAoC;AAEpC,qCAAyB;AAUzB,IAAM,UAAU,GAAG,UAAC,QAAgB;IAClC,IAAI,CAAC;QACH,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,iBAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAC7B,CAAC;AAEf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACnC,iBAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACnC,iBAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;IAME,kBAAY,MAA0B;QAF7B,WAAM,GAAG,aAAa,CAAC;QAG9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,yBAAM,GAAN;QAAA,iBAgFC;QA/EC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE;YACvC,YAAY,EAAE,UAAC,UAAU;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC9C,IAAA,mBAAI,EAAC,CAAC,CAAC,CAAC;gBACV,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACxC,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3C,gBAAgB,EAAE,UAAC,IAAI;gBACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE;YACvC,YAAY,EAAE,UAAC,IAAI;gBACjB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC/B,iBAAiB,EAAE,UAAC,QAAQ;gBAC1B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACtB,QAAQ,EAAE,UAAC,MAAM;gBACf,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC/B,iBAAiB,EAAE,UAAC,eAAe;gBACjC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;YACnD,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YACzB,WAAW,EAAE,UAAC,SAAS;gBACrB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;QAEH,UAAU,CAAC;YACT,IAAI,CAAC,KAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,IAAI,KAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YAED,KAAI,CAAC,MAAM,CAAC,OAAO,CACjB,KAAI,EACJ,KAAI,CAAC,MAAM,EACX,CAAC,EACD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACrC;gBACE,gBAAgB,EAAE,UAAC,SAAS;oBAC1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;gBACxD,CAAC;gBAED,iBAAiB,EAAE,UAAC,MAAM;oBACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;gBAClD,CAAC;aACF,CACF,CAAC;QACJ,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,4BAAS,GAAT;QACE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAED,yBAAM,GAAN,UAAO,IAAkB,EAAE,MAAe;QACxC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,4BAAS,GAAT,UAAU,KAAoB;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,0BAAO,GAAP,UAAQ,KAAoB,EAAE,KAAoB;QAAlD,iBAwCC;QAvCC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,UAAU,CAAC;gBACT,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAI,CAAC,MAAM,EAAE;oBACrC,UAAU,EAAE,UAAC,QAAQ;wBACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,QAAQ,EAAE,CAAC;4BAChC,OAAO;wBACT,CAAC;wBAED,IAAM,SAAS,GACb,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;wBAE5D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;4BAClB,IAAI,KAAI,CAAC,OAAO,EAAE,CAAC;gCACjB,OAAO,CAAC,GAAG,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;4BAC5B,CAAC;4BAED,KAAI,CAAC,MAAM,CAAC,SAAS,CACnB,KAAI,EACJ,KAAI,CAAC,MAAM,EACX,SAAS,EACT,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACrC,IAAI,EACJ;gCACE,gBAAgB,EAAE,UAAC,SAAS;oCAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;gCACzD,CAAC;gCAED,iBAAiB,EAAE,UAAC,MAAM;oCACxB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gCACnD,CAAC;6BACF,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;iBACF,CAAC,CAAC;YACL,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,2BAAQ,GAAR,UAAS,KAAoB;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,2BAAQ,GAAR,UAAS,KAAoB;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,yBAAM,GAAN,UAAO,IAAkB,EAAE,IAAkB;QAC3C,oBAAoB;QACpB,oBAAoB;QAEpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,wBAAK,GAAL,UAAM,GAAgB;QACpB,kBAAkB;QAElB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;IACH,eAAC;AAAD,CAAC,AAxKD,IAwKC;AAED,IAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAC7B,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,QAAQ,CAChB,CAAC;AAEF,IAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAC7B,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,QAAQ,CAChB,CAAC;AAEF,IAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,IAAI,cAAc,EAAE,CAAC;IACnB,MAAM,CAAC,WAAW,CAChB;QACE,YAAY,EAAE,UAAC,UAAoC;YACjD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;KACF,EACD,UAAC,WAAW;QACV,OAAA,WAAW;aACR,MAAM,CAAC,UAAC,UAAU,IAAK,OAAA,UAAU,CAAC,WAAW,KAAK,QAAQ,EAAnC,CAAmC,CAAC;aAC3D,GAAG,CAAC,UAAC,UAAU,IAAK,OAAA,UAAU,CAAC,MAAM,EAAjB,CAAiB,CAAC;IAFzC,CAEyC,CAC5C,CAAC;AACJ,CAAC;AAED,IAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;IAC9C,OAAO,YAAC,KAAK,EAAE,OAAO;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,IAAA,mBAAI,EAAC,CAAC,CAAC,CAAC;AACV,CAAC"}
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommissionRate, InstrumentData, MarginRate, OffsetType, OrderData, OrderFlag, PositionData, PositionDetail, ProductType, SideType, TickData, TradeData, TradingAccount } from "./typedef.js";
|
|
1
|
+
import { BarData, CommissionRate, InstrumentData, MarginRate, OffsetType, OrderData, OrderFlag, PositionData, PositionDetail, ProductType, SideType, TapeData, TickData, TradeData, TradingAccount } from "./typedef.js";
|
|
2
2
|
export type RiskType = "place-order-risk" | "cancel-order-risk";
|
|
3
3
|
export interface IPlaceOrderRiskManager {
|
|
4
4
|
onPlaceOrder: (symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag) => boolean | string;
|
|
@@ -20,7 +20,6 @@ export interface ILifecycleListener extends IErrorReceiver {
|
|
|
20
20
|
export interface IOrderReceiver {
|
|
21
21
|
onEntrust: (order: OrderData) => void;
|
|
22
22
|
onTrade: (order: OrderData, trade: TradeData) => void;
|
|
23
|
-
onFinish: (order: OrderData) => void;
|
|
24
23
|
onCancel: (order: OrderData) => void;
|
|
25
24
|
onReject: (order: OrderData) => void;
|
|
26
25
|
}
|
|
@@ -28,7 +27,7 @@ export interface IOrdersReceiver {
|
|
|
28
27
|
onOrders: (orders: OrderData[]) => void;
|
|
29
28
|
}
|
|
30
29
|
export interface ITickReceiver {
|
|
31
|
-
onTick: (tick: TickData) => void;
|
|
30
|
+
onTick: (tick: TickData, tape: TapeData) => void;
|
|
32
31
|
}
|
|
33
32
|
export interface ITickSubscriber {
|
|
34
33
|
subscribe: (symbols: string[], receiver: ITickReceiver) => void;
|
|
@@ -36,9 +35,18 @@ export interface ITickSubscriber {
|
|
|
36
35
|
export interface ITickUnsubscriber {
|
|
37
36
|
unsubscribe: (symbols: string[], receiver: ITickReceiver) => void;
|
|
38
37
|
}
|
|
38
|
+
export interface IBarReceiver {
|
|
39
|
+
onBar: (bar: BarData) => void;
|
|
40
|
+
}
|
|
41
|
+
export interface IBarSubscriber {
|
|
42
|
+
subscribeBar: (symbols: string[], receiver: IBarReceiver) => void;
|
|
43
|
+
}
|
|
44
|
+
export interface IBarUnsubscriber {
|
|
45
|
+
unsubscribeBar: (symbols: string[], receiver: IBarReceiver) => void;
|
|
46
|
+
}
|
|
39
47
|
export interface IStrategy extends IRiskManagerReceiver, IOrderReceiver {
|
|
40
|
-
onInit: (
|
|
41
|
-
onDestroy: (
|
|
48
|
+
onInit: () => void;
|
|
49
|
+
onDestroy: () => void;
|
|
42
50
|
}
|
|
43
51
|
export interface ICommissionRateReceiver {
|
|
44
52
|
onCommissionRate: (rate: CommissionRate | undefined) => void;
|
|
@@ -106,11 +114,15 @@ export interface ITraderProvider extends IProvider, IOrderEmitter, IQueryApi {
|
|
|
106
114
|
placeOrder: (symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver) => void;
|
|
107
115
|
cancelOrder: (order: OrderData, receiver: ICancelOrderResultReceiver) => void;
|
|
108
116
|
}
|
|
109
|
-
export interface IRuntimeEngine extends IQueryApi, ITickSubscriber, ITickUnsubscriber {
|
|
117
|
+
export interface IRuntimeEngine extends IQueryApi, ITickSubscriber, ITickUnsubscriber, IBarSubscriber, IBarUnsubscriber {
|
|
110
118
|
addStrategy: (strategy: IStrategy) => void;
|
|
111
119
|
removeStrategy: (strategy: IStrategy) => void;
|
|
112
120
|
addPlaceOrderRiskManager: (riskMgr: IPlaceOrderRiskManager) => void;
|
|
113
121
|
addCancelOrderRiskManager: (riskMgr: ICancelOrderRiskManager) => void;
|
|
114
122
|
placeOrder: (strategy: IStrategy, symbol: string, offset: OffsetType, side: SideType, volume: number, price: number, flag: OrderFlag, receiver: IPlaceOrderResultReceiver) => void;
|
|
115
123
|
cancelOrder: (strategy: IStrategy, order: OrderData, receiver: ICancelOrderResultReceiver) => void;
|
|
124
|
+
buyOpen: (strategy: IStrategy, symbol: string, volume: number, price: number, receiver: IPlaceOrderResultReceiver) => void;
|
|
125
|
+
buyClose: (strategy: IStrategy, symbol: string, volume: number, price: number, isToday: boolean, receiver: IPlaceOrderResultReceiver) => void;
|
|
126
|
+
sellOpen: (strategy: IStrategy, symbol: string, volume: number, price: number, receiver: IPlaceOrderResultReceiver) => void;
|
|
127
|
+
sellClose: (strategy: IStrategy, symbol: string, volume: number, price: number, isToday: boolean, receiver: IPlaceOrderResultReceiver) => void;
|
|
116
128
|
}
|
package/lib/market.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ export declare class Market extends CTPProvider implements IMarketProvider {
|
|
|
5
5
|
private marketApi?;
|
|
6
6
|
private recorder?;
|
|
7
7
|
private recorderSymbols?;
|
|
8
|
+
private tradingDay;
|
|
8
9
|
private readonly recordings;
|
|
9
10
|
private readonly symbols;
|
|
11
|
+
private readonly lastTicks;
|
|
10
12
|
private readonly subscribers;
|
|
11
13
|
constructor(flowMdPath: string, frontMdAddrs: string | string[], userInfo: CTPUserInfo);
|
|
12
14
|
hasRecorder(): boolean;
|
package/lib/market.js
CHANGED
|
@@ -40,14 +40,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
exports.createMarket = exports.Market = void 0;
|
|
41
41
|
var napi_ctp_1 = __importDefault(require("napi-ctp"));
|
|
42
42
|
var provider_js_1 = require("./provider.js");
|
|
43
|
+
var tape_js_1 = require("./tape.js");
|
|
44
|
+
var utils_js_1 = require("./utils.js");
|
|
43
45
|
var isValidPrice = function (x) { return x !== Number.MAX_VALUE && x !== 0; };
|
|
44
46
|
var isValidVolume = function (x) { return x !== Number.MAX_VALUE && x !== 0; };
|
|
45
47
|
var Market = /** @class */ (function (_super) {
|
|
46
48
|
__extends(Market, _super);
|
|
47
49
|
function Market(flowMdPath, frontMdAddrs, userInfo) {
|
|
48
50
|
var _this = _super.call(this, flowMdPath, frontMdAddrs, userInfo) || this;
|
|
51
|
+
_this.tradingDay = 0;
|
|
49
52
|
_this.recordings = new Set();
|
|
50
53
|
_this.symbols = new Map();
|
|
54
|
+
_this.lastTicks = new Map();
|
|
51
55
|
_this.subscribers = new Map();
|
|
52
56
|
return _this;
|
|
53
57
|
}
|
|
@@ -72,6 +76,11 @@ var Market = /** @class */ (function (_super) {
|
|
|
72
76
|
if (_this._isErrorResp(lifecycle, options, "login-error")) {
|
|
73
77
|
return;
|
|
74
78
|
}
|
|
79
|
+
var tradingDay = parseInt(_this.marketApi.getTradingDay());
|
|
80
|
+
if (_this.tradingDay !== tradingDay) {
|
|
81
|
+
_this.lastTicks.clear();
|
|
82
|
+
_this.tradingDay = tradingDay;
|
|
83
|
+
}
|
|
75
84
|
var instrumentIds = new Set(__spreadArray(__spreadArray([], Array.from(_this.recordings), true), Object.keys(_this.subscribers), true));
|
|
76
85
|
if (instrumentIds.size > 0) {
|
|
77
86
|
_this._withRetry(function () {
|
|
@@ -92,10 +101,6 @@ var Market = /** @class */ (function (_super) {
|
|
|
92
101
|
if (!symbol) {
|
|
93
102
|
return;
|
|
94
103
|
}
|
|
95
|
-
var receivers = _this.subscribers.get(instrumentId);
|
|
96
|
-
if (!receivers || receivers.length === 0) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
104
|
var orderBook = {
|
|
100
105
|
asks: { price: [], volume: [] },
|
|
101
106
|
bids: { price: [], volume: [] },
|
|
@@ -175,7 +180,13 @@ var Market = /** @class */ (function (_super) {
|
|
|
175
180
|
}),
|
|
176
181
|
orderBook: Object.freeze(orderBook),
|
|
177
182
|
});
|
|
178
|
-
receivers
|
|
183
|
+
var receivers = _this.subscribers.get(instrumentId);
|
|
184
|
+
if (receivers && receivers.length > 0) {
|
|
185
|
+
var lastTick = _this.lastTicks.get(instrumentId);
|
|
186
|
+
var tape_1 = (0, tape_js_1.calcTapeData)(tick, lastTick);
|
|
187
|
+
receivers.forEach(function (receiver) { return receiver.onTick(tick, tape_1); });
|
|
188
|
+
}
|
|
189
|
+
_this.lastTicks.set(instrumentId, tick);
|
|
179
190
|
});
|
|
180
191
|
return true;
|
|
181
192
|
};
|
|
@@ -195,7 +206,7 @@ var Market = /** @class */ (function (_super) {
|
|
|
195
206
|
var symbols = this.recorderSymbols(instrument);
|
|
196
207
|
var instrumentIds = new Set();
|
|
197
208
|
symbols.forEach(function (symbol) {
|
|
198
|
-
var instrumentId =
|
|
209
|
+
var instrumentId = (0, utils_js_1.parseSymbol)(symbol)[0];
|
|
199
210
|
if (_this.recordings.has(instrumentId)) {
|
|
200
211
|
return;
|
|
201
212
|
}
|
|
@@ -230,7 +241,7 @@ var Market = /** @class */ (function (_super) {
|
|
|
230
241
|
var _this = this;
|
|
231
242
|
var instrumentIds = new Set();
|
|
232
243
|
symbols.forEach(function (symbol) {
|
|
233
|
-
var instrumentId =
|
|
244
|
+
var instrumentId = (0, utils_js_1.parseSymbol)(symbol)[0];
|
|
234
245
|
var receivers = _this.subscribers.get(instrumentId);
|
|
235
246
|
if (receivers) {
|
|
236
247
|
if (!receivers.includes(receiver)) {
|
|
@@ -253,7 +264,7 @@ var Market = /** @class */ (function (_super) {
|
|
|
253
264
|
var _this = this;
|
|
254
265
|
var instrumentIds = new Set();
|
|
255
266
|
symbols.forEach(function (symbol) {
|
|
256
|
-
var instrumentId =
|
|
267
|
+
var instrumentId = (0, utils_js_1.parseSymbol)(symbol)[0];
|
|
257
268
|
var receivers = _this.subscribers.get(instrumentId);
|
|
258
269
|
if (!receivers) {
|
|
259
270
|
return;
|