hft-js 0.2.0 → 0.4.0
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 +2 -2
- package/lib/bar.js +43 -67
- package/lib/bar.js.map +1 -1
- package/lib/broker.d.ts +5 -4
- package/lib/broker.js +92 -106
- package/lib/broker.js.map +1 -1
- package/lib/index.js +9 -25
- package/lib/index.js.map +1 -1
- package/lib/index.test.d.ts +1 -1
- package/lib/index.test.js +82 -111
- package/lib/index.test.js.map +1 -1
- package/lib/interfaces.d.ts +5 -5
- package/lib/interfaces.js +2 -3
- package/lib/interfaces.js.map +1 -1
- package/lib/market.d.ts +4 -4
- package/lib/market.js +135 -163
- package/lib/market.js.map +1 -1
- package/lib/provider.d.ts +3 -3
- package/lib/provider.js +34 -86
- package/lib/provider.js.map +1 -1
- package/lib/tape.d.ts +1 -1
- package/lib/tape.js +19 -24
- package/lib/tape.js.map +1 -1
- package/lib/trader.d.ts +5 -4
- package/lib/trader.js +501 -510
- package/lib/trader.js.map +1 -1
- package/lib/typedef.d.ts +5 -1
- package/lib/typedef.js +2 -3
- package/lib/typedef.js.map +1 -1
- package/lib/utils.d.ts +2 -2
- package/lib/utils.js +28 -78
- package/lib/utils.js.map +1 -1
- package/package.json +9 -8
- package/src/bar.ts +7 -13
- package/src/broker.ts +11 -21
- package/src/index.test.ts +29 -21
- package/src/index.ts +1 -1
- package/src/interfaces.ts +10 -6
- package/src/market.ts +25 -16
- package/src/provider.ts +8 -8
- package/src/tape.ts +2 -2
- package/src/trader.ts +127 -60
- package/src/typedef.ts +6 -2
- package/src/utils.ts +25 -35
package/lib/provider.js
CHANGED
|
@@ -1,108 +1,56 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/*
|
|
3
2
|
* provider.ts
|
|
4
3
|
*
|
|
5
|
-
* Copyright (c) 2025 Xiongfei Shi
|
|
4
|
+
* Copyright (c) 2025-2026 Xiongfei Shi
|
|
6
5
|
*
|
|
7
6
|
* Author: Xiongfei Shi <xiongfei.shi(a)icloud.com>
|
|
8
7
|
* License: Apache-2.0
|
|
9
8
|
*
|
|
10
9
|
* https://github.com/shixiongfei/hft.js
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
23
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
-
function step(op) {
|
|
26
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
-
switch (op[0]) {
|
|
31
|
-
case 0: case 1: t = op; break;
|
|
32
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
-
default:
|
|
36
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
-
if (t[2]) _.ops.pop();
|
|
41
|
-
_.trys.pop(); continue;
|
|
42
|
-
}
|
|
43
|
-
op = body.call(thisArg, _);
|
|
44
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
49
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
50
|
-
};
|
|
51
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
-
exports.CTPProvider = void 0;
|
|
53
|
-
var node_fs_1 = __importDefault(require("node:fs"));
|
|
54
|
-
var napi_ctp_1 = __importDefault(require("napi-ctp"));
|
|
55
|
-
var CTPProvider = /** @class */ (function () {
|
|
56
|
-
function CTPProvider(flowPath, frontAddrs) {
|
|
11
|
+
import fs from "node:fs";
|
|
12
|
+
import ctp, {} from "napi-ctp";
|
|
13
|
+
export class CTPProvider {
|
|
14
|
+
flowPath;
|
|
15
|
+
frontAddrs;
|
|
16
|
+
constructor(flowPath, frontAddrs) {
|
|
57
17
|
this.flowPath = flowPath;
|
|
58
18
|
this.frontAddrs = frontAddrs;
|
|
59
19
|
try {
|
|
60
|
-
|
|
20
|
+
fs.accessSync(this.flowPath);
|
|
61
21
|
}
|
|
62
|
-
catch
|
|
63
|
-
|
|
22
|
+
catch {
|
|
23
|
+
fs.mkdirSync(this.flowPath, { recursive: true });
|
|
64
24
|
}
|
|
65
25
|
}
|
|
66
|
-
|
|
67
|
-
return new Promise(
|
|
26
|
+
_sleep(ms) {
|
|
27
|
+
return new Promise((resolve) => {
|
|
68
28
|
setTimeout(resolve, ms);
|
|
69
29
|
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
_a.sent();
|
|
86
|
-
return [3 /*break*/, 3];
|
|
87
|
-
case 2: return [2 /*return*/, retval];
|
|
88
|
-
case 3: return [3 /*break*/, 0];
|
|
89
|
-
case 4: return [2 /*return*/];
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
CTPProvider.prototype._isErrorResp = function (lifecycle, options, error) {
|
|
30
|
+
}
|
|
31
|
+
async _withRetry(request, ms = 100) {
|
|
32
|
+
for (;;) {
|
|
33
|
+
const retval = request();
|
|
34
|
+
if (retval === 0) {
|
|
35
|
+
return ctp.getLastRequestId();
|
|
36
|
+
}
|
|
37
|
+
if (-2 === retval || -3 === retval) {
|
|
38
|
+
await this._sleep(ms);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
return retval;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
_isErrorResp(errorReceiver, options, error) {
|
|
95
45
|
if (!options.rspInfo) {
|
|
96
46
|
return false;
|
|
97
47
|
}
|
|
98
|
-
|
|
48
|
+
errorReceiver.onError(error, `${options.rspInfo.ErrorID}:${options.rspInfo.ErrorMsg}`);
|
|
99
49
|
return true;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
}());
|
|
107
|
-
exports.CTPProvider = CTPProvider;
|
|
50
|
+
}
|
|
51
|
+
_parseTime(time) {
|
|
52
|
+
const [hh = 0, mm = 0, ss = 0] = time.split(":").map((x) => parseInt(x));
|
|
53
|
+
return hh * 10000 + mm * 100 + ss;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
108
56
|
//# sourceMappingURL=provider.js.map
|
package/lib/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,EAAE,EAAwB,MAAM,UAAU,CAAC;AAGrD,MAAM,OAAO,WAAW;IACH,QAAQ,CAAS;IACjB,UAAU,CAAoB;IAEjD,YAAY,QAAgB,EAAE,UAA6B;QACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,EAAU;QACvB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,OAAiC,EAAE,EAAE,GAAG,GAAG;QACpE,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;YAEzB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,OAAO,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAES,YAAY,CACpB,aAA6B,EAC7B,OAAwB,EACxB,KAAgB;QAEhB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,aAAa,CAAC,OAAO,CACnB,KAAK,EACL,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CACzD,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAES,UAAU,CAAC,IAAY;QAC/B,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;IACpC,CAAC;CACF"}
|
package/lib/tape.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { TapeData, TickData } from "./typedef.js";
|
|
1
|
+
import type { TapeData, TickData } from "./typedef.js";
|
|
2
2
|
export declare const calcTapeData: (tick: TickData, preTick?: TickData) => TapeData;
|
package/lib/tape.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/*
|
|
3
2
|
* tape.ts
|
|
4
3
|
*
|
|
5
|
-
* Copyright (c) 2025 Xiongfei Shi
|
|
4
|
+
* Copyright (c) 2025-2026 Xiongfei Shi
|
|
6
5
|
*
|
|
7
6
|
* Author: Xiongfei Shi <xiongfei.shi(a)icloud.com>
|
|
8
7
|
* License: Apache-2.0
|
|
9
8
|
*
|
|
10
9
|
* https://github.com/shixiongfei/hft.js
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
exports.calcTapeData = void 0;
|
|
14
|
-
var calcTapeType = function (volumeDelta, interestDelta) {
|
|
11
|
+
const calcTapeType = (volumeDelta, interestDelta) => {
|
|
15
12
|
if (interestDelta > 0) {
|
|
16
13
|
return volumeDelta === interestDelta ? "dual-open" : "open";
|
|
17
14
|
}
|
|
@@ -23,27 +20,26 @@ var calcTapeType = function (volumeDelta, interestDelta) {
|
|
|
23
20
|
}
|
|
24
21
|
return "no-deal";
|
|
25
22
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var lastPrice = tick.lastPrice;
|
|
23
|
+
const calcTapeDirection = (tick, preTick) => {
|
|
24
|
+
const lastPrice = tick.lastPrice;
|
|
29
25
|
if (preTick) {
|
|
30
|
-
|
|
26
|
+
const preAskPrice1 = preTick.orderBook.asks.price[0] ?? Number.MAX_VALUE;
|
|
31
27
|
if (lastPrice >= preAskPrice1) {
|
|
32
28
|
return "up";
|
|
33
29
|
}
|
|
34
|
-
|
|
30
|
+
const preBidPrice1 = preTick.orderBook.bids.price[0] ?? Number.MIN_VALUE;
|
|
35
31
|
if (lastPrice <= preBidPrice1) {
|
|
36
32
|
return "down";
|
|
37
33
|
}
|
|
38
|
-
|
|
34
|
+
const askPrice1 = tick.orderBook.asks.price[0] ?? Number.MAX_VALUE;
|
|
39
35
|
if (lastPrice >= askPrice1) {
|
|
40
36
|
return "up";
|
|
41
37
|
}
|
|
42
|
-
|
|
38
|
+
const bidPrice1 = tick.orderBook.bids.price[0] ?? Number.MIN_VALUE;
|
|
43
39
|
if (lastPrice <= bidPrice1) {
|
|
44
40
|
return "down";
|
|
45
41
|
}
|
|
46
|
-
|
|
42
|
+
const prePrice = preTick.lastPrice;
|
|
47
43
|
if (lastPrice > prePrice) {
|
|
48
44
|
return "up";
|
|
49
45
|
}
|
|
@@ -59,11 +55,11 @@ var calcTapeDirection = function (tick, preTick) {
|
|
|
59
55
|
return "none";
|
|
60
56
|
}
|
|
61
57
|
else {
|
|
62
|
-
|
|
58
|
+
const askPrice1 = tick.orderBook.asks.price[0] ?? Number.MAX_VALUE;
|
|
63
59
|
if (lastPrice >= askPrice1) {
|
|
64
60
|
return "up";
|
|
65
61
|
}
|
|
66
|
-
|
|
62
|
+
const bidPrice1 = tick.orderBook.bids.price[0] ?? Number.MIN_VALUE;
|
|
67
63
|
if (lastPrice <= bidPrice1) {
|
|
68
64
|
return "down";
|
|
69
65
|
}
|
|
@@ -76,7 +72,7 @@ var calcTapeDirection = function (tick, preTick) {
|
|
|
76
72
|
return "none";
|
|
77
73
|
}
|
|
78
74
|
};
|
|
79
|
-
|
|
75
|
+
const calcTapeStatus = (tapeType, tapeDirection) => {
|
|
80
76
|
if (tapeType === "open" && tapeDirection === "up") {
|
|
81
77
|
return "open-long";
|
|
82
78
|
}
|
|
@@ -103,15 +99,15 @@ var calcTapeStatus = function (tapeType, tapeDirection) {
|
|
|
103
99
|
}
|
|
104
100
|
return "invalid";
|
|
105
101
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
export const calcTapeData = (tick, preTick) => {
|
|
103
|
+
const volumeDelta = preTick ? tick.volume - preTick.volume : tick.volume;
|
|
104
|
+
const amountDelta = preTick ? tick.amount - preTick.amount : tick.amount;
|
|
105
|
+
const interestDelta = preTick
|
|
110
106
|
? tick.openInterest - preTick.openInterest
|
|
111
107
|
: tick.openInterest - tick.preOpenInterest;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
const tapeType = calcTapeType(volumeDelta, interestDelta);
|
|
109
|
+
const tapeDirection = calcTapeDirection(tick, preTick);
|
|
110
|
+
const tapeStatus = calcTapeStatus(tapeType, tapeDirection);
|
|
115
111
|
return Object.freeze({
|
|
116
112
|
type: tapeType,
|
|
117
113
|
direction: tapeDirection,
|
|
@@ -121,5 +117,4 @@ var calcTapeData = function (tick, preTick) {
|
|
|
121
117
|
amountDelta: amountDelta,
|
|
122
118
|
});
|
|
123
119
|
};
|
|
124
|
-
exports.calcTapeData = calcTapeData;
|
|
125
120
|
//# sourceMappingURL=tape.js.map
|
package/lib/tape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tape.js","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tape.js","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"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"}
|
package/lib/trader.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CTPProvider } from "./provider.js";
|
|
2
|
-
import { OffsetType, OrderData, OrderFlag, ProductType, SideType, TickData } from "./typedef.js";
|
|
3
|
-
import { ICancelOrderResultReceiver, ICommissionRateReceiver, IInstrumentReceiver, IInstrumentsReceiver, ILifecycleListener, IMarginRateReceiver, IOrderReceiver, IOrdersReceiver, IPlaceOrderResultReceiver, IPositionDetailsReceiver, IPositionReceiver, IPositionsReceiver, ITraderProvider, ITradingAccountsReceiver } from "./interfaces.js";
|
|
2
|
+
import type { OffsetType, OrderData, OrderFlag, ProductType, SideType, TickData } from "./typedef.js";
|
|
3
|
+
import type { ICancelOrderResultReceiver, ICommissionRateReceiver, IErrorReceiver, IInstrumentReceiver, IInstrumentsReceiver, ILifecycleListener, IMarginRateReceiver, IOrderReceiver, IOrdersReceiver, IPlaceOrderResultReceiver, IPositionDetailsReceiver, IPositionReceiver, IPositionsReceiver, ITraderProvider, ITradingAccountsReceiver } from "./interfaces.js";
|
|
4
4
|
export type CTPUserInfo = {
|
|
5
5
|
BrokerID: string;
|
|
6
6
|
UserID: string;
|
|
@@ -43,8 +43,8 @@ export declare class Trader extends CTPProvider implements ITraderProvider {
|
|
|
43
43
|
private readonly accountsQueue;
|
|
44
44
|
private readonly positionDetailsQueue;
|
|
45
45
|
constructor(flowTdPath: string, frontTdAddrs: string | string[], userInfo: CTPUserInfo, options?: TraderOptions);
|
|
46
|
-
open(lifecycle: ILifecycleListener): boolean;
|
|
47
|
-
close(lifecycle: ILifecycleListener): void;
|
|
46
|
+
open(lifecycle: ILifecycleListener, errorReceiver: IErrorReceiver): boolean;
|
|
47
|
+
close(lifecycle: ILifecycleListener, _errorReceiver: IErrorReceiver): void;
|
|
48
48
|
addOrderReceiver(receiver: IOrderReceiver): void;
|
|
49
49
|
removeOrderReceiver(receiver: IOrderReceiver): void;
|
|
50
50
|
getTradingDay(): number;
|
|
@@ -88,6 +88,7 @@ export declare class Trader extends CTPProvider implements ITraderProvider {
|
|
|
88
88
|
private _calcOffsetType;
|
|
89
89
|
private _toOffsetFlag;
|
|
90
90
|
private _calcProductType;
|
|
91
|
+
private _calcOptionsType;
|
|
91
92
|
private _ensurePositionInfo;
|
|
92
93
|
private _ensureOrderStatistic;
|
|
93
94
|
private _calcPosition;
|