@tigeropenapi/tigeropen 0.3.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/dist/cjs/client/http-client.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/model/enums.js +89 -7
- package/dist/cjs/model/order-status.js +46 -0
- package/dist/cjs/model/quote-requests.js +11 -0
- package/dist/cjs/model/trade-requests.js +13 -0
- package/dist/cjs/push/pb/OrderStatusData.js +24 -0
- package/dist/cjs/push/proto-message.js +6 -0
- package/dist/cjs/push/push-client.js +71 -1
- package/dist/cjs/push/push-message.js +4 -0
- package/dist/cjs/quote/quote-client.js +321 -9
- package/dist/cjs/trade/trade-client.js +166 -25
- package/dist/esm/client/http-client.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/model/enums.js +87 -6
- package/dist/esm/model/order-status.js +43 -0
- package/dist/esm/model/quote-requests.js +10 -0
- package/dist/esm/model/trade-requests.js +12 -0
- package/dist/esm/push/pb/OrderStatusData.js +24 -0
- package/dist/esm/push/proto-message.js +6 -0
- package/dist/esm/push/push-client.js +71 -1
- package/dist/esm/push/push-message.js +4 -0
- package/dist/esm/quote/quote-client.js +321 -9
- package/dist/esm/trade/trade-client.js +166 -25
- package/dist/types/index.d.ts +1 -1
- package/dist/types/model/enums.d.ts +60 -6
- package/dist/types/model/order-status.d.ts +14 -0
- package/dist/types/model/quote-requests.d.ts +344 -0
- package/dist/types/model/quote.d.ts +261 -0
- package/dist/types/model/trade-requests.d.ts +195 -0
- package/dist/types/model/trade.d.ts +122 -0
- package/dist/types/push/pb/OrderStatusData.d.ts +4 -0
- package/dist/types/push/push-client.d.ts +31 -0
- package/dist/types/push/push-message.d.ts +4 -0
- package/dist/types/quote/quote-client.d.ts +119 -6
- package/dist/types/trade/trade-client.d.ts +84 -12
- package/package.json +1 -1
package/dist/esm/model/enums.js
CHANGED
|
@@ -48,19 +48,49 @@ export var OrderType;
|
|
|
48
48
|
OrderType["VWAP"] = "VWAP";
|
|
49
49
|
OrderType["OCA"] = "OCA";
|
|
50
50
|
})(OrderType || (OrderType = {}));
|
|
51
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* 订单状态枚举。对齐 Java SDK OrderStatus 定义。
|
|
53
|
+
*
|
|
54
|
+
* 服务端 wire 返回的值同时可能是:
|
|
55
|
+
* - 数字: -2 / -1 / 3 / 4 / 5 / 6 / 7 / 8
|
|
56
|
+
* - 字符串: "Invalid" / "Initial" / "PendingCancel" / "Cancelled" /
|
|
57
|
+
* "Submitted" / "Filled" / "Inactive" / "PendingSubmit"
|
|
58
|
+
*
|
|
59
|
+
* Client 层通过 normalizeOrderStatus() 做数字→字符串归一,不做跨别名合并。
|
|
60
|
+
*/
|
|
52
61
|
export var OrderStatus;
|
|
53
62
|
(function (OrderStatus) {
|
|
54
|
-
OrderStatus["
|
|
63
|
+
OrderStatus["Invalid"] = "Invalid";
|
|
55
64
|
OrderStatus["Initial"] = "Initial";
|
|
65
|
+
OrderStatus["PendingCancel"] = "PendingCancel";
|
|
66
|
+
OrderStatus["Cancelled"] = "Cancelled";
|
|
56
67
|
OrderStatus["Submitted"] = "Submitted";
|
|
57
|
-
OrderStatus["PartiallyFilled"] = "PartiallyFilled";
|
|
58
68
|
OrderStatus["Filled"] = "Filled";
|
|
59
|
-
OrderStatus["Cancelled"] = "Cancelled";
|
|
60
|
-
OrderStatus["PendingCancel"] = "PendingCancel";
|
|
61
69
|
OrderStatus["Inactive"] = "Inactive";
|
|
62
|
-
OrderStatus["
|
|
70
|
+
OrderStatus["PendingSubmit"] = "PendingSubmit";
|
|
63
71
|
})(OrderStatus || (OrderStatus = {}));
|
|
72
|
+
/** 返回订单状态对应的服务端数字码,未知返回 0。 */
|
|
73
|
+
export function orderStatusCode(status) {
|
|
74
|
+
switch (status) {
|
|
75
|
+
case OrderStatus.Invalid:
|
|
76
|
+
return -2;
|
|
77
|
+
case OrderStatus.Initial:
|
|
78
|
+
return -1;
|
|
79
|
+
case OrderStatus.PendingCancel:
|
|
80
|
+
return 3;
|
|
81
|
+
case OrderStatus.Cancelled:
|
|
82
|
+
return 4;
|
|
83
|
+
case OrderStatus.Submitted:
|
|
84
|
+
return 5;
|
|
85
|
+
case OrderStatus.Filled:
|
|
86
|
+
return 6;
|
|
87
|
+
case OrderStatus.Inactive:
|
|
88
|
+
return 7;
|
|
89
|
+
case OrderStatus.PendingSubmit:
|
|
90
|
+
return 8;
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
64
94
|
/** K 线周期枚举 */
|
|
65
95
|
export var BarPeriod;
|
|
66
96
|
(function (BarPeriod) {
|
|
@@ -105,3 +135,54 @@ export var TimeInForce;
|
|
|
105
135
|
TimeInForce["GTC"] = "GTC";
|
|
106
136
|
TimeInForce["OPG"] = "OPG";
|
|
107
137
|
})(TimeInForce || (TimeInForce = {}));
|
|
138
|
+
/** 订单排序字段 */
|
|
139
|
+
export var OrderSortBy;
|
|
140
|
+
(function (OrderSortBy) {
|
|
141
|
+
OrderSortBy["LatestCreated"] = "LATEST_CREATED";
|
|
142
|
+
OrderSortBy["LatestStatusUpdated"] = "LATEST_STATUS_UPDATED";
|
|
143
|
+
})(OrderSortBy || (OrderSortBy = {}));
|
|
144
|
+
/** 账户分部类型 */
|
|
145
|
+
export var SegmentType;
|
|
146
|
+
(function (SegmentType) {
|
|
147
|
+
SegmentType["All"] = "ALL";
|
|
148
|
+
SegmentType["Sec"] = "SEC";
|
|
149
|
+
SegmentType["Fut"] = "FUT";
|
|
150
|
+
SegmentType["Fund"] = "FUND";
|
|
151
|
+
})(SegmentType || (SegmentType = {}));
|
|
152
|
+
/** 公司行动类型 */
|
|
153
|
+
export var CorporateActionType;
|
|
154
|
+
(function (CorporateActionType) {
|
|
155
|
+
CorporateActionType["Split"] = "split";
|
|
156
|
+
CorporateActionType["Dividend"] = "dividend";
|
|
157
|
+
CorporateActionType["Earning"] = "earning";
|
|
158
|
+
})(CorporateActionType || (CorporateActionType = {}));
|
|
159
|
+
/** 行业级别 (1~4 级) */
|
|
160
|
+
export var IndustryLevel;
|
|
161
|
+
(function (IndustryLevel) {
|
|
162
|
+
IndustryLevel["GSector"] = "GSECTOR";
|
|
163
|
+
IndustryLevel["GGroup"] = "GGROUP";
|
|
164
|
+
IndustryLevel["GInd"] = "GIND";
|
|
165
|
+
IndustryLevel["GSubInd"] = "GSUBIND";
|
|
166
|
+
})(IndustryLevel || (IndustryLevel = {}));
|
|
167
|
+
/** 排序方向 */
|
|
168
|
+
export var SortDirection;
|
|
169
|
+
(function (SortDirection) {
|
|
170
|
+
SortDirection["No"] = "SortDir_No";
|
|
171
|
+
SortDirection["Ascend"] = "SortDir_Ascend";
|
|
172
|
+
SortDirection["Descend"] = "SortDir_Descend";
|
|
173
|
+
})(SortDirection || (SortDirection = {}));
|
|
174
|
+
/** 期权分析周期 */
|
|
175
|
+
export var OptionAnalysisPeriod;
|
|
176
|
+
(function (OptionAnalysisPeriod) {
|
|
177
|
+
OptionAnalysisPeriod["ThreeYear"] = "3year";
|
|
178
|
+
OptionAnalysisPeriod["FiftyTwoWeek"] = "52week";
|
|
179
|
+
OptionAnalysisPeriod["TwentySixWeek"] = "26week";
|
|
180
|
+
OptionAnalysisPeriod["ThirteenWeek"] = "13week";
|
|
181
|
+
})(OptionAnalysisPeriod || (OptionAnalysisPeriod = {}));
|
|
182
|
+
/** 财报类型 */
|
|
183
|
+
export var FinancialReportPeriod;
|
|
184
|
+
(function (FinancialReportPeriod) {
|
|
185
|
+
FinancialReportPeriod["Annual"] = "Annual";
|
|
186
|
+
FinancialReportPeriod["Quarterly"] = "Quarterly";
|
|
187
|
+
FinancialReportPeriod["LTM"] = "LTM";
|
|
188
|
+
})(FinancialReportPeriod || (FinancialReportPeriod = {}));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order status normalization.
|
|
3
|
+
*
|
|
4
|
+
* 服务端返回的订单状态有时是整数(-2/-1/3/4/5/6/7/8),有时是字符串
|
|
5
|
+
* ("Invalid"/"Submitted"/...)。本模块把二者统一为 Java SDK OrderStatus 的
|
|
6
|
+
* 字符串值。不做跨别名合并。
|
|
7
|
+
*
|
|
8
|
+
* 对齐 Java SDK OrderStatus.java。
|
|
9
|
+
*/
|
|
10
|
+
import { OrderStatus } from './enums';
|
|
11
|
+
/** 把数字状态码映射到字符串,未识别返回空串。 */
|
|
12
|
+
function statusIntToString(n) {
|
|
13
|
+
switch (n) {
|
|
14
|
+
case -2:
|
|
15
|
+
return OrderStatus.Invalid;
|
|
16
|
+
case -1:
|
|
17
|
+
return OrderStatus.Initial;
|
|
18
|
+
case 3:
|
|
19
|
+
return OrderStatus.PendingCancel;
|
|
20
|
+
case 4:
|
|
21
|
+
return OrderStatus.Cancelled;
|
|
22
|
+
case 5:
|
|
23
|
+
return OrderStatus.Submitted;
|
|
24
|
+
case 6:
|
|
25
|
+
return OrderStatus.Filled;
|
|
26
|
+
case 7:
|
|
27
|
+
return OrderStatus.Inactive;
|
|
28
|
+
case 8:
|
|
29
|
+
return OrderStatus.PendingSubmit;
|
|
30
|
+
}
|
|
31
|
+
return '';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 把服务端可能返回的 string/number 订单状态归一为字符串。
|
|
35
|
+
* 字符串原样透传;数字按映射表转换;其他输入返回空串。
|
|
36
|
+
*/
|
|
37
|
+
export function normalizeOrderStatus(raw) {
|
|
38
|
+
if (typeof raw === 'string')
|
|
39
|
+
return raw;
|
|
40
|
+
if (typeof raw === 'number')
|
|
41
|
+
return statusIntToString(raw);
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quote request interfaces (v0.4.0).
|
|
3
|
+
*
|
|
4
|
+
* 所有字段可选(用户调用时传一个空对象即可);字段名用 camelCase,
|
|
5
|
+
* client 层通过 keysToSnakeCase 转成服务端 wire 真名的 snake_case。
|
|
6
|
+
* **字段名设计规则:camelCase → snake_case 后必须等于服务端 wire 真名。**
|
|
7
|
+
*
|
|
8
|
+
* 参考 Go SDK model/quote_requests.go。
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trade request interfaces (v0.4.0).
|
|
3
|
+
*
|
|
4
|
+
* 所有字段可选(用户调用时传一个空对象即可);字段名用 camelCase,
|
|
5
|
+
* client 层通过 keysToSnakeCase 转成服务端 wire 真名的 snake_case。
|
|
6
|
+
* **字段名设计规则:camelCase → snake_case 后必须等于服务端 wire 真名。**
|
|
7
|
+
* 比如 Trade 用 `startDate`/`endDate`(wire `start_date`/`end_date`),
|
|
8
|
+
* 不用 `startTime`/`endTime`(会被转成 `start_time`/`end_time`,与 wire 不符)。
|
|
9
|
+
*
|
|
10
|
+
* 参考 Go SDK model/trade_requests.go。
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
@@ -51,6 +51,8 @@ function createBaseOrderStatusData() {
|
|
|
51
51
|
gst: 0,
|
|
52
52
|
attrList: [],
|
|
53
53
|
timeInForce: "",
|
|
54
|
+
updateTime: 0,
|
|
55
|
+
latestTime: 0,
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
58
|
export const OrderStatusData = {
|
|
@@ -184,6 +186,12 @@ export const OrderStatusData = {
|
|
|
184
186
|
if (message.timeInForce !== "") {
|
|
185
187
|
writer.uint32(346).string(message.timeInForce);
|
|
186
188
|
}
|
|
189
|
+
if (message.updateTime !== 0) {
|
|
190
|
+
writer.uint32(352).uint64(message.updateTime);
|
|
191
|
+
}
|
|
192
|
+
if (message.latestTime !== 0) {
|
|
193
|
+
writer.uint32(360).uint64(message.latestTime);
|
|
194
|
+
}
|
|
187
195
|
return writer;
|
|
188
196
|
},
|
|
189
197
|
decode(input, length) {
|
|
@@ -494,6 +502,20 @@ export const OrderStatusData = {
|
|
|
494
502
|
message.timeInForce = reader.string();
|
|
495
503
|
continue;
|
|
496
504
|
}
|
|
505
|
+
case 44: {
|
|
506
|
+
if (tag !== 352) {
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
message.updateTime = longToNumber(reader.uint64());
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
case 45: {
|
|
513
|
+
if (tag !== 360) {
|
|
514
|
+
break;
|
|
515
|
+
}
|
|
516
|
+
message.latestTime = longToNumber(reader.uint64());
|
|
517
|
+
continue;
|
|
518
|
+
}
|
|
497
519
|
}
|
|
498
520
|
if ((tag & 7) === 4 || tag === 0) {
|
|
499
521
|
break;
|
|
@@ -550,6 +572,8 @@ export const OrderStatusData = {
|
|
|
550
572
|
message.gst = object.gst ?? 0;
|
|
551
573
|
message.attrList = object.attrList?.map((e) => e) || [];
|
|
552
574
|
message.timeInForce = object.timeInForce ?? "";
|
|
575
|
+
message.updateTime = object.updateTime ?? 0;
|
|
576
|
+
message.latestTime = object.latestTime ?? 0;
|
|
553
577
|
return message;
|
|
554
578
|
},
|
|
555
579
|
};
|
|
@@ -115,6 +115,12 @@ export function subjectToDataType(subject) {
|
|
|
115
115
|
return SocketCommon_DataType.TradeTick;
|
|
116
116
|
case SubjectType.QuoteBBO:
|
|
117
117
|
return SocketCommon_DataType.Quote;
|
|
118
|
+
case SubjectType.Cc:
|
|
119
|
+
// 加密货币推送
|
|
120
|
+
return SocketCommon_DataType.Cc;
|
|
121
|
+
case SubjectType.Market:
|
|
122
|
+
// 市场状态推送协议上 dataType=Quote,只设置 market 字段
|
|
123
|
+
return SocketCommon_DataType.Quote;
|
|
118
124
|
default:
|
|
119
125
|
return SocketCommon_DataType.Unknown;
|
|
120
126
|
}
|
|
@@ -29,7 +29,7 @@ const MAX_RECONNECT_INTERVAL = 60000;
|
|
|
29
29
|
/** Default connect timeout (ms) */
|
|
30
30
|
const DEFAULT_CONNECT_TIMEOUT = 30000;
|
|
31
31
|
/** SDK version identifier */
|
|
32
|
-
const SDK_VERSION = 'typescript/0.
|
|
32
|
+
const SDK_VERSION = 'typescript/0.4.0';
|
|
33
33
|
/** Protocol version */
|
|
34
34
|
const ACCEPT_VERSION = '1.0';
|
|
35
35
|
/** Default send heartbeat interval (ms) */
|
|
@@ -351,6 +351,11 @@ export class PushClient {
|
|
|
351
351
|
if (pushData.klineData)
|
|
352
352
|
cb.onKline?.(pushData.klineData);
|
|
353
353
|
break;
|
|
354
|
+
case SocketCommon_DataType.Cc:
|
|
355
|
+
// 加密货币(Cc)推送复用 QuoteData body,路由到 onQuote 回调
|
|
356
|
+
if (pushData.quoteData)
|
|
357
|
+
cb.onQuote?.(pushData.quoteData);
|
|
358
|
+
break;
|
|
354
359
|
default:
|
|
355
360
|
// FullTick and QuoteBBO use TradeTick/Quote dataType
|
|
356
361
|
// TickData (fullTick) via tickData field
|
|
@@ -457,6 +462,71 @@ export class PushClient {
|
|
|
457
462
|
this.doUnsubscribe(SubjectType.Kline, symbols);
|
|
458
463
|
this.removeSubscription(SubjectType.Kline, symbols);
|
|
459
464
|
}
|
|
465
|
+
// ===== v0.4.0: stock_top / option_top / cc / market =====
|
|
466
|
+
/**
|
|
467
|
+
* Subscribe to stock top rankings (v0.4.0).
|
|
468
|
+
* @param market US / HK / CN
|
|
469
|
+
* @param indicators LATEST_PRICE / HIGHER / LOWER / VOLUME / AMOUNT / AMPLITUDE / TURNOVER_RATE
|
|
470
|
+
*/
|
|
471
|
+
subscribeStockTop(market, indicators) {
|
|
472
|
+
this.doSubscribe(SubjectType.StockTop, indicators, undefined, market);
|
|
473
|
+
this.addSubscription(SubjectType.StockTop, indicators);
|
|
474
|
+
}
|
|
475
|
+
/** Unsubscribe from stock top rankings (v0.4.0). */
|
|
476
|
+
unsubscribeStockTop(market, indicators) {
|
|
477
|
+
const dataType = subjectToDataType(SubjectType.StockTop);
|
|
478
|
+
const symbolsStr = indicators.join(',');
|
|
479
|
+
const req = buildUnSubscribeMessage(dataType, symbolsStr, undefined, market);
|
|
480
|
+
this.sendMessage(req);
|
|
481
|
+
this.removeSubscription(SubjectType.StockTop, indicators);
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Subscribe to option top rankings (v0.4.0).
|
|
485
|
+
* @param market US / HK / CN
|
|
486
|
+
*/
|
|
487
|
+
subscribeOptionTop(market, indicators) {
|
|
488
|
+
this.doSubscribe(SubjectType.OptionTop, indicators, undefined, market);
|
|
489
|
+
this.addSubscription(SubjectType.OptionTop, indicators);
|
|
490
|
+
}
|
|
491
|
+
/** Unsubscribe from option top rankings (v0.4.0). */
|
|
492
|
+
unsubscribeOptionTop(market, indicators) {
|
|
493
|
+
const dataType = subjectToDataType(SubjectType.OptionTop);
|
|
494
|
+
const symbolsStr = indicators.join(',');
|
|
495
|
+
const req = buildUnSubscribeMessage(dataType, symbolsStr, undefined, market);
|
|
496
|
+
this.sendMessage(req);
|
|
497
|
+
this.removeSubscription(SubjectType.OptionTop, indicators);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Subscribe to crypto realtime quotes (v0.4.0).
|
|
501
|
+
* Data is delivered via the `onQuote` callback (same QuoteData body).
|
|
502
|
+
* @param symbols e.g. ["BTCUSD", "ETHUSD"]
|
|
503
|
+
*/
|
|
504
|
+
subscribeCc(symbols) {
|
|
505
|
+
this.doSubscribe(SubjectType.Cc, symbols);
|
|
506
|
+
this.addSubscription(SubjectType.Cc, symbols);
|
|
507
|
+
}
|
|
508
|
+
/** Unsubscribe from crypto realtime quotes (v0.4.0). */
|
|
509
|
+
unsubscribeCc(symbols) {
|
|
510
|
+
this.doUnsubscribe(SubjectType.Cc, symbols);
|
|
511
|
+
this.removeSubscription(SubjectType.Cc, symbols);
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Subscribe to market status updates (v0.4.0).
|
|
515
|
+
* Protocol uses dataType=Quote with only the `market` field set.
|
|
516
|
+
* Data is delivered via the `onQuote` callback.
|
|
517
|
+
*/
|
|
518
|
+
subscribeMarket(market) {
|
|
519
|
+
// symbols 为空,只带 market 字段
|
|
520
|
+
this.doSubscribe(SubjectType.Market, undefined, undefined, market);
|
|
521
|
+
this.addSubscription(SubjectType.Market, [market]);
|
|
522
|
+
}
|
|
523
|
+
/** Unsubscribe from market status (v0.4.0). */
|
|
524
|
+
unsubscribeMarket(market) {
|
|
525
|
+
const dataType = subjectToDataType(SubjectType.Market);
|
|
526
|
+
const req = buildUnSubscribeMessage(dataType, undefined, undefined, market);
|
|
527
|
+
this.sendMessage(req);
|
|
528
|
+
this.removeSubscription(SubjectType.Market, [market]);
|
|
529
|
+
}
|
|
460
530
|
// ===== Account push subscribe/unsubscribe =====
|
|
461
531
|
/** Subscribe to asset changes */
|
|
462
532
|
subscribeAsset(account) {
|
|
@@ -17,6 +17,10 @@ export var SubjectType;
|
|
|
17
17
|
SubjectType["OptionTop"] = "option_top";
|
|
18
18
|
SubjectType["FullTick"] = "full_tick";
|
|
19
19
|
SubjectType["QuoteBBO"] = "quote_bbo";
|
|
20
|
+
/** 加密货币实时行情 (v0.4.0) */
|
|
21
|
+
SubjectType["Cc"] = "cc";
|
|
22
|
+
/** 市场状态 (v0.4.0) */
|
|
23
|
+
SubjectType["Market"] = "market";
|
|
20
24
|
SubjectType["Asset"] = "asset";
|
|
21
25
|
SubjectType["Position"] = "position";
|
|
22
26
|
SubjectType["Order"] = "order";
|