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 CHANGED
@@ -4,6 +4,7 @@ export type BarInfo = Writeable<BarData>;
4
4
  export declare class BarGenerator implements ITickReceiver {
5
5
  private readonly receivers;
6
6
  private readonly symbol;
7
+ private shouldUpdate;
7
8
  private bar?;
8
9
  constructor(symbol: string);
9
10
  get isWorking(): boolean;
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":"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"}
1
+ {"version":3,"file":"bar.js","sourceRoot":"","sources":["../src/bar.ts"],"names":[],"mappings":"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"}
@@ -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 IQueryApi {
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, IQueryApi {
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 IQueryApi, ITickSubscriber, ITickUnsubscriber, IBarSubscriber, IBarUnsubscriber {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hft-js",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "High-Frequency Trading in Node.js",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
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 IQueryApi {
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 extends IProvider, IOrderEmitter, IQueryApi {
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 IQueryApi,
230
+ extends IQueryProvider,
227
231
  ITickSubscriber,
228
232
  ITickUnsubscriber,
229
233
  IBarSubscriber,