@tigeropenapi/tigeropen 0.1.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/LICENSE +21 -0
- package/README.md +272 -0
- package/dist/cjs/client/api-request.js +26 -0
- package/dist/cjs/client/api-response.js +18 -0
- package/dist/cjs/client/errors.js +51 -0
- package/dist/cjs/client/http-client.js +149 -0
- package/dist/cjs/client/index.js +19 -0
- package/dist/cjs/client/retry.js +54 -0
- package/dist/cjs/config/client-config.js +114 -0
- package/dist/cjs/config/config-parser.js +142 -0
- package/dist/cjs/config/domain.js +97 -0
- package/dist/cjs/config/index.js +14 -0
- package/dist/cjs/config/token-manager.js +116 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/logger/index.js +20 -0
- package/dist/cjs/logger/logger.js +68 -0
- package/dist/cjs/model/contract-helpers.js +38 -0
- package/dist/cjs/model/contract.js +6 -0
- package/dist/cjs/model/enums.js +110 -0
- package/dist/cjs/model/order-helpers.js +104 -0
- package/dist/cjs/model/order.js +6 -0
- package/dist/cjs/model/position.js +6 -0
- package/dist/cjs/push/callbacks.js +2 -0
- package/dist/cjs/push/index.js +25 -0
- package/dist/cjs/push/push-client.js +423 -0
- package/dist/cjs/push/push-message.js +83 -0
- package/dist/cjs/quote/index.js +8 -0
- package/dist/cjs/quote/quote-client.js +110 -0
- package/dist/cjs/signer/index.js +12 -0
- package/dist/cjs/signer/sign-content.js +19 -0
- package/dist/cjs/signer/signer.js +93 -0
- package/dist/cjs/trade/index.js +8 -0
- package/dist/cjs/trade/trade-client.js +99 -0
- package/dist/esm/client/api-request.js +23 -0
- package/dist/esm/client/api-response.js +15 -0
- package/dist/esm/client/errors.js +46 -0
- package/dist/esm/client/http-client.js +145 -0
- package/dist/esm/client/index.js +8 -0
- package/dist/esm/client/retry.js +48 -0
- package/dist/esm/config/client-config.js +111 -0
- package/dist/esm/config/config-parser.js +105 -0
- package/dist/esm/config/domain.js +93 -0
- package/dist/esm/config/index.js +6 -0
- package/dist/esm/config/token-manager.js +112 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/logger/index.js +4 -0
- package/dist/esm/logger/logger.js +61 -0
- package/dist/esm/model/contract-helpers.js +29 -0
- package/dist/esm/model/contract.js +5 -0
- package/dist/esm/model/enums.js +107 -0
- package/dist/esm/model/order-helpers.js +93 -0
- package/dist/esm/model/order.js +5 -0
- package/dist/esm/model/position.js +5 -0
- package/dist/esm/push/callbacks.js +1 -0
- package/dist/esm/push/index.js +6 -0
- package/dist/esm/push/push-client.js +419 -0
- package/dist/esm/push/push-message.js +77 -0
- package/dist/esm/quote/index.js +4 -0
- package/dist/esm/quote/quote-client.js +106 -0
- package/dist/esm/signer/index.js +5 -0
- package/dist/esm/signer/sign-content.js +16 -0
- package/dist/esm/signer/signer.js +88 -0
- package/dist/esm/trade/index.js +4 -0
- package/dist/esm/trade/trade-client.js +95 -0
- package/dist/types/client/api-request.d.ts +18 -0
- package/dist/types/client/api-response.d.ts +16 -0
- package/dist/types/client/errors.d.ts +19 -0
- package/dist/types/client/http-client.d.ts +45 -0
- package/dist/types/client/index.d.ts +8 -0
- package/dist/types/client/retry.d.ts +37 -0
- package/dist/types/config/client-config.d.ts +43 -0
- package/dist/types/config/config-parser.d.ts +16 -0
- package/dist/types/config/domain.d.ts +18 -0
- package/dist/types/config/index.d.ts +7 -0
- package/dist/types/config/token-manager.d.ts +38 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/logger/index.d.ts +4 -0
- package/dist/types/logger/logger.d.ts +42 -0
- package/dist/types/model/contract-helpers.d.ts +18 -0
- package/dist/types/model/contract.d.ts +60 -0
- package/dist/types/model/enums.d.ts +97 -0
- package/dist/types/model/order-helpers.d.ts +22 -0
- package/dist/types/model/order.d.ts +95 -0
- package/dist/types/model/position.d.ts +39 -0
- package/dist/types/push/callbacks.d.ts +57 -0
- package/dist/types/push/index.d.ts +7 -0
- package/dist/types/push/push-client.d.ts +139 -0
- package/dist/types/push/push-message.d.ts +167 -0
- package/dist/types/quote/index.d.ts +4 -0
- package/dist/types/quote/quote-client.d.ts +58 -0
- package/dist/types/signer/index.d.ts +5 -0
- package/dist/types/signer/sign-content.d.ts +13 -0
- package/dist/types/signer/signer.d.ts +36 -0
- package/dist/types/trade/index.d.ts +4 -0
- package/dist/types/trade/trade-client.d.ts +48 -0
- package/package.json +54 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 老虎证券 OpenAPI TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* 本 SDK 提供行情查询、交易下单、账户管理和实时推送等功能,
|
|
5
|
+
* 与 Python SDK 保持功能对等,遵循 TypeScript 最佳实践。
|
|
6
|
+
*
|
|
7
|
+
* 分层架构:
|
|
8
|
+
* - 模型层(model):Contract、Order、Position 等数据模型和枚举
|
|
9
|
+
* - 配置层(config):ClientConfig、ConfigParser
|
|
10
|
+
* - 认证层(signer):RSA 签名
|
|
11
|
+
* - 传输层(client):HttpClient、重试策略
|
|
12
|
+
* - 业务层(quote/trade):QuoteClient、TradeClient
|
|
13
|
+
* - 推送层(push):PushClient
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
/** SDK 版本号 */
|
|
18
|
+
export declare const VERSION = "0.1.0";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger - 日志接口和默认实现
|
|
3
|
+
*
|
|
4
|
+
* 定义 Logger 接口,支持注入自定义 logger 对象。
|
|
5
|
+
* 默认实现使用 console 输出。
|
|
6
|
+
*/
|
|
7
|
+
/** 日志级别 */
|
|
8
|
+
export declare enum LogLevel {
|
|
9
|
+
Debug = 0,
|
|
10
|
+
Info = 1,
|
|
11
|
+
Warn = 2,
|
|
12
|
+
Error = 3
|
|
13
|
+
}
|
|
14
|
+
/** 日志接口 */
|
|
15
|
+
export interface Logger {
|
|
16
|
+
debug(msg: string, ...args: unknown[]): void;
|
|
17
|
+
info(msg: string, ...args: unknown[]): void;
|
|
18
|
+
warn(msg: string, ...args: unknown[]): void;
|
|
19
|
+
error(msg: string, ...args: unknown[]): void;
|
|
20
|
+
setLevel(level: LogLevel): void;
|
|
21
|
+
}
|
|
22
|
+
/** 默认日志实现,使用 console 输出 */
|
|
23
|
+
export declare class DefaultLogger implements Logger {
|
|
24
|
+
private level;
|
|
25
|
+
setLevel(level: LogLevel): void;
|
|
26
|
+
debug(msg: string, ...args: unknown[]): void;
|
|
27
|
+
info(msg: string, ...args: unknown[]): void;
|
|
28
|
+
warn(msg: string, ...args: unknown[]): void;
|
|
29
|
+
error(msg: string, ...args: unknown[]): void;
|
|
30
|
+
}
|
|
31
|
+
/** 空日志实现,不输出任何内容 */
|
|
32
|
+
export declare class NopLogger implements Logger {
|
|
33
|
+
debug(): void;
|
|
34
|
+
info(): void;
|
|
35
|
+
warn(): void;
|
|
36
|
+
error(): void;
|
|
37
|
+
setLevel(): void;
|
|
38
|
+
}
|
|
39
|
+
/** 设置全局默认 logger */
|
|
40
|
+
export declare function setDefaultLogger(logger: Logger): void;
|
|
41
|
+
/** 获取全局默认 logger */
|
|
42
|
+
export declare function getDefaultLogger(): Logger;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 合约构造工具函数
|
|
3
|
+
*/
|
|
4
|
+
import type { Contract } from './contract';
|
|
5
|
+
/** 构造股票合约 */
|
|
6
|
+
export declare function stockContract(symbol: string, currency: string): Contract;
|
|
7
|
+
/** 通过 identifier 构造期权合约 */
|
|
8
|
+
export declare function optionContract(identifier: string): Contract;
|
|
9
|
+
/** 通过各字段构造期权合约 */
|
|
10
|
+
export declare function optionContractBySymbol(symbol: string, expiry: string, strike: number, right: string, currency: string): Contract;
|
|
11
|
+
/** 构造期货合约 */
|
|
12
|
+
export declare function futureContract(symbol: string, currency: string, expiry: string): Contract;
|
|
13
|
+
/** 构造外汇合约 */
|
|
14
|
+
export declare function cashContract(symbol: string): Contract;
|
|
15
|
+
/** 构造基金合约 */
|
|
16
|
+
export declare function fundContract(symbol: string, currency: string): Contract;
|
|
17
|
+
/** 构造窝轮合约 */
|
|
18
|
+
export declare function warrantContract(symbol: string, currency: string, expiry: string, strike: number, right: string): Contract;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract 合约接口
|
|
3
|
+
* 字段名 camelCase 与 API JSON 天然一致,不改名、不加封装层
|
|
4
|
+
*/
|
|
5
|
+
/** 最小报价单位价格区间 */
|
|
6
|
+
export interface TickSize {
|
|
7
|
+
/** 起始价格(字符串,如 "0"、"1") */
|
|
8
|
+
begin?: string;
|
|
9
|
+
/** 结束价格(字符串,如 "1"、"Infinity") */
|
|
10
|
+
end?: string;
|
|
11
|
+
/** 最小报价单位 */
|
|
12
|
+
tickSize?: number;
|
|
13
|
+
/** 类型(CLOSED/OPEN) */
|
|
14
|
+
type?: string;
|
|
15
|
+
}
|
|
16
|
+
/** 合约模型,字段名词根保持与 API JSON 一致 */
|
|
17
|
+
export interface Contract {
|
|
18
|
+
/** 合约 ID */
|
|
19
|
+
contractId?: number;
|
|
20
|
+
/** 标的代码(如 AAPL) */
|
|
21
|
+
symbol: string;
|
|
22
|
+
/** 证券类型(STK/OPT/FUT/WAR/CASH/FUND 等) */
|
|
23
|
+
secType: string;
|
|
24
|
+
/** 货币 */
|
|
25
|
+
currency?: string;
|
|
26
|
+
/** 交易所 */
|
|
27
|
+
exchange?: string;
|
|
28
|
+
/** 到期日(期权/期货) */
|
|
29
|
+
expiry?: string;
|
|
30
|
+
/** 行权价(期权) */
|
|
31
|
+
strike?: number;
|
|
32
|
+
/** 看涨/看跌(PUT/CALL),保持 API 原始名 right,不改为 putCall */
|
|
33
|
+
right?: string;
|
|
34
|
+
/** 合约乘数 */
|
|
35
|
+
multiplier?: number;
|
|
36
|
+
/** 合约标识符 */
|
|
37
|
+
identifier?: string;
|
|
38
|
+
/** 合约名称 */
|
|
39
|
+
name?: string;
|
|
40
|
+
/** 市场 */
|
|
41
|
+
market?: string;
|
|
42
|
+
/** 是否可交易,保持 API 原始名 tradeable,不改为 trade */
|
|
43
|
+
tradeable?: boolean;
|
|
44
|
+
/** 合约内部 ID,保持 API 原始名 conid,不改为 contractId */
|
|
45
|
+
conid?: number;
|
|
46
|
+
/** 做空保证金比例 */
|
|
47
|
+
shortMargin?: number;
|
|
48
|
+
/** 做空初始保证金比例 */
|
|
49
|
+
shortInitialMargin?: number;
|
|
50
|
+
/** 做空维持保证金比例 */
|
|
51
|
+
shortMaintenanceMargin?: number;
|
|
52
|
+
/** 做多初始保证金 */
|
|
53
|
+
longInitialMargin?: number;
|
|
54
|
+
/** 做多维持保证金 */
|
|
55
|
+
longMaintenanceMargin?: number;
|
|
56
|
+
/** 最小报价单位价格区间 */
|
|
57
|
+
tickSizes?: TickSize[];
|
|
58
|
+
/** 每手数量 */
|
|
59
|
+
lotSize?: number;
|
|
60
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 枚举类型定义
|
|
3
|
+
* 所有枚举值与 API JSON 保持一致
|
|
4
|
+
*/
|
|
5
|
+
/** 市场枚举 */
|
|
6
|
+
export declare enum Market {
|
|
7
|
+
All = "ALL",
|
|
8
|
+
US = "US",
|
|
9
|
+
HK = "HK",
|
|
10
|
+
CN = "CN",
|
|
11
|
+
SG = "SG"
|
|
12
|
+
}
|
|
13
|
+
/** 证券类型枚举 */
|
|
14
|
+
export declare enum SecurityType {
|
|
15
|
+
All = "ALL",
|
|
16
|
+
STK = "STK",
|
|
17
|
+
OPT = "OPT",
|
|
18
|
+
WAR = "WAR",
|
|
19
|
+
IOPT = "IOPT",
|
|
20
|
+
FUT = "FUT",
|
|
21
|
+
FOP = "FOP",
|
|
22
|
+
CASH = "CASH",
|
|
23
|
+
MLEG = "MLEG",
|
|
24
|
+
FUND = "FUND"
|
|
25
|
+
}
|
|
26
|
+
/** 货币枚举 */
|
|
27
|
+
export declare enum Currency {
|
|
28
|
+
All = "ALL",
|
|
29
|
+
USD = "USD",
|
|
30
|
+
HKD = "HKD",
|
|
31
|
+
CNH = "CNH",
|
|
32
|
+
SGD = "SGD"
|
|
33
|
+
}
|
|
34
|
+
/** 订单类型枚举 */
|
|
35
|
+
export declare enum OrderType {
|
|
36
|
+
MKT = "MKT",
|
|
37
|
+
LMT = "LMT",
|
|
38
|
+
STP = "STP",
|
|
39
|
+
STP_LMT = "STP_LMT",
|
|
40
|
+
TRAIL = "TRAIL",
|
|
41
|
+
AM = "AM",
|
|
42
|
+
AL = "AL",
|
|
43
|
+
TWAP = "TWAP",
|
|
44
|
+
VWAP = "VWAP",
|
|
45
|
+
OCA = "OCA"
|
|
46
|
+
}
|
|
47
|
+
/** 订单状态枚举 */
|
|
48
|
+
export declare enum OrderStatus {
|
|
49
|
+
PendingNew = "PendingNew",
|
|
50
|
+
Initial = "Initial",
|
|
51
|
+
Submitted = "Submitted",
|
|
52
|
+
PartiallyFilled = "PartiallyFilled",
|
|
53
|
+
Filled = "Filled",
|
|
54
|
+
Cancelled = "Cancelled",
|
|
55
|
+
PendingCancel = "PendingCancel",
|
|
56
|
+
Inactive = "Inactive",
|
|
57
|
+
Invalid = "Invalid"
|
|
58
|
+
}
|
|
59
|
+
/** K 线周期枚举 */
|
|
60
|
+
export declare enum BarPeriod {
|
|
61
|
+
Day = "day",
|
|
62
|
+
Week = "week",
|
|
63
|
+
Month = "month",
|
|
64
|
+
Year = "year",
|
|
65
|
+
Min1 = "1min",
|
|
66
|
+
Min5 = "5min",
|
|
67
|
+
Min15 = "15min",
|
|
68
|
+
Min30 = "30min",
|
|
69
|
+
Min60 = "60min"
|
|
70
|
+
}
|
|
71
|
+
/** 语言枚举 */
|
|
72
|
+
export declare enum Language {
|
|
73
|
+
ZhCN = "zh_CN",
|
|
74
|
+
ZhTW = "zh_TW",
|
|
75
|
+
EnUS = "en_US"
|
|
76
|
+
}
|
|
77
|
+
/** 复权类型枚举 */
|
|
78
|
+
export declare enum QuoteRight {
|
|
79
|
+
/** 前复权 */
|
|
80
|
+
Br = "br",
|
|
81
|
+
/** 不复权 */
|
|
82
|
+
Nr = "nr"
|
|
83
|
+
}
|
|
84
|
+
/** 牌照类型枚举 */
|
|
85
|
+
export declare enum License {
|
|
86
|
+
TBNZ = "TBNZ",
|
|
87
|
+
TBSG = "TBSG",
|
|
88
|
+
TBHK = "TBHK",
|
|
89
|
+
TBAU = "TBAU",
|
|
90
|
+
TBUS = "TBUS"
|
|
91
|
+
}
|
|
92
|
+
/** 订单有效期枚举 */
|
|
93
|
+
export declare enum TimeInForce {
|
|
94
|
+
DAY = "DAY",
|
|
95
|
+
GTC = "GTC",
|
|
96
|
+
OPG = "OPG"
|
|
97
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 订单构造工具函数
|
|
3
|
+
*/
|
|
4
|
+
import type { Order, OrderLeg, AlgoParams } from './order';
|
|
5
|
+
/** 构造市价单 */
|
|
6
|
+
export declare function marketOrder(account: string, symbol: string, secType: string, action: string, quantity: number): Order;
|
|
7
|
+
/** 构造限价单 */
|
|
8
|
+
export declare function limitOrder(account: string, symbol: string, secType: string, action: string, quantity: number, limitPrice: number): Order;
|
|
9
|
+
/** 构造止损单 */
|
|
10
|
+
export declare function stopOrder(account: string, symbol: string, secType: string, action: string, quantity: number, auxPrice: number): Order;
|
|
11
|
+
/** 构造止损限价单 */
|
|
12
|
+
export declare function stopLimitOrder(account: string, symbol: string, secType: string, action: string, quantity: number, limitPrice: number, auxPrice: number): Order;
|
|
13
|
+
/** 构造跟踪止损单 */
|
|
14
|
+
export declare function trailOrder(account: string, symbol: string, secType: string, action: string, quantity: number, trailingPercent: number): Order;
|
|
15
|
+
/** 构造竞价限价单 */
|
|
16
|
+
export declare function auctionLimitOrder(account: string, symbol: string, secType: string, action: string, quantity: number, limitPrice: number): Order;
|
|
17
|
+
/** 构造竞价市价单 */
|
|
18
|
+
export declare function auctionMarketOrder(account: string, symbol: string, secType: string, action: string, quantity: number): Order;
|
|
19
|
+
/** 构造算法订单(TWAP/VWAP) */
|
|
20
|
+
export declare function algoOrder(account: string, symbol: string, secType: string, action: string, quantity: number, limitPrice: number, algoType: string, params: AlgoParams): Order;
|
|
21
|
+
/** 构造附加订单(止盈/止损) */
|
|
22
|
+
export declare function orderLeg(legType: string, price: number, timeInForce: string): OrderLeg;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order 订单接口
|
|
3
|
+
* 字段名 camelCase 与 API JSON 天然一致,不改名、不加封装层
|
|
4
|
+
*/
|
|
5
|
+
/** 附加订单(止盈/止损) */
|
|
6
|
+
export interface OrderLeg {
|
|
7
|
+
/** 附加订单类型(PROFIT/LOSS) */
|
|
8
|
+
legType?: string;
|
|
9
|
+
/** 价格 */
|
|
10
|
+
price?: number;
|
|
11
|
+
/** 有效期 */
|
|
12
|
+
timeInForce?: string;
|
|
13
|
+
/** 数量 */
|
|
14
|
+
quantity?: number;
|
|
15
|
+
}
|
|
16
|
+
/** 算法订单参数 */
|
|
17
|
+
export interface AlgoParams {
|
|
18
|
+
/** 算法策略(TWAP/VWAP) */
|
|
19
|
+
algoStrategy?: string;
|
|
20
|
+
/** 开始时间 */
|
|
21
|
+
startTime?: string;
|
|
22
|
+
/** 结束时间 */
|
|
23
|
+
endTime?: string;
|
|
24
|
+
/** 参与率 */
|
|
25
|
+
participationRate?: number;
|
|
26
|
+
}
|
|
27
|
+
/** 订单模型,字段名词根保持与 API JSON 一致 */
|
|
28
|
+
export interface Order {
|
|
29
|
+
/** 交易账户 */
|
|
30
|
+
account: string;
|
|
31
|
+
/** 全局订单 ID */
|
|
32
|
+
id?: number;
|
|
33
|
+
/** 账户自增订单号 */
|
|
34
|
+
orderId?: number;
|
|
35
|
+
/** 买卖方向(BUY/SELL) */
|
|
36
|
+
action: string;
|
|
37
|
+
/** 订单类型(MKT/LMT/STP/STP_LMT/TRAIL 等) */
|
|
38
|
+
orderType: string;
|
|
39
|
+
/** 总数量(API 返回字段名为 totalQuantity) */
|
|
40
|
+
totalQuantity: number;
|
|
41
|
+
/** 限价 */
|
|
42
|
+
limitPrice?: number;
|
|
43
|
+
/** 辅助价格(止损价) */
|
|
44
|
+
auxPrice?: number;
|
|
45
|
+
/** 跟踪止损百分比 */
|
|
46
|
+
trailingPercent?: number;
|
|
47
|
+
/** 订单状态 */
|
|
48
|
+
status?: string;
|
|
49
|
+
/** 已成交数量(API 返回字段名为 filledQuantity) */
|
|
50
|
+
filledQuantity?: number;
|
|
51
|
+
/** 平均成交价 */
|
|
52
|
+
avgFillPrice?: number;
|
|
53
|
+
/** 有效期(DAY/GTC/OPG) */
|
|
54
|
+
timeInForce: string;
|
|
55
|
+
/** 是否允许盘前盘后 */
|
|
56
|
+
outsideRth: boolean;
|
|
57
|
+
/** 附加订单(止盈/止损) */
|
|
58
|
+
orderLegs?: OrderLeg[];
|
|
59
|
+
/** 算法参数 */
|
|
60
|
+
algoParams?: AlgoParams;
|
|
61
|
+
/** 股票代码 */
|
|
62
|
+
symbol: string;
|
|
63
|
+
/** 合约类型 */
|
|
64
|
+
secType: string;
|
|
65
|
+
/** 市场 */
|
|
66
|
+
market?: string;
|
|
67
|
+
/** 货币 */
|
|
68
|
+
currency?: string;
|
|
69
|
+
/** 到期日(期权/期货) */
|
|
70
|
+
expiry?: string;
|
|
71
|
+
/** 行权价(期权),API 返回为字符串 */
|
|
72
|
+
strike?: string;
|
|
73
|
+
/** 看涨/看跌(PUT/CALL),保持 API 原始名 right */
|
|
74
|
+
right?: string;
|
|
75
|
+
/** 合约标识符 */
|
|
76
|
+
identifier?: string;
|
|
77
|
+
/** 合约名称 */
|
|
78
|
+
name?: string;
|
|
79
|
+
/** 佣金 */
|
|
80
|
+
commission?: number;
|
|
81
|
+
/** 已实现盈亏 */
|
|
82
|
+
realizedPnl?: number;
|
|
83
|
+
/** 开仓时间(毫秒时间戳) */
|
|
84
|
+
openTime?: number;
|
|
85
|
+
/** 更新时间(毫秒时间戳) */
|
|
86
|
+
updateTime?: number;
|
|
87
|
+
/** 最新时间(毫秒时间戳) */
|
|
88
|
+
latestTime?: number;
|
|
89
|
+
/** 备注 */
|
|
90
|
+
remark?: string;
|
|
91
|
+
/** 订单来源 */
|
|
92
|
+
source?: string;
|
|
93
|
+
/** 用户标记 */
|
|
94
|
+
userMark?: string;
|
|
95
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Position 持仓接口
|
|
3
|
+
* 字段名 camelCase 与 API JSON 天然一致,不改名、不加封装层
|
|
4
|
+
*/
|
|
5
|
+
/** 持仓模型,字段名词根保持与 API JSON 一致 */
|
|
6
|
+
export interface Position {
|
|
7
|
+
/** 交易账户 */
|
|
8
|
+
account: string;
|
|
9
|
+
/** 标的代码 */
|
|
10
|
+
symbol: string;
|
|
11
|
+
/** 证券类型 */
|
|
12
|
+
secType: string;
|
|
13
|
+
/** 市场 */
|
|
14
|
+
market?: string;
|
|
15
|
+
/** 货币 */
|
|
16
|
+
currency?: string;
|
|
17
|
+
/** 持仓数量(API 返回字段名为 position) */
|
|
18
|
+
position: number;
|
|
19
|
+
/** 平均成本 */
|
|
20
|
+
averageCost: number;
|
|
21
|
+
/** 市值 */
|
|
22
|
+
marketValue?: number;
|
|
23
|
+
/** 已实现盈亏 */
|
|
24
|
+
realizedPnl?: number;
|
|
25
|
+
/** 未实现盈亏 */
|
|
26
|
+
unrealizedPnl?: number;
|
|
27
|
+
/** 未实现盈亏百分比 */
|
|
28
|
+
unrealizedPnlPercent?: number;
|
|
29
|
+
/** 合约 ID */
|
|
30
|
+
contractId?: number;
|
|
31
|
+
/** 合约标识符 */
|
|
32
|
+
identifier?: string;
|
|
33
|
+
/** 合约名称 */
|
|
34
|
+
name?: string;
|
|
35
|
+
/** 最新价格 */
|
|
36
|
+
latestPrice?: number;
|
|
37
|
+
/** 合约乘数 */
|
|
38
|
+
multiplier?: number;
|
|
39
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 推送回调函数类型定义
|
|
3
|
+
*
|
|
4
|
+
* 每种推送类型独立回调,连接状态回调独立管理。
|
|
5
|
+
*/
|
|
6
|
+
import type { QuoteData, TickData, DepthData, KlineData, AssetData, PositionData, OrderData, TransactionData, SubjectType } from './push-message';
|
|
7
|
+
/** 行情推送回调 */
|
|
8
|
+
export type QuoteCallback = (data: QuoteData) => void;
|
|
9
|
+
/** 逐笔成交推送回调 */
|
|
10
|
+
export type TickCallback = (data: TickData) => void;
|
|
11
|
+
/** 深度行情推送回调 */
|
|
12
|
+
export type DepthCallback = (data: DepthData) => void;
|
|
13
|
+
/** K 线推送回调 */
|
|
14
|
+
export type KlineCallback = (data: KlineData) => void;
|
|
15
|
+
/** 资产变动推送回调 */
|
|
16
|
+
export type AssetCallback = (data: AssetData) => void;
|
|
17
|
+
/** 持仓变动推送回调 */
|
|
18
|
+
export type PositionCallback = (data: PositionData) => void;
|
|
19
|
+
/** 订单状态推送回调 */
|
|
20
|
+
export type OrderCallback = (data: OrderData) => void;
|
|
21
|
+
/** 成交明细推送回调 */
|
|
22
|
+
export type TransactionCallback = (data: TransactionData) => void;
|
|
23
|
+
/** 连接成功回调 */
|
|
24
|
+
export type ConnectCallback = () => void;
|
|
25
|
+
/** 断开连接回调 */
|
|
26
|
+
export type DisconnectCallback = () => void;
|
|
27
|
+
/** 错误回调 */
|
|
28
|
+
export type ErrorCallback = (err: Error) => void;
|
|
29
|
+
/** 被踢出回调 */
|
|
30
|
+
export type KickoutCallback = (message: string) => void;
|
|
31
|
+
/** 订阅成功回调 */
|
|
32
|
+
export type SubscribeCallback = (subject: SubjectType, symbols: string[]) => void;
|
|
33
|
+
/** 退订成功回调 */
|
|
34
|
+
export type UnsubscribeCallback = (subject: SubjectType, symbols: string[]) => void;
|
|
35
|
+
/** 所有回调函数的集合 */
|
|
36
|
+
export interface Callbacks {
|
|
37
|
+
onQuote?: QuoteCallback;
|
|
38
|
+
onTick?: TickCallback;
|
|
39
|
+
onDepth?: DepthCallback;
|
|
40
|
+
onOption?: QuoteCallback;
|
|
41
|
+
onFuture?: QuoteCallback;
|
|
42
|
+
onKline?: KlineCallback;
|
|
43
|
+
onStockTop?: QuoteCallback;
|
|
44
|
+
onOptionTop?: QuoteCallback;
|
|
45
|
+
onFullTick?: TickCallback;
|
|
46
|
+
onQuoteBBO?: QuoteCallback;
|
|
47
|
+
onAsset?: AssetCallback;
|
|
48
|
+
onPosition?: PositionCallback;
|
|
49
|
+
onOrder?: OrderCallback;
|
|
50
|
+
onTransaction?: TransactionCallback;
|
|
51
|
+
onConnect?: ConnectCallback;
|
|
52
|
+
onDisconnect?: DisconnectCallback;
|
|
53
|
+
onError?: ErrorCallback;
|
|
54
|
+
onKickout?: KickoutCallback;
|
|
55
|
+
onSubscribe?: SubscribeCallback;
|
|
56
|
+
onUnsubscribe?: UnsubscribeCallback;
|
|
57
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PushClient - WebSocket 推送客户端
|
|
3
|
+
*
|
|
4
|
+
* 通过 WebSocket 长连接接收实时行情和账户推送。
|
|
5
|
+
* 支持连接认证、订阅/退订、回调机制、心跳保活和自动重连。
|
|
6
|
+
*/
|
|
7
|
+
import type { ClientConfig } from '../config/client-config';
|
|
8
|
+
import type { Callbacks } from './callbacks';
|
|
9
|
+
import { SubjectType } from './push-message';
|
|
10
|
+
/** 连接状态 */
|
|
11
|
+
export declare enum ConnectionState {
|
|
12
|
+
Disconnected = 0,
|
|
13
|
+
Connecting = 1,
|
|
14
|
+
Connected = 2
|
|
15
|
+
}
|
|
16
|
+
/** PushClient 配置选项 */
|
|
17
|
+
export interface PushClientOptions {
|
|
18
|
+
pushUrl?: string;
|
|
19
|
+
heartbeatInterval?: number;
|
|
20
|
+
reconnectInterval?: number;
|
|
21
|
+
autoReconnect?: boolean;
|
|
22
|
+
connectTimeout?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* WebSocket 接口,方便测试注入
|
|
26
|
+
*/
|
|
27
|
+
export interface WebSocketLike {
|
|
28
|
+
readonly readyState: number;
|
|
29
|
+
send(data: string): void;
|
|
30
|
+
close(): void;
|
|
31
|
+
onopen: ((ev: unknown) => void) | null;
|
|
32
|
+
onmessage: ((ev: {
|
|
33
|
+
data: unknown;
|
|
34
|
+
}) => void) | null;
|
|
35
|
+
onclose: ((ev: unknown) => void) | null;
|
|
36
|
+
onerror: ((ev: unknown) => void) | null;
|
|
37
|
+
}
|
|
38
|
+
/** WebSocket 工厂函数类型 */
|
|
39
|
+
export type WebSocketFactory = (url: string) => WebSocketLike;
|
|
40
|
+
/**
|
|
41
|
+
* PushClient WebSocket 推送客户端
|
|
42
|
+
*/
|
|
43
|
+
export declare class PushClient {
|
|
44
|
+
private config;
|
|
45
|
+
private pushUrl;
|
|
46
|
+
private heartbeatInterval;
|
|
47
|
+
private reconnectInterval;
|
|
48
|
+
private autoReconnect;
|
|
49
|
+
private connectTimeout;
|
|
50
|
+
private ws;
|
|
51
|
+
private _state;
|
|
52
|
+
private callbacks;
|
|
53
|
+
/** 订阅状态管理:subject -> Set<symbol> */
|
|
54
|
+
private subscriptions;
|
|
55
|
+
/** 账户级别订阅 */
|
|
56
|
+
private accountSubs;
|
|
57
|
+
private heartbeatTimer;
|
|
58
|
+
private reconnectTimer;
|
|
59
|
+
private stopped;
|
|
60
|
+
/** 可注入的 WebSocket 工厂(用于测试) */
|
|
61
|
+
wsFactory: WebSocketFactory | null;
|
|
62
|
+
constructor(config: ClientConfig, options?: PushClientOptions);
|
|
63
|
+
/** 获取当前连接状态 */
|
|
64
|
+
get state(): ConnectionState;
|
|
65
|
+
/** 设置回调函数集合 */
|
|
66
|
+
setCallbacks(cb: Callbacks): void;
|
|
67
|
+
/** 连接到推送服务器并进行认证 */
|
|
68
|
+
connect(): Promise<void>;
|
|
69
|
+
/** 断开连接 */
|
|
70
|
+
disconnect(): void;
|
|
71
|
+
/** 发送认证消息 */
|
|
72
|
+
private authenticate;
|
|
73
|
+
/** 发送消息 */
|
|
74
|
+
private sendMessage;
|
|
75
|
+
/** 创建 WebSocket 实例 */
|
|
76
|
+
private createWebSocket;
|
|
77
|
+
/** 心跳保活 */
|
|
78
|
+
private startHeartbeat;
|
|
79
|
+
private stopHeartbeat;
|
|
80
|
+
/** 自动重连 */
|
|
81
|
+
private scheduleReconnect;
|
|
82
|
+
private clearReconnectTimer;
|
|
83
|
+
/** 重连后恢复订阅 */
|
|
84
|
+
private resubscribe;
|
|
85
|
+
/** 处理收到的消息 */
|
|
86
|
+
private handleMessage;
|
|
87
|
+
/** 内部订阅方法 */
|
|
88
|
+
private doSubscribe;
|
|
89
|
+
/** 内部退订方法 */
|
|
90
|
+
private doUnsubscribe;
|
|
91
|
+
/** 添加订阅记录 */
|
|
92
|
+
private addSubscription;
|
|
93
|
+
/** 移除订阅记录 */
|
|
94
|
+
private removeSubscription;
|
|
95
|
+
/** 订阅行情 */
|
|
96
|
+
subscribeQuote(symbols: string[]): void;
|
|
97
|
+
/** 退订行情 */
|
|
98
|
+
unsubscribeQuote(symbols?: string[]): void;
|
|
99
|
+
/** 订阅逐笔成交 */
|
|
100
|
+
subscribeTick(symbols: string[]): void;
|
|
101
|
+
/** 退订逐笔成交 */
|
|
102
|
+
unsubscribeTick(symbols?: string[]): void;
|
|
103
|
+
/** 订阅深度行情 */
|
|
104
|
+
subscribeDepth(symbols: string[]): void;
|
|
105
|
+
/** 退订深度行情 */
|
|
106
|
+
unsubscribeDepth(symbols?: string[]): void;
|
|
107
|
+
/** 订阅期权行情 */
|
|
108
|
+
subscribeOption(symbols: string[]): void;
|
|
109
|
+
/** 退订期权行情 */
|
|
110
|
+
unsubscribeOption(symbols?: string[]): void;
|
|
111
|
+
/** 订阅期货行情 */
|
|
112
|
+
subscribeFuture(symbols: string[]): void;
|
|
113
|
+
/** 退订期货行情 */
|
|
114
|
+
unsubscribeFuture(symbols?: string[]): void;
|
|
115
|
+
/** 订阅 K 线 */
|
|
116
|
+
subscribeKline(symbols: string[]): void;
|
|
117
|
+
/** 退订 K 线 */
|
|
118
|
+
unsubscribeKline(symbols?: string[]): void;
|
|
119
|
+
/** 订阅资产变动 */
|
|
120
|
+
subscribeAsset(account?: string): void;
|
|
121
|
+
/** 退订资产变动 */
|
|
122
|
+
unsubscribeAsset(): void;
|
|
123
|
+
/** 订阅持仓变动 */
|
|
124
|
+
subscribePosition(account?: string): void;
|
|
125
|
+
/** 退订持仓变动 */
|
|
126
|
+
unsubscribePosition(): void;
|
|
127
|
+
/** 订阅订单状态 */
|
|
128
|
+
subscribeOrder(account?: string): void;
|
|
129
|
+
/** 退订订单状态 */
|
|
130
|
+
unsubscribeOrder(): void;
|
|
131
|
+
/** 订阅成交明细 */
|
|
132
|
+
subscribeTransaction(account?: string): void;
|
|
133
|
+
/** 退订成交明细 */
|
|
134
|
+
unsubscribeTransaction(): void;
|
|
135
|
+
/** 获取当前行情订阅状态 */
|
|
136
|
+
getSubscriptions(): Map<SubjectType, string[]>;
|
|
137
|
+
/** 获取账户级别订阅状态 */
|
|
138
|
+
getAccountSubscriptions(): SubjectType[];
|
|
139
|
+
}
|