stock-sdk 1.10.0 → 2.0.0-beta.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.
Files changed (66) hide show
  1. package/README.md +198 -301
  2. package/dist/adapters-C0s5bM8O.d.cts +62 -0
  3. package/dist/adapters-C0s5bM8O.d.ts +62 -0
  4. package/dist/addIndicators-TPEcddTW.d.cts +524 -0
  5. package/dist/addIndicators-TPEcddTW.d.ts +524 -0
  6. package/dist/cache.cjs +1 -0
  7. package/dist/cache.d.cts +126 -0
  8. package/dist/cache.d.ts +126 -0
  9. package/dist/cache.js +1 -0
  10. package/dist/chunk-333W3ADG.js +1 -0
  11. package/dist/chunk-4Q7UQ5Q3.cjs +1 -0
  12. package/dist/chunk-4RR2H3DC.js +1 -0
  13. package/dist/chunk-4VDLQK6F.cjs +1 -0
  14. package/dist/chunk-66NWE54C.cjs +1 -0
  15. package/dist/chunk-6JEP4QK7.cjs +1 -0
  16. package/dist/chunk-BGZ4ZUAF.cjs +1 -0
  17. package/dist/chunk-DOOAXFSS.cjs +1 -0
  18. package/dist/chunk-HFN6G5M4.js +1 -0
  19. package/dist/chunk-JYHHLB34.js +1 -0
  20. package/dist/chunk-LAT6L2TO.js +1 -0
  21. package/dist/chunk-LRE63M2C.js +1 -0
  22. package/dist/chunk-NMRUSAWS.cjs +1 -0
  23. package/dist/chunk-PVSDXLQP.cjs +1 -0
  24. package/dist/chunk-SPLQXFFF.js +1 -0
  25. package/dist/chunk-SR7FGCVZ.cjs +1 -0
  26. package/dist/chunk-UBIQBXQ7.js +1 -0
  27. package/dist/chunk-WOT6VMZA.js +1 -0
  28. package/dist/chunk-XVLG3G7T.cjs +1 -0
  29. package/dist/chunk-ZAQ7DTRY.js +1 -0
  30. package/dist/cli.cjs +21 -0
  31. package/dist/cli.d.cts +1 -0
  32. package/dist/cli.d.ts +1 -0
  33. package/dist/cli.js +21 -0
  34. package/dist/errors.cjs +1 -0
  35. package/dist/errors.d.cts +1 -0
  36. package/dist/errors.d.ts +1 -0
  37. package/dist/errors.js +1 -0
  38. package/dist/index-B0PXWAkv.d.cts +198 -0
  39. package/dist/index-B0PXWAkv.d.ts +198 -0
  40. package/dist/index.cjs +1 -1
  41. package/dist/index.d.cts +54 -3652
  42. package/dist/index.d.ts +54 -3652
  43. package/dist/index.js +1 -1
  44. package/dist/indicators.cjs +1 -0
  45. package/dist/indicators.d.cts +358 -0
  46. package/dist/indicators.d.ts +358 -0
  47. package/dist/indicators.js +1 -0
  48. package/dist/mcp.cjs +5 -0
  49. package/dist/mcp.d.cts +93 -0
  50. package/dist/mcp.d.ts +93 -0
  51. package/dist/mcp.js +5 -0
  52. package/dist/screener.cjs +1 -0
  53. package/dist/screener.d.cts +69 -0
  54. package/dist/screener.d.ts +69 -0
  55. package/dist/screener.js +1 -0
  56. package/dist/sdk-CGd_HgIM.d.ts +2741 -0
  57. package/dist/sdk-C_Agv5AV.d.cts +2741 -0
  58. package/dist/signals.cjs +1 -0
  59. package/dist/signals.d.cts +60 -0
  60. package/dist/signals.d.ts +60 -0
  61. package/dist/signals.js +1 -0
  62. package/dist/symbols.cjs +1 -0
  63. package/dist/symbols.d.cts +28 -0
  64. package/dist/symbols.d.ts +28 -0
  65. package/dist/symbols.js +1 -0
  66. package/package.json +46 -4
@@ -0,0 +1,62 @@
1
+ /**
2
+ * 统一符号模型类型(v2 A1)
3
+ *
4
+ * 设计要点:
5
+ * - `string` 是一等公民,`SymbolRef` 是「带提示的 string」(其 code 也走 normalizeSymbol)
6
+ * - `NormalizedSymbol` 是 SDK 内部唯一表示,各 provider 适配器只认它
7
+ */
8
+ /** 交易区域 / 体系(GLOBAL = 海外期货/商品) */
9
+ type Market = 'CN' | 'HK' | 'US' | 'GLOBAL';
10
+ /** 资产类型 */
11
+ type AssetType = 'stock' | 'index' | 'fund' | 'bond' | 'futures' | 'option' | 'board';
12
+ /**
13
+ * 交易所 / 市场强判别字段。
14
+ * 股票:SSE/SZSE/BSE/HKEX/NASDAQ/NYSE/AMEX;
15
+ * 国内期货:SHFE/DCE/CZCE/INE/CFFEX/GFEX;海外期货:COMEX/NYMEX/CBOT/LME。
16
+ * 允许 string 兜底以容纳未来扩展。
17
+ */
18
+ type Exchange = 'SSE' | 'SZSE' | 'BSE' | 'HKEX' | 'NASDAQ' | 'NYSE' | 'AMEX' | 'US' | 'SHFE' | 'DCE' | 'CZCE' | 'INE' | 'CFFEX' | 'GFEX' | 'COMEX' | 'NYMEX' | 'CBOT' | 'LME' | (string & {});
19
+ /** 用户入参:裸 string,或「带提示的 string」对象 */
20
+ interface SymbolRef {
21
+ code: string;
22
+ market?: Market;
23
+ assetType?: AssetType;
24
+ exchange?: Exchange;
25
+ }
26
+ /** SDK 内部统一表示 */
27
+ interface NormalizedSymbol {
28
+ market: Market;
29
+ assetType: AssetType;
30
+ exchange: Exchange;
31
+ /** 纯代码,无前缀(如 '600519' / '00700' / 'AAPL' / 'IF2412') */
32
+ code: string;
33
+ /** 期货品种(如 'IF' / 'RB') */
34
+ variety?: string;
35
+ /** 原始入参,便于报错与调试 */
36
+ input: string;
37
+ }
38
+ /** API 接受的符号入参类型 */
39
+ type SymbolInput = string | SymbolRef;
40
+
41
+ declare function normalizeSymbol(input: SymbolInput, hint?: Partial<SymbolRef>): NormalizedSymbol;
42
+
43
+ /**
44
+ * Provider 符号适配器:NormalizedSymbol → 各数据源原生格式(纯函数)
45
+ *
46
+ * 仅覆盖股票/指数/基金/板块这类有明确 secid 体系的资产;期货/期权的 secid
47
+ * 体系不同(且由各自 provider 内联处理),这里对它们显式抛错而非静默兜底,
48
+ * 避免把海外期货误拼成美股 secid(105.xxx)这类隐蔽错误。
49
+ */
50
+
51
+ /**
52
+ * → 腾讯行情格式:sh600519 / sz000001 / bj920819 / hk00700 / usAAPL
53
+ */
54
+ declare function toTencentSymbol(ns: NormalizedSymbol): string;
55
+ /**
56
+ * → 东财 secid:1.600519 / 0.000001 / 116.00700 / 105.AAPL / 90.BK0475(板块)
57
+ */
58
+ declare function toEastmoneySecid(ns: NormalizedSymbol): string;
59
+ /** → 纯代码(去前缀) */
60
+ declare function toPlainCode(ns: NormalizedSymbol): string;
61
+
62
+ export { type AssetType as A, type Exchange as E, type Market as M, type NormalizedSymbol as N, type SymbolRef as S, type SymbolInput as a, toEastmoneySecid as b, toPlainCode as c, normalizeSymbol as n, toTencentSymbol as t };
@@ -0,0 +1,524 @@
1
+ /**
2
+ * 时间元信息工具
3
+ *
4
+ * 给行情/K线/分时等含时间字段的数据补充统一的 `timestamp` (UTC unix ms)
5
+ * 与 `tz` (IANA 时区名),让消费者无需自己根据各数据源的字符串格式做时区换算。
6
+ *
7
+ * 设计要点:
8
+ * - 不引入第三方时区库 (SDK 零依赖),通过 `Intl.DateTimeFormat` 计算时区偏移。
9
+ * - 兼容多种本地时间字符串格式 (yyyyMMddHHmmss / YYYY-MM-DD HH:mm:ss / YYYY-MM-DD HH:mm /
10
+ * YYYY-MM-DD / yyyyMMdd / HH:mm 配 baseDate)。
11
+ * - 解析失败/输入为空时 `timestamp` 为 `NaN`,调用方可用 `Number.isNaN` 检测。
12
+ */
13
+ /**
14
+ * 已支持的市场时区。沿用 IANA 时区名。
15
+ *
16
+ * - `Asia/Shanghai`: A 股 (沪深北)
17
+ * - `Asia/Hong_Kong`: 港股
18
+ * - `America/New_York`: 美股 (含夏令时切换)
19
+ */
20
+ declare const MARKET_TZ: {
21
+ readonly CN: "Asia/Shanghai";
22
+ readonly HK: "Asia/Hong_Kong";
23
+ readonly US: "America/New_York";
24
+ };
25
+ type MarketTz = (typeof MARKET_TZ)[keyof typeof MARKET_TZ];
26
+ /**
27
+ * 时间元信息:与原始 `time`/`date` 字符串配套使用。
28
+ */
29
+ interface TimeMeta {
30
+ /** UTC unix 毫秒时间戳。原始字符串无法解析时为 `null`。 */
31
+ timestamp: number | null;
32
+ /** 原始字符串对应的市场时区 (IANA name)。 */
33
+ tz: MarketTz;
34
+ }
35
+ /**
36
+ * 解析"市场本地时间字符串"为 UTC unix ms。失败返回 `NaN`。
37
+ *
38
+ * 支持的格式:
39
+ * - `'YYYY-MM-DD HH:mm:ss'` / `'YYYY-MM-DDTHH:mm:ss'`
40
+ * - `'YYYY-MM-DD HH:mm'`
41
+ * - `'YYYY-MM-DD'` (按当日 00:00 计)
42
+ * - `'yyyyMMddHHmmss'` (腾讯接口 14 位无分隔)
43
+ * - `'yyyyMMdd'` (8 位日期)
44
+ *
45
+ * @param local 市场本地时间字符串
46
+ * @param tz 市场时区 (使用 `MARKET_TZ`)
47
+ */
48
+ declare function parseMarketTime(local: string, tz: MarketTz): number;
49
+ declare function buildTimeMeta(local: string, tz: MarketTz): TimeMeta;
50
+ /**
51
+ * 将"基础日期 (YYYY-MM-DD) + HH:mm 时间片"组合后构造 `TimeMeta`。
52
+ *
53
+ * 用于"当日分时"等只返回 `HH:mm` 的接口。
54
+ *
55
+ * @param baseDate 形如 `'2024-05-12'` 的日期字符串
56
+ * @param hhmm 形如 `'09:30'` 或 `'09:30:00'` 的时间片
57
+ * @param tz 市场时区
58
+ */
59
+ declare function buildTimeMetaFromDateAndTime(baseDate: string, hhmm: string, tz: MarketTz): TimeMeta;
60
+ /**
61
+ * 把 UTC 毫秒时间戳格式化为指定时区的 `YYYY-MM-DD HH:mm` 本地壁钟字符串。
62
+ *
63
+ * 与 {@link parseMarketTime} 互逆:`formatInTz(parseMarketTime(s, tz), tz) === s`
64
+ * (只要 `s` 是 `YYYY-MM-DD HH:mm` 格式)。
65
+ *
66
+ * 用途:当上游接口返回的时间字符串使用 A 处时区表示,但业务需要在 B 处时区显示时
67
+ * (典型:东方财富的美股分时返回北京时间字符串,但用户需要美东时间),先用
68
+ * `parseMarketTime(s, MARKET_TZ.CN)` 拿到正确 epoch,再用本函数转成目标时区字符串。
69
+ *
70
+ * 使用 `Intl.DateTimeFormat` 处理夏令时;epoch 为 `NaN` 时返回空串。
71
+ */
72
+ declare function formatInTz(epoch: number | null, tz: MarketTz): string;
73
+
74
+ /**
75
+ * A 股历史 K 线(日/周/月)
76
+ */
77
+ interface HistoryKline {
78
+ /** 日期 YYYY-MM-DD (A 股时区) */
79
+ date: string;
80
+ /** 当日 00:00 (`Asia/Shanghai`) 的 UTC 毫秒时间戳;无法解析时为 `NaN` */
81
+ timestamp: number | null;
82
+ /** 日期所属市场时区 (`Asia/Shanghai`) */
83
+ tz: MarketTz;
84
+ /** 股票代码 */
85
+ code: string;
86
+ /** 开盘价 */
87
+ open: number | null;
88
+ /** 收盘价 */
89
+ close: number | null;
90
+ /** 最高价 */
91
+ high: number | null;
92
+ /** 最低价 */
93
+ low: number | null;
94
+ /** 成交量 */
95
+ volume: number | null;
96
+ /** 成交额 */
97
+ amount: number | null;
98
+ /** 振幅% */
99
+ amplitude: number | null;
100
+ /** 涨跌幅% */
101
+ changePercent: number | null;
102
+ /** 涨跌额 */
103
+ change: number | null;
104
+ /** 换手率% */
105
+ turnoverRate: number | null;
106
+ }
107
+ /**
108
+ * A 股分时数据(1 分钟)
109
+ */
110
+ interface MinuteTimeline {
111
+ /** 时间 YYYY-MM-DD HH:mm (A 股时区) */
112
+ time: string;
113
+ /** UTC 毫秒时间戳 (`Asia/Shanghai` 解释);无法解析时为 `NaN` */
114
+ timestamp: number | null;
115
+ /** 时间所属市场时区 (`Asia/Shanghai`) */
116
+ tz: MarketTz;
117
+ /** 开盘价 */
118
+ open: number | null;
119
+ /** 收盘价 */
120
+ close: number | null;
121
+ /** 最高价 */
122
+ high: number | null;
123
+ /** 最低价 */
124
+ low: number | null;
125
+ /** 成交量 */
126
+ volume: number | null;
127
+ /** 成交额 */
128
+ amount: number | null;
129
+ /** 均价 */
130
+ avgPrice: number | null;
131
+ }
132
+ /**
133
+ * A 股分钟 K 线(5/15/30/60)
134
+ */
135
+ interface MinuteKline {
136
+ /** 时间 YYYY-MM-DD HH:mm (A 股时区) */
137
+ time: string;
138
+ /** UTC 毫秒时间戳 (`Asia/Shanghai` 解释);无法解析时为 `NaN` */
139
+ timestamp: number | null;
140
+ /** 时间所属市场时区 (`Asia/Shanghai`) */
141
+ tz: MarketTz;
142
+ /** 开盘价 */
143
+ open: number | null;
144
+ /** 收盘价 */
145
+ close: number | null;
146
+ /** 最高价 */
147
+ high: number | null;
148
+ /** 最低价 */
149
+ low: number | null;
150
+ /** 成交量 */
151
+ volume: number | null;
152
+ /** 成交额 */
153
+ amount: number | null;
154
+ /** 振幅% */
155
+ amplitude: number | null;
156
+ /** 涨跌幅% */
157
+ changePercent: number | null;
158
+ /** 涨跌额 */
159
+ change: number | null;
160
+ /** 换手率% */
161
+ turnoverRate: number | null;
162
+ }
163
+ /**
164
+ * 当日分时项
165
+ */
166
+ interface TodayTimeline {
167
+ /** 时间 HH:mm (A 股时区) */
168
+ time: string;
169
+ /**
170
+ * UTC 毫秒时间戳。由所属 `TodayTimelineResponse.date` 与 `time` 拼接后,
171
+ * 按 `Asia/Shanghai` 解释得到;无法解析时为 `NaN`。
172
+ */
173
+ timestamp: number | null;
174
+ /** 时间所属市场时区 (`Asia/Shanghai`) */
175
+ tz: MarketTz;
176
+ /** 当前价 */
177
+ price: number;
178
+ /** 均价 */
179
+ avgPrice: number;
180
+ /** 累计成交量(股) */
181
+ volume: number;
182
+ /** 累计成交额(元) */
183
+ amount: number;
184
+ }
185
+ /**
186
+ * 当日分时响应
187
+ */
188
+ interface TodayTimelineResponse {
189
+ /** 股票代码 */
190
+ code: string;
191
+ /** 交易日期 YYYY-MM-DD (A 股时区) */
192
+ date: string;
193
+ /** 交易日 00:00 (`Asia/Shanghai`) 的 UTC 毫秒时间戳;无法解析时为 `NaN` */
194
+ timestamp: number | null;
195
+ /** 日期所属市场时区 (`Asia/Shanghai`) */
196
+ tz: MarketTz;
197
+ /**
198
+ * 昨收价
199
+ * - 由 SDK 解析腾讯接口的 `quoteFields[4]` 得到
200
+ * - 上游异常或接口未返回时可能为 `0` 或 `undefined`
201
+ */
202
+ preClose?: number;
203
+ /** 当日分时序列 */
204
+ data: TodayTimeline[];
205
+ }
206
+ /**
207
+ * 港股 / 美股历史 K 线公共字段。
208
+ *
209
+ * 内部基类,通常不直接使用。请用具体的 `HKHistoryKline` 或 `USHistoryKline`,
210
+ * 它们各自带本地化字段 (`currency` / `lotSize`)。
211
+ */
212
+ interface ForeignHistoryKlineBase {
213
+ /** 日期 YYYY-MM-DD (市场本地时区) */
214
+ date: string;
215
+ /** UTC 毫秒时间戳;无法解析时为 `NaN` */
216
+ timestamp: number | null;
217
+ /** 股票代码 */
218
+ code: string;
219
+ /** 股票名称 */
220
+ name: string;
221
+ /** 开盘价 */
222
+ open: number | null;
223
+ /** 收盘价 */
224
+ close: number | null;
225
+ /** 最高价 */
226
+ high: number | null;
227
+ /** 最低价 */
228
+ low: number | null;
229
+ /** 成交量 */
230
+ volume: number | null;
231
+ /** 成交额 */
232
+ amount: number | null;
233
+ /** 振幅% */
234
+ amplitude: number | null;
235
+ /** 涨跌幅% */
236
+ changePercent: number | null;
237
+ /** 涨跌额 */
238
+ change: number | null;
239
+ /** 换手率% */
240
+ turnoverRate: number | null;
241
+ }
242
+ /**
243
+ * 港股历史 K 线
244
+ *
245
+ * `currency` 固定 `'HKD'`,`tz` 固定 `'Asia/Hong_Kong'`。
246
+ * `lotSize`(每手股数)由 K 线接口本身不直接返回,目前为 `null`,
247
+ * 后续若数据源补齐再填充;如需港股每手股数请用 `getHKQuotes` 的 `lotSize` 字段。
248
+ */
249
+ interface HKHistoryKline extends ForeignHistoryKlineBase {
250
+ /** 时区 (`Asia/Hong_Kong`) */
251
+ tz: MarketTz;
252
+ /** 计价币种 (固定 `'HKD'`) */
253
+ currency: 'HKD';
254
+ /** 港股每手股数;K 线接口暂不返回,固定 `null` */
255
+ lotSize: number | null;
256
+ }
257
+ /**
258
+ * 美股历史 K 线
259
+ *
260
+ * `currency` 固定 `'USD'`,`tz` 固定 `'America/New_York'`(自动处理夏令时切换)。
261
+ * 不含盘前/盘后(extended hours)数据,仅常规交易时段。
262
+ */
263
+ interface USHistoryKline extends ForeignHistoryKlineBase {
264
+ /** 时区 (`America/New_York`,含夏令时) */
265
+ tz: MarketTz;
266
+ /** 计价币种 (固定 `'USD'`) */
267
+ currency: 'USD';
268
+ }
269
+ /**
270
+ * A 股 / 港股 / 美股历史 K 线的联合类型。
271
+ * 供指标计算等需要统一约束「任意市场历史 K 线」的通用逻辑使用。
272
+ */
273
+ type AnyHistoryKline = HistoryKline | HKHistoryKline | USHistoryKline;
274
+ /**
275
+ * 港股分钟 K 线(5/15/30/60;v1.10.0+)
276
+ *
277
+ * 字段与 A 股 {@link MinuteKline} 同结构,额外携带 `currency` / `code`。
278
+ * `tz` 固定为 `'Asia/Hong_Kong'`。
279
+ */
280
+ interface HKMinuteKline extends Omit<MinuteKline, 'tz'> {
281
+ tz: MarketTz;
282
+ currency: 'HKD';
283
+ code: string;
284
+ }
285
+ /**
286
+ * 港股当日分时(1 分钟;v1.10.0+)
287
+ *
288
+ * `tz` 固定为 `'Asia/Hong_Kong'`。
289
+ */
290
+ interface HKMinuteTimeline extends Omit<MinuteTimeline, 'tz'> {
291
+ tz: MarketTz;
292
+ currency: 'HKD';
293
+ code: string;
294
+ }
295
+ /**
296
+ * 美股分钟 K 线(5/15/30/60;v1.10.0+)
297
+ *
298
+ * `tz` 固定为 `'America/New_York'`(含夏令时切换)。
299
+ * 不含盘前 / 盘后数据,仅常规交易时段。
300
+ */
301
+ interface USMinuteKline extends Omit<MinuteKline, 'tz'> {
302
+ tz: MarketTz;
303
+ currency: 'USD';
304
+ code: string;
305
+ }
306
+ /**
307
+ * 美股当日分时(1 分钟;v1.10.0+)
308
+ *
309
+ * `tz` 固定为 `'America/New_York'`。
310
+ */
311
+ interface USMinuteTimeline extends Omit<MinuteTimeline, 'tz'> {
312
+ tz: MarketTz;
313
+ currency: 'USD';
314
+ code: string;
315
+ }
316
+
317
+ interface OHLCV {
318
+ open: number | null;
319
+ high: number | null;
320
+ low: number | null;
321
+ close: number | null;
322
+ volume?: number | null;
323
+ }
324
+ interface MAOptions {
325
+ /** 均线周期数组,默认 [5, 10, 20, 30, 60, 120, 250] */
326
+ periods?: number[];
327
+ /** 均线类型:'sma'(简单) | 'ema'(指数) | 'wma'(加权),默认 'sma' */
328
+ type?: 'sma' | 'ema' | 'wma';
329
+ }
330
+ interface MACDOptions {
331
+ /** 短期 EMA 周期,默认 12 */
332
+ short?: number;
333
+ /** 长期 EMA 周期,默认 26 */
334
+ long?: number;
335
+ /** 信号线 EMA 周期,默认 9 */
336
+ signal?: number;
337
+ }
338
+ interface BOLLOptions {
339
+ /** 均线周期,默认 20 */
340
+ period?: number;
341
+ /** 标准差倍数,默认 2 */
342
+ stdDev?: number;
343
+ }
344
+ interface KDJOptions {
345
+ /** RSV 周期,默认 9 */
346
+ period?: number;
347
+ /** K 值平滑周期,默认 3 */
348
+ kPeriod?: number;
349
+ /** D 值平滑周期,默认 3 */
350
+ dPeriod?: number;
351
+ }
352
+ interface RSIOptions {
353
+ /** RSI 周期数组,默认 [6, 12, 24] */
354
+ periods?: number[];
355
+ }
356
+ interface WROptions {
357
+ /** WR 周期数组,默认 [6, 10] */
358
+ periods?: number[];
359
+ }
360
+ interface BIASOptions {
361
+ /** BIAS 周期数组,默认 [6, 12, 24] */
362
+ periods?: number[];
363
+ }
364
+ interface CCIOptions {
365
+ /** CCI 周期,默认 14 */
366
+ period?: number;
367
+ }
368
+ interface ATROptions {
369
+ /** ATR 周期,默认 14 */
370
+ period?: number;
371
+ }
372
+ interface IndicatorOptions {
373
+ ma?: MAOptions | boolean;
374
+ macd?: MACDOptions | boolean;
375
+ boll?: BOLLOptions | boolean;
376
+ kdj?: KDJOptions | boolean;
377
+ rsi?: RSIOptions | boolean;
378
+ wr?: WROptions | boolean;
379
+ bias?: BIASOptions | boolean;
380
+ cci?: CCIOptions | boolean;
381
+ atr?: ATROptions | boolean;
382
+ obv?: OBVOptions | boolean;
383
+ roc?: ROCOptions | boolean;
384
+ dmi?: DMIOptions | boolean;
385
+ sar?: SAROptions | boolean;
386
+ kc?: KCOptions | boolean;
387
+ }
388
+ interface MAResult {
389
+ [key: string]: number | null;
390
+ }
391
+ interface MACDResult {
392
+ dif: number | null;
393
+ dea: number | null;
394
+ macd: number | null;
395
+ }
396
+ interface BOLLResult {
397
+ mid: number | null;
398
+ upper: number | null;
399
+ lower: number | null;
400
+ bandwidth: number | null;
401
+ }
402
+ interface KDJResult {
403
+ k: number | null;
404
+ d: number | null;
405
+ j: number | null;
406
+ }
407
+ interface RSIResult {
408
+ [key: string]: number | null;
409
+ }
410
+ interface WRResult {
411
+ [key: string]: number | null;
412
+ }
413
+ interface BIASResult {
414
+ [key: string]: number | null;
415
+ }
416
+ interface CCIResult {
417
+ cci: number | null;
418
+ }
419
+ interface ATRResult {
420
+ /** 真实波幅 */
421
+ tr: number | null;
422
+ /** 平均真实波幅 */
423
+ atr: number | null;
424
+ }
425
+ interface OBVOptions {
426
+ /** OBV 均线周期 */
427
+ maPeriod?: number;
428
+ }
429
+ interface OBVResult {
430
+ /** OBV 值 */
431
+ obv: number | null;
432
+ /** OBV 均线 */
433
+ obvMa: number | null;
434
+ }
435
+ interface ROCOptions {
436
+ /** ROC 周期,默认 12 */
437
+ period?: number;
438
+ /** 信号线周期 */
439
+ signalPeriod?: number;
440
+ }
441
+ interface ROCResult {
442
+ /** ROC 值(百分比) */
443
+ roc: number | null;
444
+ /** 信号线 */
445
+ signal: number | null;
446
+ }
447
+ interface DMIOptions {
448
+ /** 周期,默认 14 */
449
+ period?: number;
450
+ /** ADX 平滑周期 */
451
+ adxPeriod?: number;
452
+ }
453
+ interface DMIResult {
454
+ /** +DI 值 */
455
+ pdi: number | null;
456
+ /** -DI 值 */
457
+ mdi: number | null;
458
+ /** ADX 值 */
459
+ adx: number | null;
460
+ /** ADXR 值 */
461
+ adxr: number | null;
462
+ }
463
+ interface SAROptions {
464
+ /** 加速因子初始值,默认 0.02 */
465
+ afStart?: number;
466
+ /** 加速因子增量,默认 0.02 */
467
+ afIncrement?: number;
468
+ /** 加速因子最大值,默认 0.2 */
469
+ afMax?: number;
470
+ }
471
+ interface SARResult {
472
+ /** SAR 值 */
473
+ sar: number | null;
474
+ /** 趋势方向:1 上升,-1 下降 */
475
+ trend: 1 | -1 | null;
476
+ /** 极值点 */
477
+ ep: number | null;
478
+ /** 加速因子 */
479
+ af: number | null;
480
+ }
481
+ interface KCOptions {
482
+ /** EMA 周期,默认 20 */
483
+ emaPeriod?: number;
484
+ /** ATR 周期,默认 10 */
485
+ atrPeriod?: number;
486
+ /** ATR 倍数,默认 2 */
487
+ multiplier?: number;
488
+ }
489
+ interface KCResult {
490
+ /** 中轨(EMA) */
491
+ mid: number | null;
492
+ /** 上轨 */
493
+ upper: number | null;
494
+ /** 下轨 */
495
+ lower: number | null;
496
+ /** 通道宽度 */
497
+ width: number | null;
498
+ }
499
+
500
+ /**
501
+ * 带技术指标的 K 线数据
502
+ */
503
+ type KlineWithIndicators<T extends AnyHistoryKline> = T & {
504
+ ma?: MAResult;
505
+ macd?: MACDResult;
506
+ boll?: BOLLResult;
507
+ kdj?: KDJResult;
508
+ rsi?: RSIResult;
509
+ wr?: WRResult;
510
+ bias?: BIASResult;
511
+ cci?: CCIResult;
512
+ atr?: ATRResult;
513
+ obv?: OBVResult;
514
+ roc?: ROCResult;
515
+ dmi?: DMIResult;
516
+ sar?: SARResult;
517
+ kc?: KCResult;
518
+ };
519
+ /**
520
+ * 为 K 线数据添加技术指标
521
+ */
522
+ declare function addIndicators<T extends AnyHistoryKline>(klines: T[], options?: IndicatorOptions): KlineWithIndicators<T>[];
523
+
524
+ export { type AnyHistoryKline as A, type BOLLOptions as B, type CCIOptions as C, type DMIOptions as D, type USMinuteTimeline as E, type MAResult as F, type MACDResult as G, type HistoryKline as H, type IndicatorOptions as I, type BOLLResult as J, type KlineWithIndicators as K, type OHLCV as L, type MAOptions as M, type KDJResult as N, type OBVOptions as O, type RSIResult as P, type WRResult as Q, type RSIOptions as R, type SAROptions as S, type TimeMeta as T, type USHistoryKline as U, type BIASResult as V, type WROptions as W, type CCIResult as X, type ATRResult as Y, addIndicators as a, type MACDOptions as b, type KDJOptions as c, type BIASOptions as d, type ATROptions as e, type OBVResult as f, type ROCOptions as g, type ROCResult as h, type DMIResult as i, type SARResult as j, type KCOptions as k, type KCResult as l, MARKET_TZ as m, type MarketTz as n, buildTimeMeta as o, parseMarketTime as p, buildTimeMetaFromDateAndTime as q, formatInTz as r, type MinuteTimeline as s, type MinuteKline as t, type TodayTimeline as u, type TodayTimelineResponse as v, type HKHistoryKline as w, type HKMinuteKline as x, type HKMinuteTimeline as y, type USMinuteKline as z };