stock-sdk 2.2.2 → 2.3.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/README.md +4 -1
- package/dist/chip-BbA23rr1.d.cts +113 -0
- package/dist/chip-BbA23rr1.d.ts +113 -0
- package/dist/chunk-3ASJZ3YA.js +1 -0
- package/dist/chunk-6IFA2HGD.cjs +1 -0
- package/dist/chunk-IWHFCLJM.js +1 -0
- package/dist/chunk-LMUFSVKQ.cjs +1 -0
- package/dist/chunk-QGYIBFXP.js +1 -0
- package/dist/chunk-ZESMWMHP.cjs +1 -0
- package/dist/cli.cjs +6 -6
- package/dist/cli.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/indicators.cjs +1 -1
- package/dist/indicators.d.cts +1 -0
- package/dist/indicators.d.ts +1 -0
- package/dist/indicators.js +1 -1
- package/dist/mcp.cjs +2 -2
- package/dist/mcp.d.cts +2 -1
- package/dist/mcp.d.ts +2 -1
- package/dist/mcp.js +1 -1
- package/dist/{sdk-BOfyUDzu.d.cts → sdk-6Qozazec.d.cts} +133 -5
- package/dist/{sdk-CmYFd7V2.d.ts → sdk-CtqVdrof.d.ts} +133 -5
- package/package.json +1 -1
- package/dist/chunk-3VUFYFFD.js +0 -1
- package/dist/chunk-6ZSZEHZW.js +0 -1
- package/dist/chunk-EDUJJOAJ.js +0 -1
- package/dist/chunk-JP3ZPNWP.cjs +0 -1
- package/dist/chunk-KKGWFS2M.cjs +0 -1
- package/dist/chunk-USK6JHLG.cjs +0 -1
package/README.md
CHANGED
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
- ✅ **统一符号模型**:`string` 一等公民,`sh600519` / `600519` / `600519.SH` / `00700` / `hk00700` / `AAPL` / `105.AAPL` 等写法容错解析;支持中证等特殊指数(`930955` / `H30533` / `HSHCI` / `GDAXI`,[详见符号指南](https://stock-sdk.linkdiary.cn/guide/symbols.html))
|
|
62
62
|
- ✅ **A 股 / 港股 / 美股 / 公募基金**实时行情、历史 K 线(日/周/月)、分钟 K 线(1/5/15/30/60)、当日分时
|
|
63
63
|
- ✅ **技术指标**:MA / MACD / BOLL / KDJ / RSI / WR / BIAS / CCI / ATR / OBV / ROC / DMI / SAR / KC
|
|
64
|
+
- ✅ **筹码分布(CYQ)**:`sdk.chips.cn/hk/us` 获利比例 / 平均成本 / 90-70 成本区间与集中度 / 筹码峰直方图(东财算法本地计算,零新增数据源)
|
|
64
65
|
- ✅ **信号 / 选股 / 回测**:`calcSignals`(金叉死叉/超买超卖等事件识别)、链式选股器、本地回测
|
|
65
66
|
- ✅ **期货 / 期权 / 资金流 / 龙虎榜 / 北向 / 大宗交易 / 融资融券 / 涨停板** 等全套扩展数据
|
|
66
67
|
- ✅ **基金深度数据**:历史净值、实时估值、同类排名走势、基金/ETF 分红送配、**主题基金**
|
|
@@ -241,6 +242,7 @@ import { SdkError, isSdkError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
|
241
242
|
| 实时行情 | ✅ | ✅ | ✅ | ✅ | ✅ 全球期货 | ✅ ETF / 中金所 / 商品 |
|
|
242
243
|
| 历史 K 线(日/周/月) | ✅ | ✅ | ✅ | ⚠️ 场内 ETF/LOF | ✅ 国内 + 全球 | ✅ |
|
|
243
244
|
| 分钟 K 线(5/15/30/60) | ✅ | ✅ `kline.hkMinute` | ✅ `kline.usMinute` | ⚠️ 场内 ETF/LOF | ❌ | ❌ |
|
|
245
|
+
| 筹码分布(CYQ) | ✅ `chips.cn` | ✅ `chips.hk` | ✅ `chips.us` | — | — | — |
|
|
244
246
|
| 当日分时(1 分钟) | ✅ `quotes.timeline` | ✅ `kline.hkMinute`(period='1') | ✅ `kline.usMinute`(period='1') | ⚠️ 场内 ETF/LOF | ❌ | ✅ ETF 期权 |
|
|
245
247
|
| 分红派送 | ✅ | ❌ | ❌ | ✅ 基金 + ETF | — | — |
|
|
246
248
|
| 资金流向 | ✅ 个股/大盘/排名/板块 | ❌ | ❌ | — | — | — |
|
|
@@ -267,12 +269,13 @@ import { SdkError, isSdkError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
|
267
269
|
| `sdk.codes` | `.cn` / `.us` / `.hk` / `.fund` |
|
|
268
270
|
| `sdk.batch` | `.cn` / `.hk` / `.us` / `.byCodes` / `.raw` |
|
|
269
271
|
| `sdk.kline` | `.cn` / `.cnMinute` / `.hk` / `.hkMinute` / `.us` / `.usMinute` / `.withIndicators` |
|
|
272
|
+
| `sdk.chips` | `.cn` / `.hk` / `.us`(筹码分布:获利比例 / 平均成本 / 成本区间 / 筹码峰) |
|
|
270
273
|
| `sdk.board` | `.industry.*` / `.concept.*`(`list` / `spot` / `constituents` / `kline` / `minuteKline`) |
|
|
271
274
|
| `sdk.options` | `.index.*` / `.etf.*` / `.commodity.*` / `.cffex.*` / `.lhb` |
|
|
272
275
|
| `sdk.futures` | `.kline` / `.globalSpot` / `.globalKline` / `.inventory` / `.comexInventory` … |
|
|
273
276
|
| `sdk.fundFlow` | `.individual` / `.market` / `.rank` / `.sectorRank` / `.sectorHistory` |
|
|
274
277
|
| `sdk.northbound` | `.minute` / `.summary` / `.holdingRank` / `.history` / `.individual` |
|
|
275
|
-
| `sdk.marketEvent` | `.ztPool` / `.stockChanges` / `.boardChanges` |
|
|
278
|
+
| `sdk.marketEvent` | `.ztPool` / `.stockChanges`(支持多类型 / `'all'`) / `.boardChanges` / `.individualChanges` / `.individualChangesHistory`(个股异动) |
|
|
276
279
|
| `sdk.dragonTiger` | `.detail` / `.stockStats` / `.institution` / `.branchRank` / `.seatDetail` |
|
|
277
280
|
| `sdk.blockTrade` / `sdk.margin` | 大宗交易 / 融资融券 |
|
|
278
281
|
| `sdk.fund` | `.dividendList` / `.navHistory` / `.estimate` / `.rankHistory` / `.theme` |
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 筹码计算所需的最小 K 线形状:SDK 的 A 股 / 港股 / 美股历史日 K 线
|
|
3
|
+
* (`HistoryKline` / `HKHistoryKline` / `USHistoryKline`)均满足。
|
|
4
|
+
*/
|
|
5
|
+
interface ChipKlineLike {
|
|
6
|
+
/** 日期 YYYY-MM-DD(或任意可标识该 bar 的字符串,原样透传到输出行) */
|
|
7
|
+
date: string;
|
|
8
|
+
/** 开盘价 */
|
|
9
|
+
open: number | null;
|
|
10
|
+
/** 最高价 */
|
|
11
|
+
high: number | null;
|
|
12
|
+
/** 最低价 */
|
|
13
|
+
low: number | null;
|
|
14
|
+
/** 收盘价 */
|
|
15
|
+
close: number | null;
|
|
16
|
+
/** 换手率 % */
|
|
17
|
+
turnoverRate: number | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 筹码峰直方图(单日分布形状)
|
|
21
|
+
*/
|
|
22
|
+
interface ChipHistogram {
|
|
23
|
+
/** 价格档(150 档,低 → 高,已按原算法保留 2 位小数) */
|
|
24
|
+
prices: number[];
|
|
25
|
+
/** 各价格档筹码占比(0..1,总和 ≈ 1;按 6 位小数舍入) */
|
|
26
|
+
ratios: number[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `calcChipDistribution` 配置
|
|
30
|
+
*/
|
|
31
|
+
interface ChipDistributionOptions {
|
|
32
|
+
/**
|
|
33
|
+
* 分布回看窗口(根)。每日分布只由最近 `range` 根 K 线推演。
|
|
34
|
+
*
|
|
35
|
+
* - `120`(默认):与东财 App / 网页筹码分布的显示口径一致;
|
|
36
|
+
* - `0`:从序列首根全量累计(akshare `stock_cyq_em` 的口径)。
|
|
37
|
+
* 注意该模式下每行成本为 O(序列长度),长序列请配合 {@link tail}。
|
|
38
|
+
*
|
|
39
|
+
* @default 120
|
|
40
|
+
*/
|
|
41
|
+
range?: number;
|
|
42
|
+
/**
|
|
43
|
+
* 仅对输入序列**最后 `tail` 根**产出统计行(输出长度 = min(tail, 输入长度))。
|
|
44
|
+
* 前面的 bar 仍参与分布推演,只是不生成输出行 —— 用于「取足暖机数据、
|
|
45
|
+
* 只要尾部结果」的场景,避免 `range: 0` + 长序列时的 O(N²) 全量计算。
|
|
46
|
+
* 不传时对每根输入 bar 都产出统计行;`tail <= 0` 或 `NaN` 输出空数组,
|
|
47
|
+
* 非整数向下取整,`Infinity` 等价于不传(输出全部行)。
|
|
48
|
+
*/
|
|
49
|
+
tail?: number;
|
|
50
|
+
/**
|
|
51
|
+
* 是否在输出行上附带筹码峰直方图:
|
|
52
|
+
* - `false`(默认):不附带;
|
|
53
|
+
* - `'last'` 或 `true`:仅最后一行附带(看「当前筹码峰」的常见场景);
|
|
54
|
+
* - `'all'`:每行都附带(数据量为 每行 150 档 × 2 数组,注意体积)。
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
includeHistogram?: boolean | 'last' | 'all';
|
|
59
|
+
/**
|
|
60
|
+
* 比例类字段(获利比例 / 集中度)的输出舍入小数位。
|
|
61
|
+
* 价格类字段(平均成本 / 90-70 成本区间)固定 2 位小数(原算法口径),不受此项影响。
|
|
62
|
+
*
|
|
63
|
+
* @default 3
|
|
64
|
+
*/
|
|
65
|
+
decimals?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 单日筹码分布统计(字段口径与 akshare `stock_cyq_em` 输出对齐)
|
|
69
|
+
*/
|
|
70
|
+
interface ChipDistributionItem {
|
|
71
|
+
/** 日期(透传输入 bar 的 date) */
|
|
72
|
+
date: string;
|
|
73
|
+
/** 获利比例 0..1(收盘价之下的筹码占比);收盘价缺失或分布退化时为 null */
|
|
74
|
+
profitRatio: number | null;
|
|
75
|
+
/** 平均成本(元,累计 50% 筹码处的价格,即中位数成本 —— 东财「平均成本」口径) */
|
|
76
|
+
avgCost: number | null;
|
|
77
|
+
/** 90% 筹码成本区间下沿(元) */
|
|
78
|
+
cost90Low: number | null;
|
|
79
|
+
/** 90% 筹码成本区间上沿(元) */
|
|
80
|
+
cost90High: number | null;
|
|
81
|
+
/** 90% 筹码集中度 (高-低)/(高+低) */
|
|
82
|
+
concentration90: number | null;
|
|
83
|
+
/** 70% 筹码成本区间下沿(元) */
|
|
84
|
+
cost70Low: number | null;
|
|
85
|
+
/** 70% 筹码成本区间上沿(元) */
|
|
86
|
+
cost70High: number | null;
|
|
87
|
+
/** 70% 筹码集中度 */
|
|
88
|
+
concentration70: number | null;
|
|
89
|
+
/** 筹码峰直方图(按 includeHistogram 配置附带) */
|
|
90
|
+
histogram?: ChipHistogram;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 计算筹码分布(纯函数,零网络)。
|
|
94
|
+
*
|
|
95
|
+
* 输入通常为**日 K 线**(需含换手率;SDK 的 `kline.cn` / `kline.hk` / `kline.us`
|
|
96
|
+
* 返回值可直接使用)。对输入的每根 bar(或 `tail` 限定的尾部)输出一行统计。
|
|
97
|
+
*
|
|
98
|
+
* 口径说明:
|
|
99
|
+
* - `range` 默认 120(东财 App 显示口径);`range: 0` 为 akshare 全量累计口径,
|
|
100
|
+
* 两者数值不同,对拍 akshare 输出时请显式传 `range: 0`;
|
|
101
|
+
* - 复权方式由调用方在取 K 线时决定,分布数值随复权口径变化;
|
|
102
|
+
* - 换手率缺失(null)的 bar 按 0 换手处理(沿用东财 `hsl/100 || 0` 语义);
|
|
103
|
+
* OHLC 含 null 的脏行整体跳过,不贡献分布;
|
|
104
|
+
* - 窗口内累计换手极低(如长期停牌 / 仙股)时分布主要由窗口首日堆叠决定,
|
|
105
|
+
* 参考价值有限;指数 / 无换手率概念的品种不适用本模型。
|
|
106
|
+
*
|
|
107
|
+
* @param klines - K 线序列(按时间升序)
|
|
108
|
+
* @param options - 见 {@link ChipDistributionOptions}
|
|
109
|
+
* @returns 每日筹码分布统计(与输入尾部 bar 一一对应)
|
|
110
|
+
*/
|
|
111
|
+
declare function calcChipDistribution(klines: ChipKlineLike[], options?: ChipDistributionOptions): ChipDistributionItem[];
|
|
112
|
+
|
|
113
|
+
export { type ChipKlineLike as C, type ChipHistogram as a, type ChipDistributionOptions as b, calcChipDistribution as c, type ChipDistributionItem as d };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 筹码计算所需的最小 K 线形状:SDK 的 A 股 / 港股 / 美股历史日 K 线
|
|
3
|
+
* (`HistoryKline` / `HKHistoryKline` / `USHistoryKline`)均满足。
|
|
4
|
+
*/
|
|
5
|
+
interface ChipKlineLike {
|
|
6
|
+
/** 日期 YYYY-MM-DD(或任意可标识该 bar 的字符串,原样透传到输出行) */
|
|
7
|
+
date: string;
|
|
8
|
+
/** 开盘价 */
|
|
9
|
+
open: number | null;
|
|
10
|
+
/** 最高价 */
|
|
11
|
+
high: number | null;
|
|
12
|
+
/** 最低价 */
|
|
13
|
+
low: number | null;
|
|
14
|
+
/** 收盘价 */
|
|
15
|
+
close: number | null;
|
|
16
|
+
/** 换手率 % */
|
|
17
|
+
turnoverRate: number | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 筹码峰直方图(单日分布形状)
|
|
21
|
+
*/
|
|
22
|
+
interface ChipHistogram {
|
|
23
|
+
/** 价格档(150 档,低 → 高,已按原算法保留 2 位小数) */
|
|
24
|
+
prices: number[];
|
|
25
|
+
/** 各价格档筹码占比(0..1,总和 ≈ 1;按 6 位小数舍入) */
|
|
26
|
+
ratios: number[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `calcChipDistribution` 配置
|
|
30
|
+
*/
|
|
31
|
+
interface ChipDistributionOptions {
|
|
32
|
+
/**
|
|
33
|
+
* 分布回看窗口(根)。每日分布只由最近 `range` 根 K 线推演。
|
|
34
|
+
*
|
|
35
|
+
* - `120`(默认):与东财 App / 网页筹码分布的显示口径一致;
|
|
36
|
+
* - `0`:从序列首根全量累计(akshare `stock_cyq_em` 的口径)。
|
|
37
|
+
* 注意该模式下每行成本为 O(序列长度),长序列请配合 {@link tail}。
|
|
38
|
+
*
|
|
39
|
+
* @default 120
|
|
40
|
+
*/
|
|
41
|
+
range?: number;
|
|
42
|
+
/**
|
|
43
|
+
* 仅对输入序列**最后 `tail` 根**产出统计行(输出长度 = min(tail, 输入长度))。
|
|
44
|
+
* 前面的 bar 仍参与分布推演,只是不生成输出行 —— 用于「取足暖机数据、
|
|
45
|
+
* 只要尾部结果」的场景,避免 `range: 0` + 长序列时的 O(N²) 全量计算。
|
|
46
|
+
* 不传时对每根输入 bar 都产出统计行;`tail <= 0` 或 `NaN` 输出空数组,
|
|
47
|
+
* 非整数向下取整,`Infinity` 等价于不传(输出全部行)。
|
|
48
|
+
*/
|
|
49
|
+
tail?: number;
|
|
50
|
+
/**
|
|
51
|
+
* 是否在输出行上附带筹码峰直方图:
|
|
52
|
+
* - `false`(默认):不附带;
|
|
53
|
+
* - `'last'` 或 `true`:仅最后一行附带(看「当前筹码峰」的常见场景);
|
|
54
|
+
* - `'all'`:每行都附带(数据量为 每行 150 档 × 2 数组,注意体积)。
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
includeHistogram?: boolean | 'last' | 'all';
|
|
59
|
+
/**
|
|
60
|
+
* 比例类字段(获利比例 / 集中度)的输出舍入小数位。
|
|
61
|
+
* 价格类字段(平均成本 / 90-70 成本区间)固定 2 位小数(原算法口径),不受此项影响。
|
|
62
|
+
*
|
|
63
|
+
* @default 3
|
|
64
|
+
*/
|
|
65
|
+
decimals?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 单日筹码分布统计(字段口径与 akshare `stock_cyq_em` 输出对齐)
|
|
69
|
+
*/
|
|
70
|
+
interface ChipDistributionItem {
|
|
71
|
+
/** 日期(透传输入 bar 的 date) */
|
|
72
|
+
date: string;
|
|
73
|
+
/** 获利比例 0..1(收盘价之下的筹码占比);收盘价缺失或分布退化时为 null */
|
|
74
|
+
profitRatio: number | null;
|
|
75
|
+
/** 平均成本(元,累计 50% 筹码处的价格,即中位数成本 —— 东财「平均成本」口径) */
|
|
76
|
+
avgCost: number | null;
|
|
77
|
+
/** 90% 筹码成本区间下沿(元) */
|
|
78
|
+
cost90Low: number | null;
|
|
79
|
+
/** 90% 筹码成本区间上沿(元) */
|
|
80
|
+
cost90High: number | null;
|
|
81
|
+
/** 90% 筹码集中度 (高-低)/(高+低) */
|
|
82
|
+
concentration90: number | null;
|
|
83
|
+
/** 70% 筹码成本区间下沿(元) */
|
|
84
|
+
cost70Low: number | null;
|
|
85
|
+
/** 70% 筹码成本区间上沿(元) */
|
|
86
|
+
cost70High: number | null;
|
|
87
|
+
/** 70% 筹码集中度 */
|
|
88
|
+
concentration70: number | null;
|
|
89
|
+
/** 筹码峰直方图(按 includeHistogram 配置附带) */
|
|
90
|
+
histogram?: ChipHistogram;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 计算筹码分布(纯函数,零网络)。
|
|
94
|
+
*
|
|
95
|
+
* 输入通常为**日 K 线**(需含换手率;SDK 的 `kline.cn` / `kline.hk` / `kline.us`
|
|
96
|
+
* 返回值可直接使用)。对输入的每根 bar(或 `tail` 限定的尾部)输出一行统计。
|
|
97
|
+
*
|
|
98
|
+
* 口径说明:
|
|
99
|
+
* - `range` 默认 120(东财 App 显示口径);`range: 0` 为 akshare 全量累计口径,
|
|
100
|
+
* 两者数值不同,对拍 akshare 输出时请显式传 `range: 0`;
|
|
101
|
+
* - 复权方式由调用方在取 K 线时决定,分布数值随复权口径变化;
|
|
102
|
+
* - 换手率缺失(null)的 bar 按 0 换手处理(沿用东财 `hsl/100 || 0` 语义);
|
|
103
|
+
* OHLC 含 null 的脏行整体跳过,不贡献分布;
|
|
104
|
+
* - 窗口内累计换手极低(如长期停牌 / 仙股)时分布主要由窗口首日堆叠决定,
|
|
105
|
+
* 参考价值有限;指数 / 无换手率概念的品种不适用本模型。
|
|
106
|
+
*
|
|
107
|
+
* @param klines - K 线序列(按时间升序)
|
|
108
|
+
* @param options - 见 {@link ChipDistributionOptions}
|
|
109
|
+
* @returns 每日筹码分布统计(与输入尾部 bar 一一对应)
|
|
110
|
+
*/
|
|
111
|
+
declare function calcChipDistribution(klines: ChipKlineLike[], options?: ChipDistributionOptions): ChipDistributionItem[];
|
|
112
|
+
|
|
113
|
+
export { type ChipKlineLike as C, type ChipHistogram as a, type ChipDistributionOptions as b, calcChipDistribution as c, type ChipDistributionItem as d };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as Un,u as Kn,w as Bn,x as ft}from"./chunk-QGYIBFXP.js";import{d as gt,e as Q,f as wn,g as xn,i as W}from"./chunk-ZZ2IBUMV.js";import{b as re}from"./chunk-DU7MCVLJ.js";import{a as P,b as G,c as ee,d as ct,e as R,f as dt,g as pt,h as mt,k as te,l as He}from"./chunk-UBIQBXQ7.js";import{a as lt}from"./chunk-WOT6VMZA.js";function yt(t){return new TextDecoder("gbk").decode(t)}function ht(t){let e=t.split(";").map(r=>r.trim()).filter(Boolean),n=[];for(let r of e){let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim();i.startsWith("v_")&&(i=i.slice(2));let s=r.slice(o+1).trim();s.startsWith('"')&&s.endsWith('"')&&(s=s.slice(1,-1));let a=s.split("~");n.push({key:i,fields:a})}return n}function Tt(t){let e=t.trim();return e===""||e==="-"||e==="--"}function T(t){if(!t||t==="")return 0;let e=parseFloat(t);return Number.isNaN(e)?0:e}function O(t){if(!t||Tt(t))return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function y(t){if(!t||Tt(t))return null;let e=parseFloat(t);return Number.isNaN(e)?null:e}function u(t){return t==null?null:y(String(t))}function _(t){if(t==null)return null;if(typeof t=="number")return Number.isFinite(t)?t:null;if(Tt(t))return null;let e=Number(t);return Number.isFinite(e)?e:null}var ri=new Set(["daily","weekly","monthly"]),oi=new Set(["1","5","15","30","60"]),ii=new Set(["","qfq","hfq"]);function V(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)throw new R(`${e} must be a positive integer`,{argument:e,value:t})}function z(t){if(!ri.has(t))throw new R("period must be one of: daily, weekly, monthly",{argument:"period",value:t})}function St(t){if(!oi.has(t))throw new R("period must be one of: 1, 5, 15, 30, 60",{argument:"period",value:t})}function X(t){if(!ii.has(t))throw new R("adjust must be one of: '', 'qfq', 'hfq'",{argument:"adjust",value:t})}function qe(t){if(t!=="north"&&t!=="south")throw new R("direction must be one of: 'north', 'south'",{argument:"direction",value:t})}function me(t,e){V(e,"chunkSize");let n=[];for(let r=0;r<t.length;r+=e)n.push(t.slice(r,r+e));return n}async function oe(t,e,n=!1){if(V(e,"concurrency"),t.length===0)return[];let r=n?new Array(t.length):[],o=0,i=Array.from({length:Math.min(e,t.length)},async()=>{for(;;){let s=o++;if(s>=t.length)return;let a=await t[s]();n?r[s]=a:r.push(a)}});return await Promise.all(i),r}function $(t){return{daily:"101",weekly:"102",monthly:"103"}[t]}function J(t){return{"":"0",qfq:"1",hfq:"2"}[t]}var si=typeof document<"u"&&typeof window<"u",ai=0;function Hn(){return`__stock_sdk_jsonp_${Date.now()}_${ai++}`}function ze(t){let e=t,n=e.indexOf("*/");n!==-1&&(e=e.slice(n+2).trim());let r=e.indexOf("(");if(r===-1)throw new P({code:"PARSE_ERROR",message:"Invalid JSONP response: no opening parenthesis found"});let o=e.lastIndexOf(")");if(o===-1||o<=r)throw new P({code:"PARSE_ERROR",message:"Invalid JSONP response: no closing parenthesis found"});let i=e.slice(r+1,o);try{return JSON.parse(i)}catch(s){throw new P({code:"PARSE_ERROR",message:"Invalid JSONP response: payload is not valid JSON",cause:s})}}function ui(t,e){let{timeout:n=15e3,callbackParam:r="callback",callbackMode:o="query"}=e;return new Promise((i,s)=>{let a=Hn(),l;if(o==="path")l=t.replace("{callback}",a);else{let S=t.includes("?")?"&":"?";l=`${t}${S}${r}=${a}`}let c=document.createElement("script"),d=!1,m=window,p=()=>{c.parentNode&&c.parentNode.removeChild(c),delete m[a]},g=setTimeout(()=>{d||(d=!0,p(),s(new P({code:"TIMEOUT",message:`JSONP request timed out after ${n}ms: ${t}`,url:t,details:{timeout:n}})))},n);m[a]=S=>{d||(d=!0,clearTimeout(g),p(),i(S))},c.onerror=()=>{d||(d=!0,clearTimeout(g),p(),s(new P({code:"NETWORK_ERROR",message:`JSONP script load failed: ${t}`,url:t})))},c.src=l,document.head.appendChild(c)})}async function li(t,e){let{timeout:n=15e3,callbackParam:r="callback",callbackMode:o="query"}=e,i=Hn(),s;if(o==="path")s=t.replace("{callback}",i);else{let c=t.includes("?")?"&":"?";s=`${t}${c}${r}=${i}`}let a=new AbortController,l=setTimeout(()=>a.abort(),n);try{let c=await fetch(s,{signal:a.signal});if(!c.ok)throw new G(c.status,c.statusText,t);let d=await c.text();return ze(d)}catch(c){throw c instanceof DOMException&&c.name==="AbortError"?new P({code:"TIMEOUT",message:`JSONP request timed out after ${n}ms: ${t}`,url:t,details:{timeout:n}}):c instanceof P?c:new P({code:"NETWORK_ERROR",message:`JSONP request failed: ${c instanceof Error?c.message:String(c)}`,url:t,cause:c})}finally{clearTimeout(l)}}function v(t,e={}){return si?ui(t,e):li(t,e)}var qn=new Map;async function ge(t,e){let r=(qn.get(t)??Promise.resolve()).then(e,e);return qn.set(t,r.then(()=>{},()=>{})),r}function ci(){return typeof document<"u"&&typeof window<"u"}var di=15e3,pi="jsVars";async function ue(t,e,n={}){let r=n.timeout??di;return ci()?ge(pi,()=>mi(t,e,r)):gi(t,e,r,n.headers,n.client)}function Rt(t,e){let n={};for(let r of e){let o=fi(t,r);o!==void 0&&(n[r]=o)}return n}function mi(t,e,n){return new Promise((r,o)=>{let i=document.createElement("script"),s=!1,a=()=>{i.parentNode&&i.parentNode.removeChild(i)},l=setTimeout(()=>{s||(s=!0,a(),o(new P({code:"TIMEOUT",message:`fetchJsVars timed out after ${n}ms: ${t}`,url:t,details:{timeout:n}})))},n);i.onload=()=>{if(s)return;s=!0,clearTimeout(l);let c=window,d={};for(let m of e)if(m in c){d[m]=c[m];try{delete c[m]}catch{}}a(),r(d)},i.onerror=()=>{s||(s=!0,clearTimeout(l),a(),o(new P({code:"NETWORK_ERROR",message:`fetchJsVars script load failed: ${t}`,url:t})))},i.src=t,document.head.appendChild(i)})}async function gi(t,e,n,r,o){if(o){let a=await o.get(t,{responseType:"text"});return Rt(a,e)}let i=new AbortController,s=setTimeout(()=>i.abort(),n);try{let a=await fetch(t,{signal:i.signal,headers:r});if(!a.ok)throw new G(a.status,a.statusText,t);let l=await a.text();return Rt(l,e)}catch(a){throw a instanceof DOMException&&a.name==="AbortError"?new P({code:"TIMEOUT",message:`fetchJsVars timed out after ${n}ms: ${t}`,url:t,details:{timeout:n}}):a instanceof P?a:new P({code:"NETWORK_ERROR",message:`fetchJsVars failed: ${a instanceof Error?a.message:String(a)}`,url:t,cause:a})}finally{clearTimeout(s)}}function fi(t,e){let r=new RegExp(`(?:^|[^\\w$])(?:var|let|const)\\s+${hi(e)}\\s*=\\s*`,"m").exec(t);if(!r)return;let o=r.index+r[0].length,i=Ti(t,o),s=t.slice(o,i).trim();try{return JSON.parse(s)}catch{try{return JSON.parse(yi(s))}catch{return}}}function yi(t){let e="",n=null;for(let r=0;r<t.length;r++){let o=t[r];if(n==='"'){e+=o,o==="\\"&&r+1<t.length?e+=t[++r]:o==='"'&&(n=null);continue}if(n==="'"){if(o==="\\"&&r+1<t.length){let i=t[++r];e+=i==="'"?"'":"\\"+i;continue}if(o==="'"){e+='"',n=null;continue}e+=o==='"'?'\\"':o;continue}if(o==='"'){n='"',e+=o;continue}if(o==="'"){n="'",e+='"';continue}e+=o}return e}function hi(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ti(t,e){let n=0,r=null;for(let o=e;o<t.length;o++){let i=t[o];if(r){if(i==="\\"){o++;continue}i===r&&(r=null);continue}if(i==='"'||i==="'"){r=i;continue}if(i==="["||i==="{"||i==="("){n++;continue}if(i==="]"||i==="}"||i===")"){n--;continue}if(i===";"&&n===0)return o}return t.length}var E={CN:"Asia/Shanghai",HK:"Asia/Hong_Kong",US:"America/New_York"};function Si(t){if(!t)return null;let e=t.trim();if(!e)return null;let n=/^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?$/.exec(e);if(n)return{year:+n[1],month:+n[2],day:+n[3],hour:+n[4],minute:+n[5],second:n[6]?+n[6]:0};let r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);return r?{year:+r[1],month:+r[2],day:+r[3],hour:0,minute:0,second:0}:/^\d{14}$/.test(e)?{year:+e.slice(0,4),month:+e.slice(4,6),day:+e.slice(6,8),hour:+e.slice(8,10),minute:+e.slice(10,12),second:+e.slice(12,14)}:/^\d{8}$/.test(e)?{year:+e.slice(0,4),month:+e.slice(4,6),day:+e.slice(6,8),hour:0,minute:0,second:0}:null}var Ri={wallParts:{locale:"en-US",keyPrefix:"en-US|",options:{hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}},svDisplay:{locale:"sv-SE",keyPrefix:"sv-SE|",options:{hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}},dateOnly:{locale:"en-CA",keyPrefix:"en-CA|",options:{year:"numeric",month:"2-digit",day:"2-digit"}}},zn=new Map;function Et(t,e){let n=Ri[t],r=n.keyPrefix+e,o=zn.get(r);return o||(o=new Intl.DateTimeFormat(n.locale,{timeZone:e,...n.options}),zn.set(r,o)),o}function fe(t,e){let r=Et("wallParts",e).formatToParts(new Date(t)),o={};for(let s of r)s.type!=="literal"&&(o[s.type]=s.value);let i=parseInt(o.hour??"0",10);return i===24&&(i=0),Date.UTC(parseInt(o.year??"0",10),parseInt(o.month??"1",10)-1,parseInt(o.day??"1",10),i,parseInt(o.minute??"0",10),parseInt(o.second??"0",10))}var $n=new Map;function Yn(t,e){return fe(t,e)-t}function Ei(t,e){let n=`${t}|${e}`,r=$n.get(n);if(r===void 0){let o=Yn(Date.UTC(e,0,1,12),t);for(let i=1;i<12;i++)if(Yn(Date.UTC(e,i,1,12),t)!==o){o=null;break}r=o,$n.set(n,r)}return r}function jn(t,e){if(!(t.month===1&&t.day<=2||t.month===12&&t.day>=30)){let s=Ei(e,t.year);if(s!==null)return Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second)-s}let r=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second),o=2*r-fe(r,e);if(fe(o,e)===r)return o;let i=r-fe(o,e)+o;return fe(i,e)===r?i:o}function _i(t,e){let n=(t||"").trim(),r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(n)??/^(\d{4})(\d{2})(\d{2})$/.exec(n);if(!r)return null;let o=/^(\d{2}):(\d{2})(?::(\d{2}))?$/.exec((e||"").trim());return o?{year:+r[1],month:+r[2],day:+r[3],hour:+o[1],minute:+o[2],second:o[3]?+o[3]:0}:null}function le(t,e){let n=Si(t);return n?jn(n,e):NaN}function ie(t){return Number.isNaN(t)?null:t}function L(t,e){return{timestamp:ie(le(t,e)),tz:e}}function Z(t,e){let[n,r,o]=t.split("-").map(Number);return new Date(Date.UTC(n,r-1,o+e)).toISOString().slice(0,10)}function _t(t,e,n){let r=_i(t,e);return r?{timestamp:ie(jn(r,n)),tz:n}:{timestamp:null,tz:n}}function Ct(t,e){if(t==null||!Number.isFinite(t))return"";let n=Et("svDisplay",e).format(new Date(t)),r=n.match(/^(\d{4}-\d{2}-\d{2})[ T](\d{2}):(\d{2})/);if(!r)return n;let o=r[2]==="24"?"00":r[2];return`${r[1]} ${o}:${r[3]}`}function w(t,e=Date.now()){return Et("dateOnly",t).format(new Date(e))}var At="https://qt.gtimg.cn",Ot="https://web.ifzq.gtimg.cn/appstock/app/minute/query",Pt="https://assets.linkdiary.cn/shares/zh_a_list.json",Dt="https://assets.linkdiary.cn/shares/us_list.json",It="https://assets.linkdiary.cn/shares/hk_list.json",$e="https://assets.linkdiary.cn/shares/fund_list",bt="https://assets.linkdiary.cn/shares/trade-data-list.txt",Ye="https://push2his.eastmoney.com/api/qt/stock/kline/get",kt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",je="https://33.push2his.eastmoney.com/api/qt/stock/kline/get",Ge="https://63.push2his.eastmoney.com/api/qt/stock/kline/get",Mt="https://33.push2his.eastmoney.com/api/qt/stock/trends2/get",Nt="https://63.push2his.eastmoney.com/api/qt/stock/trends2/get",Lt="https://17.push2.eastmoney.com/api/qt/clist/get",Ft="https://91.push2.eastmoney.com/api/qt/stock/get",vt="https://29.push2.eastmoney.com/api/qt/clist/get",wt="https://7.push2his.eastmoney.com/api/qt/stock/kline/get",xt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",Ut="https://79.push2.eastmoney.com/api/qt/clist/get",Kt="https://91.push2.eastmoney.com/api/qt/stock/get",Bt="https://29.push2.eastmoney.com/api/qt/clist/get",Ht="https://91.push2his.eastmoney.com/api/qt/stock/kline/get",qt="https://push2his.eastmoney.com/api/qt/stock/trends2/get",zt="https://datacenter-web.eastmoney.com/api/data/v1/get",ye="https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get",$t="https://push2.eastmoney.com/api/qt/clist/get",Yt="https://push2.eastmoney.com/api/qt/kamtbs.rtmin/get",ce="https://push2ex.eastmoney.com",N="7eea3edcaed734bea9cbfc24409ed989",Y="b2884a393a59ad64002292a3e90d46a5",he="https://push2his.eastmoney.com/api/qt/stock/kline/get",jt="https://futsseapi.eastmoney.com/list/COMEX,NYMEX,COBOT,SGX,NYBOT,LME,MDEX,TOCOM,IPE",Te="58b2fa8f54638b60b87d69b31969089c",Gt={SHFE:113,DCE:114,CZCE:115,INE:142,CFFEX:220,GFEX:225},de={cu:"SHFE",al:"SHFE",zn:"SHFE",pb:"SHFE",au:"SHFE",ag:"SHFE",rb:"SHFE",wr:"SHFE",fu:"SHFE",ru:"SHFE",bu:"SHFE",hc:"SHFE",ni:"SHFE",sn:"SHFE",sp:"SHFE",ss:"SHFE",ao:"SHFE",br:"SHFE",c:"DCE",a:"DCE",b:"DCE",m:"DCE",y:"DCE",p:"DCE",l:"DCE",v:"DCE",j:"DCE",jm:"DCE",i:"DCE",jd:"DCE",pp:"DCE",cs:"DCE",eg:"DCE",eb:"DCE",pg:"DCE",lh:"DCE",WH:"CZCE",CF:"CZCE",SR:"CZCE",TA:"CZCE",OI:"CZCE",MA:"CZCE",FG:"CZCE",RM:"CZCE",SF:"CZCE",SM:"CZCE",ZC:"CZCE",AP:"CZCE",CJ:"CZCE",UR:"CZCE",SA:"CZCE",PF:"CZCE",PK:"CZCE",PX:"CZCE",SH:"CZCE",sc:"INE",nr:"INE",lu:"INE",bc:"INE",ec:"INE",IF:"CFFEX",IC:"CFFEX",IH:"CFFEX",IM:"CFFEX",TS:"CFFEX",TF:"CFFEX",T:"CFFEX",TL:"CFFEX",si:"GFEX",lc:"GFEX",ps:"GFEX",pt:"GFEX",pd:"GFEX"},Qe={HG:101,GC:101,SI:101,QI:101,QO:101,MGC:101,CL:102,NG:102,RB:102,HO:102,PA:102,PL:102,ZW:103,ZM:103,ZS:103,ZC:103,ZL:103,ZR:103,YM:103,NQ:103,ES:103,SB:108,CT:108,LCPT:109,LZNT:109,LALT:109},Se="https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData",Re="https://stock.finance.sina.com.cn/futures/api/jsonp.php/{callback}/FutureOptionAllService.getOptionDayline",Qt="https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getStockName",We="https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay",Wt="https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionDaylineService.getOptionMinline",Vt="https://stock.finance.sina.com.cn/futures/api/jsonp_v2.php/{callback}/StockOptionDaylineService.getSymbolInfo",Zt="https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionDaylineService.getFiveDayLine",Xt="https://futsseapi.eastmoney.com/list/option/221",Jt="https://datacenter-web.eastmoney.com/api/data/get";var Ve={au:{product:"au_o",exchange:"shfe"},ag:{product:"ag_o",exchange:"shfe"},cu:{product:"cu_o",exchange:"shfe"},al:{product:"al_o",exchange:"shfe"},zn:{product:"zn_o",exchange:"shfe"},ru:{product:"ru_o",exchange:"shfe"},sc:{product:"sc_o",exchange:"ine"},m:{product:"m_o",exchange:"dce"},c:{product:"c_o",exchange:"dce"},i:{product:"i_o",exchange:"dce"},p:{product:"p_o",exchange:"dce"},pp:{product:"pp_o",exchange:"dce"},l:{product:"l_o",exchange:"dce"},v:{product:"v_o",exchange:"dce"},pg:{product:"pg_o",exchange:"dce"},y:{product:"y_o",exchange:"dce"},a:{product:"a_o",exchange:"dce"},b:{product:"b_o",exchange:"dce"},eg:{product:"eg_o",exchange:"dce"},eb:{product:"eb_o",exchange:"dce"},SR:{product:"SR_o",exchange:"czce"},CF:{product:"CF_o",exchange:"czce"},TA:{product:"TA_o",exchange:"czce"},MA:{product:"MA_o",exchange:"czce"},RM:{product:"RM_o",exchange:"czce"},OI:{product:"OI_o",exchange:"czce"},PK:{product:"PK_o",exchange:"czce"},PF:{product:"PF_o",exchange:"czce"},SA:{product:"SA_o",exchange:"czce"},UR:{product:"UR_o",exchange:"czce"}},en=3e4,Ee=500,_e=500,Ce=7,tn=3,nn=1e3,rn=3e4,on=2,sn=[408,429,500,502,503,504];var Ze=class{constructor(e={}){this.acquireChain=Promise.resolve();let n=e.requestsPerSecond??5;this.maxTokens=e.maxBurst??n,this.tokens=this.maxTokens,this.refillRate=n/1e3,this.lastRefillTime=Date.now()}refill(){let e=Date.now(),r=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.maxTokens,this.tokens+r),this.lastRefillTime=e}tryAcquire(){return this.refill(),this.tokens>=1?(this.tokens-=1,!0):!1}getWaitTime(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquire(){let e=this.acquireChain,n;this.acquireChain=new Promise(r=>{n=r});try{await e;let r=this.getWaitTime();r>0&&await this.sleep(r),this.refill(),this.tokens-=1}finally{n()}}sleep(e){return new Promise(n=>setTimeout(n,e))}getAvailableTokens(){return this.refill(),this.tokens}};var Gn=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"],an=0;function Ci(){return typeof window<"u"&&typeof window.document<"u"}function Qn(){if(Ci())return;let t=Gn[an];return an=(an+1)%Gn.length,t}var pe=class extends P{constructor(e="Circuit breaker is OPEN"){super({code:"CIRCUIT_OPEN",message:e}),this.name="CircuitBreakerError"}},Xe=class{constructor(e={}){this.state="CLOSED";this.failureCount=0;this.lastFailureTime=0;this.halfOpenSuccessCount=0;this.halfOpenProbeStartedAt=[];this.failureThreshold=e.failureThreshold??5,this.resetTimeout=e.resetTimeout??3e4,this.halfOpenRequests=e.halfOpenRequests??1,this.probeRecycleTimeout=e.probeRecycleTimeout??Math.max(this.resetTimeout*4,12e4),this.onStateChange=e.onStateChange}getState(){return this.checkStateTransition(),this.state}canRequest(){switch(this.checkStateTransition(),this.state){case"CLOSED":return!0;case"OPEN":return!1;case"HALF_OPEN":{let e=Date.now();for(;this.halfOpenProbeStartedAt.length>0&&e-this.halfOpenProbeStartedAt[0]>=this.probeRecycleTimeout;)this.halfOpenProbeStartedAt.shift();return this.halfOpenProbeStartedAt.length+this.halfOpenSuccessCount>=this.halfOpenRequests?!1:(this.halfOpenProbeStartedAt.push(e),!0)}}}releaseProbe(){this.state==="HALF_OPEN"&&this.halfOpenProbeStartedAt.shift()}recordSuccess(){this.checkStateTransition(),this.state==="HALF_OPEN"?(this.halfOpenProbeStartedAt.shift(),this.halfOpenSuccessCount++,this.halfOpenSuccessCount>=this.halfOpenRequests&&this.transitionTo("CLOSED")):this.state==="CLOSED"&&(this.failureCount=0)}recordFailure(){this.lastFailureTime=Date.now(),this.state==="HALF_OPEN"?(this.halfOpenProbeStartedAt.shift(),this.transitionTo("OPEN")):this.state==="CLOSED"&&(this.failureCount++,this.failureCount>=this.failureThreshold&&this.transitionTo("OPEN"))}checkStateTransition(){this.state==="OPEN"&&Date.now()-this.lastFailureTime>=this.resetTimeout&&this.transitionTo("HALF_OPEN")}transitionTo(e){if(this.state===e)return;let n=this.state;this.state=e,e==="CLOSED"?(this.failureCount=0,this.halfOpenSuccessCount=0,this.halfOpenProbeStartedAt=[]):e==="HALF_OPEN"&&(this.halfOpenSuccessCount=0,this.halfOpenProbeStartedAt=[]),this.onStateChange?.(n,e)}reset(){this.transitionTo("CLOSED"),this.failureCount=0,this.halfOpenSuccessCount=0,this.halfOpenProbeStartedAt=[],this.lastFailureTime=0}async execute(e){if(!this.canRequest())throw new pe;try{let n=await e();return this.recordSuccess(),n}catch(n){throw this.recordFailure(),n}}getStats(){return{state:this.getState(),failureCount:this.failureCount,lastFailureTime:this.lastFailureTime,halfOpenSuccessCount:this.halfOpenSuccessCount}}};var Ai=3e4,Oi=1,Wn=["push2his.eastmoney.com","7.push2his.eastmoney.com","33.push2his.eastmoney.com","63.push2his.eastmoney.com","91.push2his.eastmoney.com"],Vn=["17.push2.eastmoney.com","29.push2.eastmoney.com","79.push2.eastmoney.com","91.push2.eastmoney.com"];function Pi(t,e){return e!=="eastmoney"?[t]:t.includes("push2his.eastmoney.com")?Wn:t.includes("push2.eastmoney.com")?Vn:[t]}function Di(t){return Array.from(new Set(t))}var Je=class{constructor(e=Ai,n=Oi){this.cooldownMs=e;this.failureThreshold=n;this.states=new Map}getCandidateUrls(e,n){let r;try{r=new URL(e)}catch{return[e]}let o=Date.now(),i=Pi(r.hostname,n);if(i.length<=1)return[e];let s=i.filter(c=>{let d=this.states.get(c);return!d||d.cooldownUntil<=o}),a=i.filter(c=>{let d=this.states.get(c);return d&&d.cooldownUntil>o});return Di([...s.includes(r.hostname)?[r.hostname]:[],...s.filter(c=>c!==r.hostname),...a.includes(r.hostname)?[r.hostname]:[],...a.filter(c=>c!==r.hostname)]).map(c=>{let d=new URL(e);return d.hostname=c,d.toString()})}recordSuccess(e){let n=this.safeGetHost(e);if(!n)return;let r=this.getState(n);r.failureCount=0,r.cooldownUntil=0,r.successCount++,r.lastErrorCode=void 0}recordFailure(e,n){let r=this.safeGetHost(e);if(!r)return;let o=this.getState(r);o.failureCount++,o.lastFailureAt=Date.now(),o.lastErrorCode=te(n),o.failureCount>=this.failureThreshold&&(o.cooldownUntil=Date.now()+this.cooldownMs)}shouldFallback(e){let n=te(e);return n==="NETWORK_ERROR"||n==="TIMEOUT"||n==="PARSE_ERROR"?!0:e instanceof G?e.status===408||e.status===429||e.status>=500:!1}getStats(e){let n=Array.from(this.states.values()).map(o=>({...o}));if(!e)return n;if(e!=="eastmoney")return[];let r=new Set([...Wn,...Vn]);return n.filter(o=>r.has(o.host))}safeGetHost(e){try{return new URL(e).hostname}catch{return null}}getState(e){let n=this.states.get(e);if(n)return n;let r={host:e,failureCount:0,successCount:0,cooldownUntil:0,lastFailureAt:0};return this.states.set(e,r),r}};function Ii(t){return{maxRetries:t?.maxRetries??tn,baseDelay:t?.baseDelay??nn,maxDelay:t?.maxDelay??rn,backoffMultiplier:t?.backoffMultiplier??on,retryableStatusCodes:t?.retryableStatusCodes??sn,retryOnNetworkError:t?.retryOnNetworkError??!0,retryOnTimeout:t?.retryOnTimeout??!0,onRetry:t?.onRetry}}function bi(t,e){let n={...t??{}};return e&&(Object.keys(n).some(o=>o.toLowerCase()==="user-agent")||(n["User-Agent"]=e)),n}function Zn(t,e){return e?{timeout:e.timeout??t.timeout,retry:e.retry?{...t.retry??{},...e.retry}:t.retry?{...t.retry}:void 0,headers:{...t.headers??{},...e.headers??{}},userAgent:e.userAgent??t.userAgent,rateLimit:e.rateLimit?{...t.rateLimit??{},...e.rateLimit}:t.rateLimit?{...t.rateLimit}:void 0,rotateUserAgent:e.rotateUserAgent??t.rotateUserAgent,circuitBreaker:e.circuitBreaker?{...t.circuitBreaker??{},...e.circuitBreaker}:t.circuitBreaker?{...t.circuitBreaker}:void 0}:{...t,headers:{...t.headers??{}},retry:t.retry?{...t.retry}:void 0,rateLimit:t.rateLimit?{...t.rateLimit}:void 0,circuitBreaker:t.circuitBreaker?{...t.circuitBreaker}:void 0}}function un(t={}){return{timeout:t.timeout??en,retry:Ii(t.retry),headers:bi(t.headers,t.userAgent),rotateUserAgent:t.rotateUserAgent??!1,rateLimit:t.rateLimit?{...t.rateLimit}:void 0,circuitBreaker:t.circuitBreaker?{...t.circuitBreaker}:void 0}}function Xn(t,e){if(e)return e;try{let n=new URL(t).hostname;if(n.includes("eastmoney.com"))return"eastmoney";if(n.includes("gtimg.cn"))return"tencent";if(n.includes("sina.com.cn"))return"sina";if(n.includes("linkdiary.cn"))return"linkdiary"}catch{return"unknown"}return"unknown"}function Jn(t){if(t instanceof DOMException&&t.name==="AbortError")return!0;if(t instanceof Error){if(t.name==="AbortError")return!0;let e=t.cause;if((e instanceof Error||e instanceof DOMException)&&e.name==="AbortError")return!0}return!1}var ln=()=>{};function ki(t){let e=t.filter(a=>!!a);if(e.length===0)return{signal:void 0,cleanup:ln};if(e.length===1)return{signal:e[0],cleanup:ln};let n=AbortSignal.any;if(typeof n=="function")return{signal:n(e),cleanup:ln};let r=new AbortController,o=a=>{r.signal.aborted||r.abort(a)},i=[];for(let a of e){if(a.aborted){o(a.reason);break}let l=()=>o(a.reason);a.addEventListener("abort",l,{once:!0}),i.push({s:a,handler:l})}let s=()=>{for(let{s:a,handler:l}of i)a.removeEventListener("abort",l)};return{signal:r.signal,cleanup:s}}async function Mi(t,e){if(!t)return e;if(Promise.resolve(e).catch(()=>{}),t.aborted)return Promise.race([e,Promise.reject(t.reason)]);let n,r=new Promise((o,i)=>{n=()=>i(t.reason),t.addEventListener("abort",n,{once:!0})});try{return await Promise.race([e,r])}finally{t.removeEventListener("abort",n)}}var Ae=class{constructor(e={}){this.baseUrl=e.baseUrl??At;let n={timeout:e.timeout,retry:e.retry,headers:e.headers,userAgent:e.userAgent,rateLimit:e.rateLimit,rotateUserAgent:e.rotateUserAgent,circuitBreaker:e.circuitBreaker};this.defaultPolicy=un(n),this.providerPolicies={},this.runtimeStates=new Map,this.fallbackManager=new Je,this.fetchImpl=e.fetchImpl,this.clientSignal=e.signal,this.hooks=e.hooks;for(let[r,o]of Object.entries(e.providerPolicies??{})){let i=Zn(n,o);this.providerPolicies[r]=un(i)}}getProviderState(e){let n=this.runtimeStates.get(e);if(n)return n;let r=this.providerPolicies[e]??this.defaultPolicy,o={policy:r,rateLimiter:r.rateLimit?new Ze(r.rateLimit):null,circuitBreaker:r.circuitBreaker?new Xe(r.circuitBreaker):null};return this.runtimeStates.set(e,o),o}getTimeout(){return this.defaultPolicy.timeout}getHostHealth(e){return this.fallbackManager.getStats(e)}safe(e){try{e()}catch{}}toSdkError(e){return e instanceof P?e:new P({code:te(e)??"NETWORK_ERROR",message:e.message,provider:e.provider,url:e.url,status:e.status,details:e.details,cause:e})}calculateDelay(e,n){return Math.min(n.baseDelay*Math.pow(n.backoffMultiplier,e),n.maxDelay)+Math.random()*100}sleep(e){return new Promise(n=>setTimeout(n,e))}shouldRetry(e,n,r){if(n>=r.maxRetries)return!1;let o=te(e);return o==="ABORTED"?!1:o==="TIMEOUT"?r.retryOnTimeout:o==="NETWORK_ERROR"?r.retryOnNetworkError:e instanceof G?r.retryableStatusCodes.includes(e.status):!1}async executeWithRetry(e,n,r,o=0){try{return await e(o)}catch(i){let s=He(i,r),a={provider:r.provider,url:r.url,timeout:r.timeout,attempt:o,responseType:r.responseType};if(this.safe(()=>this.hooks?.onError?.(a,this.toSdkError(s))),this.safe(()=>this.hooks?.trace?.("error",a)),this.shouldRetry(s,o,n)){let l=this.calculateDelay(o,n);return n.onRetry&&n.onRetry(o+1,s,l),this.safe(()=>this.hooks?.onRetry?.(a,this.toSdkError(s),l)),this.safe(()=>this.hooks?.trace?.("retry",a)),await this.sleep(l),this.executeWithRetry(e,n,r,o+1)}throw s}}async performRequest(e,n,r,o="text",i={},s=0){n.rateLimiter&&await n.rateLimiter.acquire();let a=new AbortController,l=new DOMException(`Request timed out after ${n.policy.timeout}ms`,"AbortError"),c=setTimeout(()=>a.abort(l),n.policy.timeout),{signal:d,cleanup:m}=ki([a.signal,i.signal,this.clientSignal]),p=i.fetchImpl??this.fetchImpl??globalThis.fetch,g={...n.policy.headers};if(n.policy.rotateUserAgent){let h=Qn();if(h){for(let C of Object.keys(g))C.toLowerCase()==="user-agent"&&delete g[C];g["User-Agent"]=h}}let S={provider:r,url:e,timeout:n.policy.timeout,attempt:s,responseType:o};this.safe(()=>this.hooks?.onRequest?.(S)),this.safe(()=>this.hooks?.trace?.("request",S));let A=Date.now();try{let h=await Mi(d,p(e,{signal:d,headers:g}));if(this.safe(()=>this.hooks?.onResponse?.(S,{status:h.status,durationMs:Date.now()-A})),this.safe(()=>this.hooks?.trace?.("response",S)),!h.ok)throw new G(h.status,h.statusText,e,r);switch(o){case"json":try{return await h.json()}catch(C){throw new P({code:"PARSE_ERROR",message:`Failed to parse JSON response from ${e}`,provider:r,url:e,cause:C})}case"arraybuffer":return await h.arrayBuffer();default:return await h.text()}}catch(h){let C=I=>I?.aborted?h===I.reason?!0:h instanceof Error&&h.cause===I.reason:!1;if(!C(a.signal)){let I=i.signal?.aborted||this.clientSignal?.aborted;if(C(i.signal)||C(this.clientSignal)||I&&Jn(h))throw new mt("Request aborted by external signal",r,e);if(a.signal.aborted&&Jn(h))throw l}throw h}finally{clearTimeout(c),m()}}async get(e,n={}){let r=Xn(e,n.provider),o=this.getProviderState(r);if(o.circuitBreaker&&!o.circuitBreaker.canRequest())throw new pe("Circuit breaker is OPEN, request rejected");let i={fetchImpl:n.fetchImpl,signal:n.signal},s=this.fallbackManager.getCandidateUrls(e,r),a;for(let l=0;l<s.length;l++){let c=s[l],d=l===0?o.policy.retry:{...o.policy.retry,maxRetries:0};try{let m=await this.executeWithRetry(p=>this.performRequest(c,o,r,n.responseType,i,p),d,{provider:r,url:c,timeout:o.policy.timeout,responseType:n.responseType});return o.circuitBreaker?.recordSuccess(),this.fallbackManager.recordSuccess(c),m}catch(m){let p=He(m,{provider:r,url:c,timeout:o.policy.timeout});a=p;let g=te(p)==="ABORTED";if(g?o.circuitBreaker?.releaseProbe():this.fallbackManager.recordFailure(c,p),l<s.length-1&&this.fallbackManager.shouldFallback(p)){this.safe(()=>this.hooks?.trace?.("fallback",{provider:r,url:c,timeout:o.policy.timeout,attempt:0,responseType:n.responseType}));continue}throw g||o.circuitBreaker?.recordFailure(),this.toSdkError(p)}}throw o.circuitBreaker?.recordFailure(),a?this.toSdkError(a):new pe("Request failed without a concrete error")}async getTencentQuote(e){let n=`${this.baseUrl}/?q=${encodeURIComponent(e)}`,r=await this.get(n,{responseType:"arraybuffer",provider:"tencent"}),o=yt(r);return ht(o)}};var x=(t,e)=>t*60+e,Ni={A:{tz:E.CN,open:[[x(9,30),x(11,30)],[x(13,0),x(15,0)]],lunchBreak:[x(11,30),x(13,0)],tradingWeekdays:[1,2,3,4,5]},HK:{tz:E.HK,open:[[x(9,30),x(12,0)],[x(13,0),x(16,0)]],lunchBreak:[x(12,0),x(13,0)],tradingWeekdays:[1,2,3,4,5]},US:{tz:E.US,open:[[x(9,30),x(16,0)]],tradingWeekdays:[1,2,3,4,5]}};function cn(t,e){if(t==null)return w(e);if(t instanceof Date)return w(e,t.getTime());let n=t.trim();if(/^\d{4}-\d{2}-\d{2}$/.test(n))return n;if(/^\d{8}$/.test(n))return`${n.slice(0,4)}-${n.slice(4,6)}-${n.slice(6,8)}`;let r=new Date(n);if(!Number.isNaN(r.getTime()))return w(e,r.getTime());throw new R(`Unsupported date input: ${JSON.stringify(t)}. Expected 'YYYY-MM-DD', 'YYYYMMDD', or Date.`)}function Li(t,e){let n=new Intl.DateTimeFormat("en-US",{timeZone:e,hour12:!1,weekday:"short",hour:"2-digit",minute:"2-digit"}),r={};for(let l of n.formatToParts(t))l.type!=="literal"&&(r[l.type]=l.value);let o=parseInt(r.hour??"0",10);o===24&&(o=0);let i=parseInt(r.minute??"0",10),a={Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6,Sun:7}[r.weekday??""]??0;return{minutes:o*60+i,weekday:a}}function dn(t,e){let n=0,r=t.length;for(;n<r;){let o=n+r>>>1;t[o]<e?n=o+1:r=o}return n}var Oe=class{constructor(e){this.quoteService=e}async isTradingDay(e){let n=cn(e,E.CN),r=await this.quoteService.getTradingCalendar(),o=dn(r,n);return o<r.length&&r[o]===n}async nextTradingDay(e){let n=cn(e,E.CN),r=await this.quoteService.getTradingCalendar(),o=dn(r,n);if(o<r.length&&r[o]===n&&(o+=1),o>=r.length)throw new R(`nextTradingDay: ${n} \u4E4B\u540E\u6CA1\u6709\u53EF\u7528\u4EA4\u6613\u65E5 (\u65E5\u5386\u6700\u5927\u65E5\u671F ${r[r.length-1]??"N/A"})`);return r[o]}async prevTradingDay(e){let n=cn(e,E.CN),r=await this.quoteService.getTradingCalendar(),i=dn(r,n)-1;if(i<0)throw new R(`prevTradingDay: ${n} \u4E4B\u524D\u6CA1\u6709\u53EF\u7528\u4EA4\u6613\u65E5 (\u65E5\u5386\u6700\u5C0F\u65E5\u671F ${r[0]??"N/A"})`);return r[i]}getMarketStatus(e="A",n=new Date){let r=Ni[e],{minutes:o,weekday:i}=Li(n,r.tz);if(!r.tradingWeekdays.includes(i))return"closed";let s=r.open[0][0],a=r.open[r.open.length-1][1];if(o<s)return"pre_market";if(o>=a)return"after_hours";for(let[l,c]of r.open)if(o>=l&&o<c)return"open";return r.lunchBreak&&o>=r.lunchBreak[0]&&o<r.lunchBreak[1]?"lunch_break":"closed"}};var M={};lt(M,{getAShareCodeList:()=>sr,getAllHKQuotesByCodes:()=>cr,getAllQuotesByCodes:()=>lr,getAllUSQuotesByCodes:()=>dr,getFullQuotes:()=>et,getFundCodeList:()=>pr,getFundFlow:()=>tr,getFundQuotes:()=>rr,getHKCodeList:()=>ur,getHKQuotes:()=>tt,getPanelLargeOrder:()=>nr,getSimpleQuotes:()=>er,getTodayTimeline:()=>or,getTradingCalendar:()=>mr,getUSCodeList:()=>ar,getUSQuotes:()=>nt,parseFullQuote:()=>pn,parseFundFlow:()=>gn,parseFundQuote:()=>Tn,parseHKQuote:()=>yn,parsePanelLargeOrder:()=>fn,parseSimpleQuote:()=>mn,parseUSQuote:()=>hn,search:()=>fr});function pn(t){let e=[];for(let i=0;i<5;i++)e.push({price:T(t[9+i*2]),volume:T(t[10+i*2])});let n=[];for(let i=0;i<5;i++)n.push({price:T(t[19+i*2]),volume:T(t[20+i*2])});let r=t[30]??"",o=L(r,E.CN);return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:T(t[3]),prevClose:T(t[4]),open:T(t[5]),volume:T(t[6]),outerVolume:T(t[7]),innerVolume:T(t[8]),bid:e,ask:n,time:r,timestamp:o.timestamp,tz:o.tz,change:T(t[31]),changePercent:T(t[32]),high:T(t[33]),low:T(t[34]),volume2:T(t[36]),amount:T(t[37]),turnoverRate:O(t[38]),pe:O(t[39]),amplitude:O(t[43]),circulatingMarketCap:O(t[44]),totalMarketCap:O(t[45]),pb:O(t[46]),limitUp:O(t[47]),limitDown:O(t[48]),volumeRatio:O(t[49]),avgPrice:O(t[51]),peStatic:O(t[52]),peDynamic:O(t[53]),high52w:O(t[67]),low52w:O(t[68]),circulatingShares:O(t[72]),totalShares:O(t[73]),market:"CN",assetType:"stock",source:"tencent"}}function mn(t){return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:T(t[3]),change:T(t[4]),changePercent:T(t[5]),volume:T(t[6]),amount:T(t[7]),marketCap:O(t[9]),marketType:t[10]??"",market:"CN",assetType:"stock",source:"tencent"}}function gn(t){let e=t[13]??"",n=L(e,E.CN);return{code:t[0]??"",mainInflow:T(t[1]),mainOutflow:T(t[2]),mainNet:T(t[3]),mainNetRatio:T(t[4]),retailInflow:T(t[5]),retailOutflow:T(t[6]),retailNet:T(t[7]),retailNetRatio:T(t[8]),totalFlow:T(t[9]),name:t[12]??"",date:e,timestamp:n.timestamp,tz:n.tz}}function fn(t){return{buyLargeRatio:T(t[0]),buySmallRatio:T(t[1]),sellLargeRatio:T(t[2]),sellSmallRatio:T(t[3])}}function yn(t){let e=t[30]??"",n=L(e,E.HK);return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:T(t[3]),prevClose:T(t[4]),open:T(t[5]),volume:T(t[6]),time:e,timestamp:n.timestamp,tz:n.tz,change:T(t[31]),changePercent:T(t[32]),high:T(t[33]),low:T(t[34]),amount:T(t[37]),lotSize:O(t[40]),circulatingMarketCap:O(t[44]),totalMarketCap:O(t[45]),currency:t[t.length-3]??"",market:"HK",assetType:"stock",source:"tencent"}}function hn(t){let e=t[30]??"",n=L(e,E.US);return{marketId:t[0]??"",name:t[1]??"",code:t[2]??"",price:T(t[3]),prevClose:T(t[4]),open:T(t[5]),volume:T(t[6]),time:e,timestamp:n.timestamp,tz:n.tz,change:T(t[31]),changePercent:T(t[32]),high:T(t[33]),low:T(t[34]),amount:T(t[37]),turnoverRate:O(t[38]),pe:O(t[39]),amplitude:O(t[43]),totalMarketCap:O(t[45]),pb:O(t[47]),high52w:O(t[48]),low52w:O(t[49]),market:"US",assetType:"stock",source:"tencent"}}function Tn(t){let e=t[8]??"",n=L(e,E.CN);return{code:t[0]??"",name:t[1]??"",nav:T(t[5]),accNav:T(t[6]),change:T(t[7]),navDate:e,timestamp:n.timestamp,tz:n.tz,market:"CN",assetType:"fund",source:"tencent"}}async function et(t,e){if(!e||e.length===0)return[];let n=await t.getTencentQuote(e.join(",")),r=new Set(e);return n.filter(o=>r.has(o.key)&&o.fields&&o.fields.length>5&&o.fields[0]!=="").map(o=>pn(o.fields))}async function er(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`s_${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>5&&i.fields[0]!=="").map(i=>mn(i.fields))}async function tr(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`ff_${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>=14&&i.fields[0]!=="").map(i=>gn(i.fields))}async function nr(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`s_pk${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>=4&&i.fields[0]!=="").map(i=>fn(i.fields))}async function tt(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`hk${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>5&&i.fields[0]!=="").map(i=>yn(i.fields))}async function nt(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`us${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>5&&i.fields[0]!=="").map(i=>hn(i.fields))}async function rr(t,e){if(!e||e.length===0)return[];let n=e.map(i=>`jj${i}`),r=await t.getTencentQuote(n.join(",")),o=new Set(n);return r.filter(i=>o.has(i.key)&&i.fields&&i.fields.length>=9&&i.fields[0]!=="").map(i=>Tn(i.fields))}async function or(t,e){let n=`${Ot}?code=${encodeURIComponent(e)}`,r=await t.get(n,{responseType:"json",provider:"tencent"});if(r.code!==0)throw new pt(r.msg||"API error","tencent",n);let o=r.data?.[e];if(!o){let p=L("",E.CN);return{code:e,date:"",timestamp:p.timestamp,tz:p.tz,preClose:0,data:[]}}let i=o.data?.data??[],s=o.data?.date??"",a=o.qt?.[e]??[],l=parseFloat(a[4]??"")||0,c=!1;for(let p of i){let g=p.split(" "),S=parseFloat(g[1])||0,A=parseInt(g[2],10)||0,h=parseFloat(g[3])||0;if(A>0&&S>0){h/A>S*50&&(c=!0);break}}let d=i.map(p=>{let g=p.split(" "),S=g[0],A=`${S.slice(0,2)}:${S.slice(2,4)}`,h=parseInt(g[2],10)||0,C=parseFloat(g[3])||0,I=c?h*100:h,U=I>0?C/I:0,K=_t(s,A,E.CN);return{time:A,timestamp:K.timestamp,tz:K.tz,price:parseFloat(g[1])||0,volume:I,amount:C,avgPrice:Math.round(U*100)/100}}),m=L(s,E.CN);return{code:e,date:s,timestamp:m.timestamp,tz:m.tz,preClose:l,data:d}}var ir=re("tencent:code-lists",{defaultTTL:360*60*1e3,maxSize:16});async function Sn(t,e,n){return ir.getOrFetch(e,async()=>{let r=await t.get(n,{responseType:"json"}),o=r?.list;if(r?.success===!1||!Array.isArray(o)||o.length===0)throw new ee(`\u4EE3\u7801\u5217\u8868\u63A5\u53E3\u8FD4\u56DE\u7A7A\u6570\u636E: ${e}`,"tencent",n);return o})}function Fi(t,e){let n=t.replace(/^(sh|sz|bj)/,"");switch(e){case"sh":return n.startsWith("6");case"sz":return n.startsWith("0")||n.startsWith("3");case"bj":return n.startsWith("4")||n.startsWith("8")||n.startsWith("92");case"kc":return n.startsWith("688");case"cy":return n.startsWith("30");default:return!0}}async function sr(t,e){let n=e?.simple??!1,r=e?.market,i=await Sn(t,"a-share:full",Pt);return r&&(i=i.filter(s=>Fi(s,r))),n?i.map(s=>s.replace(/^(sh|sz|bj)/,"")):i.slice()}async function ar(t,e){let n=e?.simple??!1,r=e?.market,i=(await Sn(t,"us:full",Dt)).slice();if(r){let s=`${xn[r]}.`;i=i.filter(a=>a.startsWith(s))}return n?i.map(s=>s.replace(/^\d{3}\./,"")):i}async function ur(t){return(await Sn(t,"hk:full",It)).slice()}async function lr(t,e,n={}){let{batchSize:r=Ee,concurrency:o=Ce,onProgress:i}=n;V(r,"batchSize"),V(o,"concurrency");let s=Math.min(r,_e),a=me(e,s),l=a.length,c=0,d=a.map(p=>async()=>{let g=await et(t,p);return c++,i&&i(c,l),g});return(await oe(d,o,!0)).flat()}async function cr(t,e,n={}){let{batchSize:r=Ee,concurrency:o=Ce,onProgress:i}=n;V(r,"batchSize"),V(o,"concurrency");let s=Math.min(r,_e),a=me(e,s),l=a.length,c=0,d=a.map(p=>async()=>{let g=await tt(t,p);return c++,i&&i(c,l),g});return(await oe(d,o,!0)).flat()}async function dr(t,e,n={}){let{batchSize:r=Ee,concurrency:o=Ce,onProgress:i}=n;V(r,"batchSize"),V(o,"concurrency");let s=Math.min(r,_e),a=me(e,s),l=a.length,c=0,d=a.map(p=>async()=>{let g=await nt(t,p);return c++,i&&i(c,l),g});return(await oe(d,o,!0)).flat()}async function pr(t){return(await ir.getOrFetch("fund:full",async()=>{let o=(await t.get($e,{responseType:"text"})??"").split(",").slice(1).filter(i=>i.trim());if(o.length===0)throw new ee("\u57FA\u91D1\u4EE3\u7801\u5217\u8868\u63A5\u53E3\u8FD4\u56DE\u7A7A\u6570\u636E","tencent",$e);return o})).slice()}var vi=re("tencent:trade-calendar",{defaultTTL:720*60*1e3,maxSize:4});async function mr(t){return(await vi.getOrFetch("a-share",async()=>{let r=(await t.get(bt)??"").trim().split(",").map(o=>o.trim()).filter(o=>o.length>0);if(r.length===0)throw new ee("\u4EA4\u6613\u65E5\u5386\u63A5\u53E3\u8FD4\u56DE\u7A7A\u6570\u636E","tencent",bt);return r})).slice()}var gr="https://smartbox.gtimg.cn/s3/";function wi(t){return t.replace(/\\u([0-9a-fA-F]{4})/g,(e,n)=>String.fromCharCode(parseInt(n,16)))}function xi(t){let e=t.toUpperCase();return e.startsWith("QDII")||e.startsWith("ETF")||e.startsWith("LOF")||e.startsWith("KJ")||e.startsWith("JJ")||e.includes("FUND")?"fund":e.startsWith("GP")||e.includes("STOCK")?"stock":e==="ZS"||e.includes("INDEX")?"index":e.startsWith("ZQ")||e.includes("BOND")?"bond":e.startsWith("QH")||e.includes("FUTURE")?"futures":e.startsWith("QZ")||e.includes("OPTION")?"option":"other"}function Ui(t){return!t||t==="N"?[]:t.split("^").filter(Boolean).map(n=>{let r=n.split("~"),o=r[0]||"",i=r[1]||"",s=wi(r[2]||""),a=r[4]||"";return{code:o+i,name:s,market:o,type:a,category:xi(a)}})}function Ki(t){return new Promise((e,n)=>{let r=`${gr}?v=2&t=all&q=${encodeURIComponent(t)}`;window.v_hint="";let o=document.createElement("script");o.src=r,o.charset="utf-8",o.onload=()=>{let i=window.v_hint||"";document.body.removeChild(o),e(i)},o.onerror=()=>{document.body.removeChild(o),n(new P({code:"NETWORK_ERROR",message:"Network error calling Smartbox",url:r}))},document.body.appendChild(o)})}async function Bi(t,e){let n=`${gr}?v=2&t=all&q=${encodeURIComponent(e)}`,o=(await t.get(n)).match(/v_hint="([^"]*)"/);return o?o[1]:""}function Hi(){return typeof window<"u"&&typeof document<"u"}async function fr(t,e){if(!e||!e.trim())return[];let n;return Hi()?n=await Ki(e):n=await Bi(t,e),Ui(n)}var f={};lt(f,{assertCnStockSymbol:()=>Mn,extractVariety:()=>Dn,fetchDatacenter:()=>En,fetchDatacenterList:()=>D,getBlockTradeDailyStat:()=>Ko,getBlockTradeDetail:()=>Uo,getBlockTradeMarketStat:()=>xo,getBoardChanges:()=>bo,getCFFEXOptionQuotes:()=>Jr,getComexInventory:()=>oo,getConceptConstituents:()=>Ur,getConceptKline:()=>Kr,getConceptList:()=>wr,getConceptMinuteKline:()=>Br,getConceptSpot:()=>xr,getDividendDetail:()=>Hr,getDragonTigerBranchRank:()=>Fo,getDragonTigerDetail:()=>Mo,getDragonTigerInstitution:()=>Lo,getDragonTigerStockSeatDetail:()=>vo,getDragonTigerStockStats:()=>No,getFundDividendList:()=>qr,getFundEstimate:()=>$r,getFundFlowRank:()=>po,getFundNavHistory:()=>zr,getFundProfile:()=>Qr,getFundRankHistory:()=>Yr,getFuturesHistoryKline:()=>Vr,getFuturesInventory:()=>ro,getFuturesInventorySymbols:()=>no,getFuturesMarketCode:()=>In,getGlobalFuturesKline:()=>Xr,getGlobalFuturesSpot:()=>Zr,getHKHistoryKline:()=>Rr,getHKMinuteKline:()=>Er,getHistoryKline:()=>Tr,getHotThemes:()=>zo,getIndividualFundFlow:()=>lo,getIndividualStockChanges:()=>Io,getIndustryConstituents:()=>Lr,getIndustryKline:()=>Fr,getIndustryList:()=>Mr,getIndustryMinuteKline:()=>vr,getIndustrySpot:()=>Nr,getMarginAccountInfo:()=>Bo,getMarginTargetList:()=>Ho,getMarketFundFlow:()=>co,getMinuteKline:()=>Sr,getNorthboundFlowSummary:()=>ho,getNorthboundHistory:()=>So,getNorthboundHoldingRank:()=>To,getNorthboundIndividual:()=>Ro,getNorthboundMinute:()=>yo,getOptionLHB:()=>eo,getSectorFundFlowHistory:()=>go,getSectorFundFlowRank:()=>mo,getStockChanges:()=>Do,getThemeFunds:()=>$o,getThemeList:()=>qo,getUSHistoryKline:()=>_r,getUSMinuteKline:()=>Cr,getZTPool:()=>Po});function k(t){return/^\d{8}$/.test(t)?`${t.slice(0,4)}-${t.slice(4,6)}-${t.slice(6,8)}`:t}function yr(t,e){let n=i=>k(i.replace("T"," ").trim()).slice(0,16),r=n(t),o=n(e);return o.length===10&&(o+=" 23:59"),{start:r,end:o}}function hr(t,e,n=0){let r=s=>{if(!s)return;let a=/^(\d{4})-?(\d{2})-?(\d{2})/.exec(s.trim());return a?`${a[1]}${a[2]}${a[3]}`:void 0},o=r(t)??"0",i=r(e);return i!==void 0&&n>0&&(i=Z(`${i.slice(0,4)}-${i.slice(4,6)}-${i.slice(6,8)}`,n).replace(/-/g,"")),{beg:o,end:i??"20500000"}}async function Rn(t,e,n,r,o=100,i){let s=[],a=1,l=0;do{let c=new URLSearchParams({...n,pn:String(a),pz:String(o),fields:r}),d=`${e}?${c.toString()}`,p=(await t.get(d,{responseType:"json"}))?.data;if(!p||!Array.isArray(p.diff))break;a===1&&(l=p.total??0);let g=p.diff.map((S,A)=>i(S,s.length+A+1));if(s.push(...g),g.length===0)break;a++}while(s.length<l);return s}function B(t){let[e,n,r,o,i,s,a,l,c,d,m]=t.split(",");return{date:e,open:y(n),close:y(r),high:y(o),low:y(i),volume:y(s),amount:y(a),amplitude:y(l),changePercent:y(c),change:y(d),turnoverRate:y(m)}}async function H(t,e,n){let r=`${e}?${n.toString()}`,o=await t.get(r,{responseType:"json"});return{klines:o?.data?.klines||[],name:o?.data?.name,code:o?.data?.code}}function qi(t){let[e,n,r,o,i,s,a,l]=t.split(",");return{time:e,open:y(n),close:y(r),high:y(o),low:y(i),volume:y(s),amount:y(a),avgPrice:y(l)}}function rt(t,e){let n=r=>{let o=le(r,E.CN);return{time:Ct(o,t)||r,timestamp:ie(o)}};return{mapTrendRow:({time:r,...o},i)=>({...n(r),tz:t,...o,currency:e,code:i.code}),mapKlineRow:({date:r,...o},i)=>({...n(r),tz:t,...o,currency:e,code:i.code})}}function ne(t){return async function(n,r,o={}){let i=o.period??t.defaultPeriod;St(i),t.fqt==="option"&&X(o.adjust??"qfq");let s=t.resolveTarget(r),a=t.window,l=p=>{if(a.mode==="full")return p;let{start:g,end:S}=yr(o.startDate??"1979-09-01 09:32:00",o.endDate??"2222-01-01 09:32:00");return p.filter(A=>A.time>=g&&A.time<=S)};if(i==="1"){let p=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",fields2:"f51,f52,f53,f54,f55,f56,f57,f58",...t.includeUt?{ut:N}:{},ndays:t.ndays==="option"?String(o.ndays??1):t.ndays.fixed,iscr:"0",secid:s.secid}),g=`${t.trendsUrl}?${p.toString()}`,A=(await n.get(g,{responseType:"json"}))?.data?.trends;return!Array.isArray(A)||A.length===0?[]:l(A.map(h=>t.mapTrendRow(qi(h),s)))}let c=a.mode==="filter"?hr(o.startDate,o.endDate,a.endExtraDays??0):{beg:a.beg,end:a.end},d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",...t.includeUt?{ut:N}:{},klt:i,fqt:t.fqt==="option"?J(o.adjust??"qfq"):t.fqt.fixed,secid:s.secid,beg:c.beg,end:c.end,...t.extraKlineParams??{}}),{klines:m}=await H(n,t.klineUrl,d);return!Array.isArray(m)||m.length===0?[]:l(m.map(p=>t.mapKlineRow(B(p),s)))}}async function Tr(t,e,n={}){let{period:r="daily",adjust:o="qfq",startDate:i="19700101",endDate:s="20500101"}=n;z(r),X(o);let a=Q(e,{market:"CN"}),l=W(a),c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",ut:N,klt:$(r),fqt:J(o),secid:l,beg:i,end:s}),d=Ye,{klines:m}=await H(t,d,c);return m.length===0?[]:m.map(p=>{let g=B(p),S=L(g.date,E.CN);return{...g,timestamp:S.timestamp,tz:S.tz,code:a.code}})}var zi=ne({trendsUrl:kt,klineUrl:Ye,resolveTarget:t=>{let e=Q(t,{market:"CN"});return{secid:W(e),code:e.code}},defaultPeriod:"1",ndays:{fixed:"5"},fqt:"option",includeUt:!0,window:{mode:"filter"},mapTrendRow:({time:t,...e})=>{let n=L(t,E.CN);return{time:t,timestamp:n.timestamp,tz:n.tz,...e}},mapKlineRow:t=>{let e=L(t.date,E.CN);return{...t,time:t.date,timestamp:e.timestamp,tz:e.tz}}});async function Sr(t,e,n={}){return zi(t,e,n)}function ot(t){return async function(n,r,o={}){let{period:i="daily",adjust:s="qfq",startDate:a="19700101",endDate:l="20500101"}=o;z(i),X(s);let c=t.normalizeSymbol(r),d=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",ut:N,klt:$(i),fqt:J(s),secid:c.secid,beg:a,end:l,lmt:"1000000"}),{klines:m,name:p,code:g}=await H(n,t.url,d);if(m.length===0)return[];let S=t.resolveResultMeta?t.resolveResultMeta(r,c,{code:g,name:p}):{code:g||c.fallbackCode,name:p||""};return m.map(A=>{let h=B(A),C=L(h.date,t.tz),I={...h,timestamp:C.timestamp,tz:C.tz,code:S.code,name:S.name};return t.enrichItem(I)})}}var $i=ot({url:je,tz:E.HK,normalizeSymbol:t=>{let e=Q(t,{market:"HK"});return{secid:W(e),fallbackCode:e.code}},enrichItem:t=>({...t,currency:"HKD",lotSize:null})});async function Rr(t,e,n={}){return $i(t,e,n)}var Yi=ne({trendsUrl:Mt,klineUrl:je,resolveTarget:t=>{let e=Q(t,{market:"HK"});return{secid:W(e),code:e.code}},defaultPeriod:"1",ndays:"option",fqt:"option",includeUt:!0,window:{mode:"filter"},...rt(E.HK,"HKD")});async function Er(t,e,n={}){return Yi(t,e,n)}var ji=ot({url:Ge,tz:E.US,normalizeSymbol:t=>({secid:t,fallbackCode:t.split(".")[1]||t}),resolveResultMeta:(t,e,n)=>({code:n.code||e.fallbackCode,name:n.name||""}),enrichItem:t=>({...t,currency:"USD"})});async function _r(t,e,n={}){return ji(t,e,n)}var Gi=ne({trendsUrl:Nt,klineUrl:Ge,resolveTarget:t=>({secid:t,code:t.split(".")[1]||t}),defaultPeriod:"1",ndays:"option",fqt:"option",includeUt:!0,window:{mode:"filter",endExtraDays:1},...rt(E.US,"USD")});async function Cr(t,e,n={}){return Gi(t,e,n)}function Or(t){let e=re(`eastmoney:board-code-map:${t.type}`,{defaultTTL:36e5,maxSize:4});return{async getCode(n,r,o){if(r.startsWith("BK"))return r;let s=(await e.getOrFetch("name-code-map",async()=>{let a=await o(n);if(a.length===0)throw new ee(`${t.errorPrefix}: \u677F\u5757\u5217\u8868\u63A5\u53E3\u8FD4\u56DE\u7A7A\u6570\u636E`,"eastmoney");return Object.fromEntries(a.map(l=>[l.name,l.code]))}))[r];if(!s)throw new ct(`${t.errorPrefix}: ${r}`,"eastmoney");return s}}}async function Pr(t,e){let n={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:e.type==="concept"?"f12":"f3",fs:e.fsFilter},r=e.type==="concept"?"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136":"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",o=await Rn(t,e.listUrl,n,r,100,(i,s)=>({rank:s,name:String(i.f14??""),code:String(i.f12??""),price:u(i.f2),change:u(i.f4),changePercent:u(i.f3),totalMarketCap:u(i.f20),turnoverRate:u(i.f8),riseCount:u(i.f104),fallCount:u(i.f105),leadingStock:i.f128?String(i.f128):null,leadingStockChangePercent:u(i.f136)}));return o.sort((i,s)=>(s.changePercent??0)-(i.changePercent??0)),o.forEach((i,s)=>{i.rank=s+1}),o}async function Dr(t,e,n){let r=new URLSearchParams({fields:"f43,f44,f45,f46,f47,f48,f170,f171,f168,f169",mpi:"1000",invt:"2",fltt:"1",secid:`90.${e}`}),o=`${n}?${r.toString()}`,s=(await t.get(o,{responseType:"json"}))?.data;return s?[{key:"f43",name:"\u6700\u65B0",divide:!0},{key:"f44",name:"\u6700\u9AD8",divide:!0},{key:"f45",name:"\u6700\u4F4E",divide:!0},{key:"f46",name:"\u5F00\u76D8",divide:!0},{key:"f47",name:"\u6210\u4EA4\u91CF",divide:!1},{key:"f48",name:"\u6210\u4EA4\u989D",divide:!1},{key:"f170",name:"\u6DA8\u8DCC\u5E45",divide:!0},{key:"f171",name:"\u632F\u5E45",divide:!0},{key:"f168",name:"\u6362\u624B\u7387",divide:!0},{key:"f169",name:"\u6DA8\u8DCC\u989D",divide:!0}].map(({key:l,name:c,divide:d})=>{let m=s[l],p=null;return typeof m=="number"&&!isNaN(m)&&(p=d?m/100:m),{item:c,value:p}}):[]}async function Ir(t,e,n){let r={po:"1",np:"1",ut:"bd1d9ddb04089700cf9c27f6f7426281",fltt:"2",invt:"2",fid:"f3",fs:`b:${e} f:!50`};return Rn(t,n,r,"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",100,(i,s)=>({rank:s,code:String(i.f12??""),name:String(i.f14??""),price:u(i.f2),changePercent:u(i.f3),change:u(i.f4),volume:u(i.f5),amount:u(i.f6),amplitude:u(i.f7),high:u(i.f15),low:u(i.f16),open:u(i.f17),prevClose:u(i.f18),turnoverRate:u(i.f8),pe:u(i.f9),pb:u(i.f23)}))}async function br(t,e,n,r={}){let{period:o="daily",adjust:i="",startDate:s="19700101",endDate:a="20500101"}=r;z(o),X(i);let l=new URLSearchParams({secid:`90.${e}`,fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",klt:$(o),fqt:J(i),beg:s,end:a,smplmt:"10000",lmt:"1000000"}),{klines:c}=await H(t,n,l);return c.length===0?[]:c.map(d=>B(d))}var Ar=new Map;async function kr(t,e,n,r,o={}){let i=`${n}|${r}`,s=Ar.get(i);return s||(s=ne({trendsUrl:r,klineUrl:n,resolveTarget:a=>({secid:`90.${a}`,code:a}),defaultPeriod:"5",ndays:{fixed:"1"},fqt:{fixed:"1"},includeUt:!1,window:{mode:"full",beg:"0",end:"20500101"},extraKlineParams:{smplmt:"10000",lmt:"1000000"},mapTrendRow:({avgPrice:a,...l})=>({...l,price:a}),mapKlineRow:a=>({time:a.date,open:a.open,close:a.close,high:a.high,low:a.low,changePercent:a.changePercent,change:a.change,volume:a.volume,amount:a.amount,amplitude:a.amplitude,turnoverRate:a.turnoverRate})}),Ar.set(i,s)),s(t,e,o)}function it(t){let e=Or(t);async function n(o){return Pr(o,t)}async function r(o,i){return e.getCode(o,i,n)}return{async getList(o){return n(o)},async getSpot(o,i){let s=await r(o,i);return Dr(o,s,t.spotUrl)},async getConstituents(o,i){let s=await r(o,i);return Ir(o,s,t.consUrl)},async getKline(o,i,s={}){let a=await r(o,i);return br(o,a,t.klineUrl,s)},async getMinuteKline(o,i,s={}){let a=await r(o,i);return kr(o,a,t.klineUrl,t.trendsUrl,s)}}}var Qi={type:"industry",fsFilter:"m:90 t:2 f:!50",listUrl:Lt,spotUrl:Ft,consUrl:vt,klineUrl:wt,trendsUrl:xt,errorPrefix:"\u672A\u627E\u5230\u884C\u4E1A\u677F\u5757"},Pe=it(Qi);async function Mr(t){return Pe.getList(t)}async function Nr(t,e){return Pe.getSpot(t,e)}async function Lr(t,e){return Pe.getConstituents(t,e)}async function Fr(t,e,n={}){return Pe.getKline(t,e,n)}async function vr(t,e,n={}){return Pe.getMinuteKline(t,e,n)}var Wi={type:"concept",fsFilter:"m:90 t:3 f:!50",listUrl:Ut,spotUrl:Kt,consUrl:Bt,klineUrl:Ht,trendsUrl:qt,errorPrefix:"\u672A\u627E\u5230\u6982\u5FF5\u677F\u5757"},De=it(Wi);async function wr(t){return De.getList(t)}async function xr(t,e){return De.getSpot(t,e)}async function Ur(t,e){return De.getConstituents(t,e)}async function Kr(t,e,n={}){return De.getKline(t,e,n)}async function Br(t,e,n={}){return De.getMinuteKline(t,e,n)}async function En(t,e,n){let{reportName:r,columns:o="ALL",filter:i,sortColumns:s,sortTypes:a,pageSize:l=500,startPage:c=1,fetchAllPages:d=!0,maxPages:m=1e3,quoteColumns:p,quoteType:g,extraParams:S}=e,A=[],h=c,C=1,I=0,U=0;do{let K=new URLSearchParams({reportName:r,columns:o,pageSize:String(l),pageNumber:String(h),source:"WEB",client:"WEB"});if(i&&K.set("filter",i),s&&K.set("sortColumns",s),a&&K.set("sortTypes",a),p&&K.set("quoteColumns",p),g&&K.set("quoteType",g),S)for(let[at,ut]of Object.entries(S))K.set(at,ut);let ti=`${zt}?${K.toString()}`,ae=(await t.get(ti,{responseType:"json"}))?.result;if(!ae||!Array.isArray(ae.data))break;h===c&&(C=ae.pages??1,I=ae.count??ae.data.length);let ni=ae.data.map((at,ut)=>n(at,A.length+ut));if(A.push(...ni),h++,U++,!d)break}while(h<=C&&U<m);return d&&U>=m&&h<=C&&console.warn(`[stock-sdk] fetchDatacenter("${r}") truncated at maxPages=${m} (server reports ${C} pages). Pass a larger \`maxPages\` to fetch the full dataset.`),{data:A,total:I,pages:C}}async function D(t,e,n){return(await En(t,e,n)).data}function F(t){if(t==null)return"";let e=String(t),n=e.match(/^(\d{4}-\d{2}-\d{2})/);return n?n[1]:e}function se(t){if(!t)return null;let e=t.match(/^(\d{4}-\d{2}-\d{2})/);return e?e[1]:null}function Vi(t){return{code:t.SECURITY_CODE??"",name:t.SECURITY_NAME_ABBR??"",reportDate:se(t.REPORT_DATE),planNoticeDate:se(t.PLAN_NOTICE_DATE),disclosureDate:se(t.PUBLISH_DATE??t.PLAN_NOTICE_DATE),assignTransferRatio:t.BONUS_IT_RATIO??null,bonusRatio:t.BONUS_RATIO??null,transferRatio:t.IT_RATIO??null,dividendPretax:t.PRETAX_BONUS_RMB??null,dividendDesc:t.IMPL_PLAN_PROFILE??null,dividendYield:t.DIVIDENT_RATIO??null,eps:t.BASIC_EPS??null,bps:t.BVPS??null,capitalReserve:t.PER_CAPITAL_RESERVE??null,unassignedProfit:t.PER_UNASSIGN_PROFIT??null,netProfitYoy:t.PNP_YOY_RATIO??null,totalShares:t.TOTAL_SHARES??null,equityRecordDate:se(t.EQUITY_RECORD_DATE),exDividendDate:se(t.EX_DIVIDEND_DATE),payDate:se(t.PAY_DATE),assignProgress:t.ASSIGN_PROGRESS??null,noticeDate:se(t.NOTICE_DATE)}}async function Hr(t,e){let n=e.replace(/^(sh|sz|bj)/,"");return D(t,{reportName:"RPT_SHAREBONUS_DET",sortColumns:"REPORT_DATE",sortTypes:"-1",pageSize:500,filter:`(SECURITY_CODE="${n}")`},r=>Vi(r))}var Zi="https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx",An="https://fund.eastmoney.com/pingzhongdata",Xi="https://fundgz.1234567.com.cn/js";function Ji(){return typeof document<"u"&&typeof window<"u"}var es=1e4;function ts(){return Number(w(E.CN).slice(0,4))}function ns(t,e){let n=new URLSearchParams({dt:"8",page:String(e),rank:t.rank??"FSRQ",sort:t.sort??"desc",gs:"",ftype:t.fundType??"",year:String(t.year??ts())});return`${Zi}?${n.toString()}`}function _n(t){if(!t)return null;let e=t.trim().match(/^(\d{4}-\d{2}-\d{2})/);return e?e[1]:null}function rs(t){return{code:t[0]??"",name:t[1]??"",equityRecordDate:_n(t[2]),exDividendDate:_n(t[3]),dividendPerShare:_(t[4]),payDate:_n(t[5]),dividendType:t[6]?.trim()?t[6].trim():null}}async function Cn(t,e,n){let r=ns(e,n),o=await ue(r,["pageinfo","jjfh_data"],{client:t}),i=o.pageinfo??[0,0,n],[s=0,a=0,l=n]=i;return{items:(o.jjfh_data??[]).map(rs),totalPages:s,pageSize:a,currentPage:l}}async function qr(t,e={}){if(e.page==="all"){let o=await Cn(t,e,1),i=o.items;for(let s=2;s<=o.totalPages;s++){let a=await Cn(t,e,s);i=i.concat(a.items)}return e.code&&(i=i.filter(s=>s.code===e.code)),{items:i,totalPages:o.totalPages,pageSize:o.pageSize,currentPage:-1}}let n=e.page??1,r=await Cn(t,e,n);return e.code?{...r,items:r.items.filter(o=>o.code===e.code)}:r}function On(t){return w(E.CN,t)}function Pn(t){return ie(le(t,E.CN))}function j(t,e){return t?.find(n=>n.name===e)?.data??[]}async function zr(t,e){let n=`${An}/${encodeURIComponent(e)}.js`,r=await ue(n,["fS_code","fS_name","Data_netWorthTrend","Data_ACWorthTrend"],{client:t}),o=r.Data_netWorthTrend??[],i=new Map;for(let a of r.Data_ACWorthTrend??[])Array.isArray(a)&&a.length>=2&&i.set(a[0],a[1]);let s=o.map(a=>({date:On(a.x),timestamp:a.x,nav:a.y,accNav:i.has(a.x)?i.get(a.x):null,dailyReturn:_(a.equityReturn),unitMoney:a.unitMoney??""}));return{code:r.fS_code??e,name:r.fS_name??null,items:s}}function os(t,e,n=es){let r=`${Xi}/${encodeURIComponent(e)}.js?rt=${Date.now()}`;return Ji()?ge("fundgz:jsonpgz",()=>is(r,n)):ss(t,r)}function is(t,e){return new Promise((n,r)=>{let o=document.createElement("script"),i=window,s=i.jsonpgz,a=!1,l=()=>{if(o.parentNode&&o.parentNode.removeChild(o),s===void 0)try{delete i.jsonpgz}catch{}else i.jsonpgz=s},c=setTimeout(()=>{a||(a=!0,l(),r(new P({code:"TIMEOUT",message:`fundgz JSONP timed out after ${e}ms: ${t}`,url:t,details:{timeout:e}})))},e);i.jsonpgz=d=>{a||(a=!0,clearTimeout(c),l(),n(d??{}))},o.onerror=()=>{a||(a=!0,clearTimeout(c),l(),r(new P({code:"NETWORK_ERROR",message:`fundgz JSONP script load failed: ${t}`,url:t})))},o.src=t,document.head.appendChild(o)})}async function ss(t,e){let r=(await t.get(e,{responseType:"text",provider:"eastmoney"})).trim();if(!r)return{};try{return ze(r)}catch{return{}}}async function $r(t,e){let n=await os(t,e);return{code:n.fundcode??e,name:n.name??null,navDate:n.jzrq?.trim()?n.jzrq.trim():null,nav:_(n.dwjz),estimatedNav:_(n.gsz),estimatedChangePercent:_(n.gszzl),estimateTime:n.gztime?.trim()?n.gztime.trim():null}}async function Yr(t,e){let n=`${An}/${encodeURIComponent(e)}.js`,r=await ue(n,["fS_code","fS_name","Data_rateInSimilarType","Data_rateInSimilarPersent"],{client:t}),o=r.Data_rateInSimilarType??[],i=new Map;for(let a of r.Data_rateInSimilarPersent??[])Array.isArray(a)&&a.length>=2&&i.set(a[0],a[1]);let s=o.map(a=>({date:On(a.x),timestamp:a.x,rank:_(a.y),total:_(a.sc),percentile:i.has(a.x)?i.get(a.x):null}));return{code:r.fS_code??e,name:r.fS_name??null,items:s}}function jr(t){let e=t.indexOf(".");return e<0?{code:t,marketId:""}:{marketId:t.slice(0,e),code:t.slice(e+1)}}function as(t){return t?t.map(e=>e.trim()).filter(Boolean).map(jr):[]}function us(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean).map(jr):[]}function ls(t){if(!t?.categories?.length||!t?.series)return[];let e=j(t.series,"\u80A1\u7968\u5360\u51C0\u6BD4"),n=j(t.series,"\u503A\u5238\u5360\u51C0\u6BD4"),r=j(t.series,"\u73B0\u91D1\u5360\u51C0\u6BD4"),o=j(t.series,"\u5176\u4ED6\u5360\u51C0\u6BD4"),i=j(t.series,"\u51C0\u8D44\u4EA7");return t.categories.map((s,a)=>({date:s,timestamp:Pn(s),stockRatio:e[a]??0,bondRatio:n[a]??0,cashRatio:r[a]??0,otherRatio:o[a]??0,netAsset:i[a]??0}))}function cs(t){return t?t.filter(([e])=>typeof e=="number"&&Number.isFinite(e)).map(([e,n])=>({date:On(e),timestamp:e,position:n})):[]}function ds(t){return t?t.map(e=>{let n=e?.star;return{id:e?.id??"",name:e?.name??"",avatarUrl:e?.pic?.trim()||null,star:typeof n=="number"&&Number.isFinite(n)?n:null,workTime:e?.workTime?.trim()||null,fundSize:e?.fundSize?.trim()||null,power:Gr(e?.power)}}):[]}function Gr(t){return t?.categories?.length?{overall:_(t.avr)??0,categories:t.categories,scores:t.data??[],descriptions:t.dsc??[]}:null}function ps(t){if(!t?.categories?.length||!t?.series)return[];let e=j(t.series,"\u673A\u6784\u6301\u6709\u6BD4\u4F8B"),n=j(t.series,"\u4E2A\u4EBA\u6301\u6709\u6BD4\u4F8B"),r=j(t.series,"\u5185\u90E8\u6301\u6709\u6BD4\u4F8B");return t.categories.map((o,i)=>({date:o,timestamp:Pn(o),institutionRatio:e[i]??0,individualRatio:n[i]??0,internalRatio:r[i]??0}))}function ms(t){return!t?.categories?.length||!t?.series?[]:t.categories.map((e,n)=>({date:e,scale:t.series?.[n]?.y??0,mom:t.series?.[n]?.mom??""}))}function gs(t){if(!t?.categories?.length||!t?.series)return[];let e=j(t.series,"\u671F\u95F4\u7533\u8D2D"),n=j(t.series,"\u671F\u95F4\u8D4E\u56DE"),r=j(t.series,"\u603B\u4EFD\u989D");return t.categories.map((o,i)=>({date:o,timestamp:Pn(o),buy:e[i]??0,sell:n[i]??0,total:r[i]??0}))}function fs(t){return{oneMonth:_(t.syl_1y),threeMonth:_(t.syl_3y),sixMonth:_(t.syl_6y),oneYear:_(t.syl_1n)}}function ys(t){if(typeof t!="string")return null;let e=t.indexOf("_");if(e<0)return null;let n=t.slice(0,e);if(!n)return null;let r=t.lastIndexOf("_");return r>e?{code:n,name:t.slice(e+1,r),value:_(t.slice(r+1))}:{code:n,name:t.slice(e+1),value:null}}function hs(t){if(!t?.length)return null;let e=t.map(n=>(Array.isArray(n)?n:[]).map(ys).filter(r=>r!==null)).filter(n=>n.length>0);return e.length?{groups:e}:null}async function Qr(t,e){let n=`${An}/${encodeURIComponent(e)}.js`,r=await ue(n,["fS_code","fS_name","fund_sourceRate","fund_Rate","fund_minsg","stockCodesNew","zqCodesNew","Data_assetAllocation","Data_fundSharesPositions","Data_currentFundManager","Data_performanceEvaluation","Data_holderStructure","Data_fluctuationScale","Data_buySedemption","syl_1y","syl_3y","syl_6y","syl_1n","swithSameType"],{client:t});return{code:r.fS_code??e,name:r.fS_name??null,sourceRate:_(r.fund_sourceRate),rate:_(r.fund_Rate),minSubscription:_(r.fund_minsg),holdings:as(r.stockCodesNew),bondHoldings:us(r.zqCodesNew),assetAllocation:ls(r.Data_assetAllocation),positions:cs(r.Data_fundSharesPositions),managers:ds(r.Data_currentFundManager),performance:Gr(r.Data_performanceEvaluation),holderStructure:ps(r.Data_holderStructure),scaleChanges:ms(r.Data_fluctuationScale),buySedemption:gs(r.Data_buySedemption),stageReturns:fs(r),sameType:hs(r.swithSameType)}}function Dn(t){let e=t.match(/^([a-zA-Z]+)/);if(!e)throw new R(`Invalid futures symbol: "${t}". Expected format: variety + contract (e.g., rb2605, RBM, IF2604)`);return e[1]}function Wr(t){return de[t]??de[t.toLowerCase()]??de[t.toUpperCase()]}function In(t){let e=Wr(t);if(!e&&t.length>1&&t.endsWith("M")&&(e=Wr(t.slice(0,-1))),!e){let r=Object.keys(de).join(", ");throw new R(`Unknown futures variety: "${t}". Supported varieties: ${r}`)}let n=Gt[e];if(n===void 0)throw new R(`No market code found for exchange: ${e}`);return n}function Ts(t){let e=B(t),n=t.split(",");return{...e,openInterest:n.length>12?y(n[12]):null}}async function Vr(t,e,n={}){let{period:r="daily",startDate:o="19700101",endDate:i="20500101"}=n;z(r);let s=Dn(e),l=`${In(s)}.${e}`,c=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",ut:N,klt:$(r),fqt:"0",secid:l,beg:o,end:i}),{klines:d,name:m,code:p}=await H(t,he,c);return d.length===0?[]:d.map(g=>({...Ts(g),code:p||e,name:m||""}))}async function Zr(t,e={}){let n=e.pageSize??20,r=[],o=0,i=0,s=1e3;do{let a=new URLSearchParams({orderBy:"dm",sort:"desc",pageSize:String(n),pageIndex:String(o),token:Te,field:"dm,sc,name,p,zsjd,zde,zdf,f152,o,h,l,zjsj,vol,wp,np,ccl",blockName:"callback"}),l=`${jt}?${a.toString()}`,c=await t.get(l,{responseType:"json"});if(!c||!Array.isArray(c.list))break;o===0&&(i=c.total??0);let d=c.list.map(Ss);if(r.push(...d),d.length===0)break;o++}while(r.length<i&&o<s);return r}function Ss(t){return{code:t.dm||"",name:t.name||"",price:y(String(t.p)),change:y(String(t.zde)),changePercent:y(String(t.zdf)),open:y(String(t.o)),high:y(String(t.h)),low:y(String(t.l)),prevSettle:y(String(t.zjsj)),volume:y(String(t.vol)),buyVolume:y(String(t.wp)),sellVolume:y(String(t.np)),openInterest:y(String(t.ccl))}}function Rs(t){let e=B(t),n=t.split(",");return{...e,openInterest:n.length>12?y(n[12]):null}}function Es(t){let e=t.match(/^([A-Z]+)/);if(!e)throw new R(`Invalid global futures symbol: "${t}". Expected format like HG00Y, CL2507`);return e[1]}async function Xr(t,e,n={}){let{period:r="daily",startDate:o="19700101",endDate:i="20500101"}=n;z(r);let s=n.marketCode;if(s===void 0){let p=Es(e);if(s=Qe[p],s===void 0){let g=Object.keys(Qe).join(", ");throw new R(`Unknown global futures variety: "${p}". Supported: ${g}. Or specify marketCode manually via options.`)}}let a=`${s}.${e}`,l=new URLSearchParams({fields1:"f1,f2,f3,f4,f5,f6",fields2:"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",ut:N,klt:$(r),fqt:"0",secid:a,beg:o,end:i}),{klines:c,name:d,code:m}=await H(t,he,l);return c.length===0?[]:c.map(p=>({...Rs(p),code:m||e,name:d||""}))}async function Jr(t,e={}){let{pageSize:n=2e4}=e,r=new URLSearchParams({orderBy:"zdf",sort:"desc",pageSize:String(n),pageIndex:"0",token:Te,field:"dm,sc,name,p,zsjd,zde,zdf,f152,vol,cje,ccl,xqj,syr,rz,zjsj,o"}),o=`${Xt}?${r.toString()}`,s=(await t.get(o,{responseType:"json"}))?.list;return Array.isArray(s)?s.map(a=>({code:String(a.dm??""),name:String(a.name??""),price:u(a.p),change:u(a.zde),changePercent:u(a.zdf),volume:u(a.vol),amount:u(a.cje),openInterest:u(a.ccl),strikePrice:u(a.xqj),remainDays:u(a.syr),dailyChange:u(a.rz),prevSettle:u(a.zjsj),open:u(a.o)})):[]}async function eo(t,e,n){let r=new URLSearchParams({type:"RPT_IF_BILLBOARD_TD",sty:"ALL",p:"1",ps:"200",source:"IFBILLBOARD",client:"WEB",ut:Y,filter:`(SECURITY_CODE="${e}")(TRADE_DATE='${n}')`}),o=`${Jt}?${r.toString()}`,s=(await t.get(o,{responseType:"json"}))?.result?.data;if(!Array.isArray(s))return[];function a(l){if(!l)return"";let c=String(l),d=c.match(/^(\d{4}-\d{2}-\d{2})/);return d?d[1]:c}return s.map(l=>({tradeType:String(l.TRADE_TYPE??""),date:a(l.TRADE_DATE),symbol:String(l.SECURITY_CODE??""),targetName:String(l.TARGET_NAME??""),memberName:String(l.MEMBER_NAME_ABBR??""),rank:u(l.MEMBER_RANK)??0,sellVolume:u(l.SELL_VOLUME),sellVolumeChange:u(l.SELL_VOLUME_CHANGE),netSellVolume:u(l.NET_SELL_VOLUME),sellVolumeRatio:u(l.SELL_VOLUME_RATIO),buyVolume:u(l.BUY_VOLUME),buyVolumeChange:u(l.BUY_VOLUME_CHANGE),netBuyVolume:u(l.NET_BUY_VOLUME),buyVolumeRatio:u(l.BUY_VOLUME_RATIO),sellPosition:u(l.SELL_POSITION),sellPositionChange:u(l.SELL_POSITION_CHANGE),netSellPosition:u(l.NET_SELL_POSITION),sellPositionRatio:u(l.SELL_POSITION_RATIO),buyPosition:u(l.BUY_POSITION),buyPositionChange:u(l.BUY_POSITION_CHANGE),netBuyPosition:u(l.NET_BUY_POSITION),buyPositionRatio:u(l.BUY_POSITION_RATIO)}))}var _s={gold:"EMI00069026",silver:"EMI00069027"};function to(t){if(!t)return"";let e=String(t),n=e.match(/^(\d{4}-\d{2}-\d{2})/);return n?n[1]:e}async function no(t){return D(t,{reportName:"RPT_FUTU_POSITIONCODE",columns:"TRADE_MARKET_CODE,TRADE_CODE,TRADE_TYPE",filter:'(IS_MAINCODE="1")',pageSize:500,fetchAllPages:!1},e=>({code:String(e.TRADE_CODE??""),name:String(e.TRADE_TYPE??""),marketCode:String(e.TRADE_MARKET_CODE??"")}))}async function ro(t,e,n={}){let{startDate:r="2020-10-28",pageSize:o=500}=n,i=e.toUpperCase();return D(t,{reportName:"RPT_FUTU_STOCKDATA",columns:"SECURITY_CODE,TRADE_DATE,ON_WARRANT_NUM,ADDCHANGE",filter:`(SECURITY_CODE="${i}")(TRADE_DATE>='${k(r)}')`,pageSize:o,sortColumns:"TRADE_DATE",sortTypes:"-1"},s=>({code:String(s.SECURITY_CODE??e),date:to(s.TRADE_DATE),inventory:u(s.ON_WARRANT_NUM),change:u(s.ADDCHANGE)}))}async function oo(t,e,n={}){let r=_s[e];if(!r)throw new R(`Invalid COMEX symbol: "${e}". Must be "gold" or "silver".`);let{pageSize:o=500}=n,i={gold:"\u9EC4\u91D1",silver:"\u767D\u94F6"};return D(t,{reportName:"RPT_FUTUOPT_GOLDSIL",sortColumns:"REPORT_DATE",sortTypes:"-1",pageSize:o,filter:`(INDICATOR_ID1="${r}")(@STORAGE_TON<>"NULL")`},s=>({date:to(s.REPORT_DATE),name:i[e]??e,storageTon:u(s.STORAGE_TON),storageOunce:u(s.STORAGE_OUNCE)}))}var io={daily:"101",weekly:"102",monthly:"103"},bn="f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65";function so(t){let e=t.split(",");return{date:e[0]??"",mainNetInflow:y(e[1]),smallNetInflow:y(e[2]),mediumNetInflow:y(e[3]),largeNetInflow:y(e[4]),superLargeNetInflow:y(e[5]),mainNetInflowPercent:y(e[6]),smallNetInflowPercent:y(e[7]),mediumNetInflowPercent:y(e[8]),largeNetInflowPercent:y(e[9]),superLargeNetInflowPercent:y(e[10]),close:y(e[11]),changePercent:y(e[12])}}function Cs(t){let e=t.split(",");return{date:e[0]??"",mainNetInflow:y(e[1]),smallNetInflow:y(e[2]),mediumNetInflow:y(e[3]),largeNetInflow:y(e[4]),superLargeNetInflow:y(e[5]),mainNetInflowPercent:y(e[6]),smallNetInflowPercent:y(e[7]),mediumNetInflowPercent:y(e[8]),largeNetInflowPercent:y(e[9]),superLargeNetInflowPercent:y(e[10]),shClose:y(e[11]),shChangePercent:y(e[12]),szClose:y(e[13]),szChangePercent:y(e[14])}}var ao={today:{fid:"f62",fields:"f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f124",changePercentField:"f3",mainNet:"f62",mainPct:"f184",superLargeNet:"f66",superLargePct:"f69",largeNet:"f72",largePct:"f75",mediumNet:"f78",mediumPct:"f81",smallNet:"f84",smallPct:"f87"},"3day":{fid:"f267",fields:"f12,f14,f2,f127,f267,f268,f269,f270,f271,f272,f273,f274,f275,f276,f124",changePercentField:"f127",mainNet:"f267",mainPct:"f268",superLargeNet:"f269",superLargePct:"f270",largeNet:"f271",largePct:"f272",mediumNet:"f273",mediumPct:"f274",smallNet:"f275",smallPct:"f276"},"5day":{fid:"f164",fields:"f12,f14,f2,f109,f164,f165,f166,f167,f168,f169,f170,f171,f172,f173,f124",changePercentField:"f109",mainNet:"f164",mainPct:"f165",superLargeNet:"f166",superLargePct:"f167",largeNet:"f168",largePct:"f169",mediumNet:"f170",mediumPct:"f171",smallNet:"f172",smallPct:"f173"},"10day":{fid:"f174",fields:"f12,f14,f2,f160,f174,f175,f176,f177,f178,f179,f180,f181,f182,f183,f124",changePercentField:"f160",mainNet:"f174",mainPct:"f175",superLargeNet:"f176",superLargePct:"f177",largeNet:"f178",largePct:"f179",mediumNet:"f180",mediumPct:"f181",smallNet:"f182",smallPct:"f183"}},As={industry:"m:90+t:2",concept:"m:90+t:3",region:"m:90+t:1"},Os="m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2";async function uo(t,e,n=100,r=1e3){let o=[],i=1,s=0;do{let a=new URLSearchParams({...e,pn:String(i),pz:String(n)}),l=`${$t}?${a.toString()}`,d=(await t.get(l,{responseType:"json"}))?.data;if(!d||!Array.isArray(d.diff)||(i===1&&(s=d.total??0),o.push(...d.diff),o.length>=s||d.diff.length<n))break;i++}while(o.length<s&&i<=r);return i>r&&o.length<s&&console.warn(`[stock-sdk] fetchClistAllPages truncated at maxPages=${r} (server reports total=${s}, fetched=${o.length}). Pass a larger \`maxPages\` to fetch the full dataset.`),o}async function lo(t,e,n={}){let{period:r="daily"}=n,o=io[r];if(!o)throw new R(`Invalid period: ${r}. Must be daily/weekly/monthly.`);let i;try{i=Q(e,{market:"CN"})}catch(m){let p=e.includes(".")?e.slice(e.indexOf(".")+1):e;throw m instanceof dt&>(p)?new R(`Individual fund flow is not available for index symbols: ${e}`):m}if(i.assetType==="index"&>(i.code))throw new R(`Individual fund flow is not available for index symbols: ${e}`);let s=W(i),a=new URLSearchParams({lmt:"0",klt:o,secid:s,fields1:"f1,f2,f3,f7",fields2:bn,ut:Y}),l=`${ye}?${a.toString()}`,d=(await t.get(l,{responseType:"json"}))?.data?.klines;return!Array.isArray(d)||d.length===0?[]:d.map(so)}async function co(t){let e=new URLSearchParams({lmt:"0",klt:"101",secid:"1.000001",secid2:"0.399001",fields1:"f1,f2,f3,f7",fields2:bn,ut:Y}),n=`${ye}?${e.toString()}`,o=(await t.get(n,{responseType:"json"}))?.data?.klines;return!Array.isArray(o)||o.length===0?[]:o.map(Cs)}async function po(t,e={}){let{indicator:n="today"}=e,r=ao[n];if(!r)throw new R(`Invalid indicator: ${n}.`);let o={fid:r.fid,po:"1",np:"1",fltt:"2",invt:"2",ut:Y,fs:Os,fields:r.fields};return(await uo(t,o,100)).map(s=>({code:String(s.f12??""),name:String(s.f14??""),price:u(s.f2),changePercent:u(s[r.changePercentField]),mainNetInflow:u(s[r.mainNet]),mainNetInflowPercent:u(s[r.mainPct]),superLargeNetInflow:u(s[r.superLargeNet]),superLargeNetInflowPercent:u(s[r.superLargePct]),largeNetInflow:u(s[r.largeNet]),largeNetInflowPercent:u(s[r.largePct]),mediumNetInflow:u(s[r.mediumNet]),mediumNetInflowPercent:u(s[r.mediumPct]),smallNetInflow:u(s[r.smallNet]),smallNetInflowPercent:u(s[r.smallPct])}))}async function mo(t,e={}){let{indicator:n="today",sectorType:r="industry"}=e,o=ao[n];if(!o)throw new R(`Invalid indicator: ${n}.`);let i=As[r];if(!i)throw new R(`Invalid sectorType: ${r}.`);let s=`${o.fields},f204,f205`,a={fid:o.fid,po:"1",np:"1",fltt:"2",invt:"2",ut:Y,fs:i,fields:s};return(await uo(t,a,100)).map(c=>({code:String(c.f12??""),name:String(c.f14??""),changePercent:u(c[o.changePercentField]),mainNetInflow:u(c[o.mainNet]),mainNetInflowPercent:u(c[o.mainPct]),superLargeNetInflow:u(c[o.superLargeNet]),largeNetInflow:u(c[o.largeNet]),mediumNetInflow:u(c[o.mediumNet]),smallNetInflow:u(c[o.smallNet]),topStockCode:c.f204?String(c.f204):void 0,topStockName:c.f205?String(c.f205):void 0}))}async function go(t,e,n={}){let{period:r="daily"}=n,o=io[r];if(!o)throw new R(`Invalid period: ${r}. Must be daily/weekly/monthly.`);let i=e.includes(".")?e:`90.${e}`,s=new URLSearchParams({lmt:"0",klt:o,secid:i,fields1:"f1,f2,f3,f7",fields2:bn,ut:Y}),a=`${ye}?${s.toString()}`,c=(await t.get(a,{responseType:"json"}))?.data?.klines;return!Array.isArray(c)||c.length===0?[]:c.map(so)}var Ps={today:"1","3day":"3","5day":"5","10day":"10",month:"M",quarter:"Q",year:"Y"},Ds={shanghai:"001",shenzhen:"003"};function fo(t,e){let n=t.split(",");return{date:e,time:n[0]??"",shanghaiNetInflow:y(n[1]),shenzhenNetInflow:y(n[3]),totalNetInflow:y(n[5])}}async function yo(t,e="north"){qe(e);let n=new URLSearchParams({fields1:"f1,f2,f3,f4",fields2:"f51,f54,f52,f58,f53,f62,f56,f57,f60,f61",ut:Y}),r=`${Yt}?${n.toString()}`,i=(await t.get(r,{responseType:"json"}))?.data;if(!i)return[];if(e==="south"){let l=i.n2s??[],c=i.n2sDate??"";return l.map(d=>fo(d,k(c)))}let s=i.s2n??[],a=i.s2nDate??"";return s.map(l=>fo(l,k(a)))}async function ho(t){return D(t,{reportName:"RPT_MUTUAL_QUOTA",columns:"TRADE_DATE,MUTUAL_TYPE,BOARD_TYPE,MUTUAL_TYPE_NAME,FUNDS_DIRECTION,INDEX_CODE,INDEX_NAME,BOARD_CODE",quoteColumns:"status~07~BOARD_CODE,dayNetAmtIn~07~BOARD_CODE,dayAmtRemain~07~BOARD_CODE,dayAmtThreshold~07~BOARD_CODE,f104~07~BOARD_CODE,f105~07~BOARD_CODE,f106~07~BOARD_CODE,f3~03~INDEX_CODE~INDEX_f3,netBuyAmt~07~BOARD_CODE",quoteType:"0",sortColumns:"MUTUAL_TYPE",sortTypes:"1",pageSize:2e3,fetchAllPages:!1},e=>({date:F(e.TRADE_DATE),type:String(e.MUTUAL_TYPE??""),boardName:String(e.MUTUAL_TYPE_NAME??""),direction:String(e.FUNDS_DIRECTION??""),status:String(e.status??""),netBuyAmount:u(e.netBuyAmt),netInflow:u(e.dayNetAmtIn),remainAmount:u(e.dayAmtRemain),upCount:u(e.f104),flatCount:u(e.f106),downCount:u(e.f105),indexCode:String(e.INDEX_CODE??""),indexName:String(e.INDEX_NAME??""),indexChangePercent:u(e.INDEX_f3)}))}async function To(t,e={}){let{market:n="all",period:r="5day",date:o}=e,i=Ps[r];if(!i)throw new R(`Invalid period: ${r}.`);let s=[`(INTERVAL_TYPE="${i}")`];return o&&s.push(`(TRADE_DATE='${o}')`),n!=="all"&&s.push(`(MUTUAL_TYPE="${Ds[n]}")`),D(t,{reportName:"RPT_MUTUAL_STOCK_NORTHSTA",columns:"ALL",sortColumns:"ADD_MARKET_CAP",sortTypes:"-1",pageSize:500,filter:s.join("")},a=>({date:F(a.TRADE_DATE),code:String(a.SECURITY_CODE??""),name:String(a.SECURITY_NAME??a.SECURITY_NAME_ABBR??""),close:u(a.CLOSE_PRICE),changePercent:u(a.CHANGE_RATE),holdShares:u(a.HOLD_SHARES),holdMarketValue:u(a.HOLD_MARKET_CAP),holdRatioFloat:u(a.HOLD_RATIO),holdRatioTotal:u(a.A_SHARES_RATIO),addShares:u(a.ADD_SHARES),addMarketValue:u(a.ADD_MARKET_CAP),addMarketValuePercent:u(a.ADD_MARKET_CAP_PROPORTION),sector:String(a.BOARD_NAME??"")}))}async function So(t,e="north",n={}){qe(e);let{startDate:r,endDate:o}=n,i=[e==="north"?'(BOARD_TYPE="1")':'(BOARD_TYPE="0")'];return r&&i.push(`(TRADE_DATE>='${k(r)}')`),o&&i.push(`(TRADE_DATE<='${k(o)}')`),D(t,{reportName:"RPT_MUTUAL_DEAL_HISTORY",columns:"ALL",sortColumns:"TRADE_DATE",sortTypes:"-1",pageSize:500,filter:i.join("")},s=>({date:F(s.TRADE_DATE),netBuyAmount:u(s.NET_DEAL_AMT),buyAmount:u(s.BUY_AMT),sellAmount:u(s.SELL_AMT),accNetBuyAmount:u(s.ACCUM_DEAL_AMT),netInflow:u(s.FUND_INFLOW),remainAmount:u(s.QUOTA_BALANCE),topStockCode:s.LEAD_STOCKS_CODE?String(s.LEAD_STOCKS_CODE):null,topStockName:s.LEAD_STOCKS_NAME?String(s.LEAD_STOCKS_NAME):null,topStockChangePercent:u(s.LS_CHANGE_RATE)}))}async function Ro(t,e,n={}){let r=e.replace(/^(sh|sz|bj)/i,""),{startDate:o,endDate:i}=n,s=[`(SECURITY_CODE="${r}")`];return o&&s.push(`(TRADE_DATE>='${k(o)}')`),i&&s.push(`(TRADE_DATE<='${k(i)}')`),D(t,{reportName:"RPT_MUTUAL_HOLDSTOCKNORTH_STA",columns:"ALL",sortColumns:"TRADE_DATE",sortTypes:"-1",pageSize:500,filter:s.join("")},a=>({date:F(a.TRADE_DATE),holdShares:u(a.HOLD_SHARES),holdMarketValue:u(a.HOLD_MARKET_CAP),holdRatioFloat:u(a.HOLD_RATIO),holdRatioTotal:u(a.A_SHARES_RATIO),close:u(a.CLOSE_PRICE),changePercent:u(a.CHANGE_RATE)}))}var Is={zt:{path:"/getTopicZTPool",sort:"fbt:asc"},yesterday:{path:"/getYesterdayZTPool",sort:"zs:desc"},strong:{path:"/getTopicQSPool",sort:"zdp:desc"},sub_new:{path:"/getTopicCXPool",sort:"ods:asc"},broken:{path:"/getTopicZBPool",sort:"fbt:asc"},dt:{path:"/getTopicDTPool",sort:"fund:asc"}},kn={rocket_launch:"8201",quick_rebound:"8202",large_buy:"8193",limit_up_seal:"4",limit_down_open:"32",big_buy_order:"64",auction_up:"8207",high_open_5d:"8209",gap_up:"8211",high_60d:"8213",surge_60d:"8215",accelerate_down:"8204",high_dive:"8203",large_sell:"8194",limit_down_seal:"8",limit_up_open:"16",big_sell_order:"128",auction_down:"8208",low_open_5d:"8210",gap_down:"8212",low_60d:"8214",drop_60d:"8216"},_o=Object.fromEntries(Object.entries(kn).map(([t,e])=>[e,t])),Co={8201:"\u706B\u7BAD\u53D1\u5C04",8202:"\u5FEB\u901F\u53CD\u5F39",8193:"\u5927\u7B14\u4E70\u5165",4:"\u5C01\u6DA8\u505C\u677F",32:"\u6253\u5F00\u8DCC\u505C\u677F",64:"\u6709\u5927\u4E70\u76D8",8207:"\u7ADE\u4EF7\u4E0A\u6DA8",8209:"\u9AD8\u5F005\u65E5\u7EBF",8211:"\u5411\u4E0A\u7F3A\u53E3",8213:"60\u65E5\u65B0\u9AD8",8215:"60\u65E5\u5927\u5E45\u4E0A\u6DA8",8204:"\u52A0\u901F\u4E0B\u8DCC",8203:"\u9AD8\u53F0\u8DF3\u6C34",8194:"\u5927\u7B14\u5356\u51FA",8:"\u5C01\u8DCC\u505C\u677F",16:"\u6253\u5F00\u6DA8\u505C\u677F",128:"\u6709\u5927\u5356\u76D8",8208:"\u7ADE\u4EF7\u4E0B\u8DCC",8210:"\u4F4E\u5F005\u65E5\u7EBF",8212:"\u5411\u4E0B\u7F3A\u53E3",8214:"60\u65E5\u65B0\u4F4E",8216:"60\u65E5\u5927\u5E45\u4E0B\u8DCC"};function st(t){if(t==null)return"";let e=String(t).padStart(6,"0");return`${e.slice(0,2)}:${e.slice(2,4)}:${e.slice(4,6)}`}function bs(t){if(!t||typeof t!="object")return"";let e=t;return`${e.days??""}/${e.ct??""}`}function ks(t){let e=u(t.p),n=u(t.tp);return{code:String(t.c??t.m??""),name:String(t.n??""),price:e!==null?e/1e3:null,changePercent:u(t.zdp),limitPrice:n!==null?n/1e3:null,amount:u(t.amount??t.zb),floatMarketValue:u(t.ltsz),totalMarketValue:u(t.tshare),turnoverRate:u(t.hs),continuousBoardCount:u(t.lbc),firstBoardTime:t.fbt!==void 0&&t.fbt!==null?st(t.fbt):null,lastBoardTime:t.lbt!==void 0&&t.lbt!==null?st(t.lbt):null,boardAmount:u(t.fund),sealAmount:u(t.fund),failedCount:u(t.zbc),industry:String(t.hybk??""),ztStatistics:bs(t.zttj),amplitude:u(t.zf),speed:u(t.zs)}}function Ao(t){if(t)return/^\d{8}$/.test(t)?t:t.replace(/-/g,"")}function Oo(){return w(E.CN).replace(/-/g,"")}async function Po(t,e="zt",n){let r=Is[e];if(!r)throw new R(`Invalid ZTPool type: ${e}.`);let o=Ao(n)??Oo(),i=new URLSearchParams({ut:N,dpt:"wz.ztzt",Pageindex:"0",pagesize:"10000",sort:r.sort,date:o}),s=`${ce}${r.path}?${i.toString()}`,l=(await t.get(s,{responseType:"json"}))?.data?.pool;return!Array.isArray(l)||l.length===0?[]:l.map(ks)}var Eo=5e3,Ms=10;async function Do(t,e="large_buy"){let n=e==="all"?Object.keys(kn):Array.isArray(e)?e:[e];if(n.length===0)throw new R("StockChangeType \u6570\u7EC4\u4E0D\u80FD\u4E3A\u7A7A\u3002");let r=n.map(a=>{let l=kn[a];if(!l)throw new R(`Invalid StockChangeType: ${a}.`);return l}),o=r.length===1?r[0]:"",i=[],s=null;for(let a=0;a<Ms;a++){let l=new URLSearchParams({pageindex:String(a),pagesize:String(Eo),ut:N,dpt:"wzchanges"}),c=`${ce}/getAllStockChanges?type=${r.join(",")}&${l.toString()}`,d=await t.get(c,{responseType:"json"}),m=u(d?.data?.tc);m!==null&&(s=m);let p=d?.data?.allstock;if(!Array.isArray(p)||p.length===0)break;for(let g of p){let S=String(g.t??o);i.push({time:st(g.tm),code:String(g.c??""),name:String(g.n??""),typeCode:S,changeType:_o[S]??"unknown",changeTypeLabel:Co[S]??"",info:String(g.i??"")})}if(p.length<Eo||s!==null&&i.length>=s)break}return i}function Mn(t){let e=Q(t,{market:"CN"});if(e.assetType!=="stock")throw new R(`\u4E2A\u80A1\u76D8\u53E3\u5F02\u52A8\u4EC5\u652F\u6301 A \u80A1\u4E2A\u80A1,\u6536\u5230 assetType='${e.assetType}'(symbol=${t})`,{argument:"symbol",value:t,assetType:e.assetType});return e}async function Io(t,e,n){let r=Mn(e),[o,i]=W(r).split("."),s=Ao(n)??Oo(),a=k(s),l=new URLSearchParams({ut:N,dpt:"wzchanges",code:i,market:o,date:s}),c=`${ce}/getStockChanges?${l.toString()}`,m=(await t.get(c,{responseType:"json"}))?.data;if(!m)return{date:a,available:!1,code:r.code,name:"",changes:[]};let g=(Array.isArray(m.data)?m.data:[]).map(h=>{let C=String(h.t??""),I=u(h.p);return{time:st(h.tm),typeCode:C,changeType:_o[C]??"unknown",changeTypeLabel:Co[C]??"",price:I!==null?I/1e3:null,changePercent:u(h.u),info:String(h.i??""),v:u(h.v)}}),S=String(m.d??"");return{date:/^\d{8}$/.test(S)?k(S):a,available:!0,code:String(m.c??r.code),name:String(m.n??""),changes:g}}async function bo(t){let e=new URLSearchParams({ut:N,dpt:"wzchanges",pageindex:"0",pagesize:"5000"}),n=`${ce}/getAllBKChanges?${e.toString()}`,o=(await t.get(n,{responseType:"json"}))?.data?.allbk;return!Array.isArray(o)||o.length===0?[]:o.map(i=>{let s=i.ms??{},a=s.m===0?"\u5927\u7B14\u4E70\u5165":s.m===1?"\u5927\u7B14\u5356\u51FA":"",l={},c=i.bkdf??i.bkdfdis;if(c&&typeof c=="object")for(let[d,m]of Object.entries(c))l[d]=Number(m)||0;return{name:String(i.bkn??""),changePercent:u(i.bkz),mainNetInflow:u(i.bkj),totalChangeCount:u(i.bkc),topStockCode:String(s.c??""),topStockName:String(s.n??""),topStockDirection:a,changeTypeDistribution:l}})}var ko={"1month":"01","3month":"02","6month":"03","1year":"04"};async function Mo(t,e){let n=k(e.startDate),r=k(e.endDate);return D(t,{reportName:"RPT_DAILYBILLBOARD_DETAILSNEW",columns:"SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,TRADE_DATE,EXPLAIN,CLOSE_PRICE,CHANGE_RATE,BILLBOARD_NET_AMT,BILLBOARD_BUY_AMT,BILLBOARD_SELL_AMT,BILLBOARD_DEAL_AMT,ACCUM_AMOUNT,DEAL_NET_RATIO,DEAL_AMOUNT_RATIO,TURNOVERRATE,FREE_MARKET_CAP,EXPLANATION,D1_CLOSE_ADJCHRATE,D2_CLOSE_ADJCHRATE,D5_CLOSE_ADJCHRATE,D10_CLOSE_ADJCHRATE",sortColumns:"SECURITY_CODE,TRADE_DATE",sortTypes:"1,-1",pageSize:5e3,filter:`(TRADE_DATE<='${r}')(TRADE_DATE>='${n}')`},o=>({code:String(o.SECURITY_CODE??""),name:String(o.SECURITY_NAME_ABBR??""),date:F(o.TRADE_DATE),close:u(o.CLOSE_PRICE),changePercent:u(o.CHANGE_RATE),netBuyAmount:u(o.BILLBOARD_NET_AMT),buyAmount:u(o.BILLBOARD_BUY_AMT),sellAmount:u(o.BILLBOARD_SELL_AMT),dealAmount:u(o.BILLBOARD_DEAL_AMT),totalAmount:u(o.ACCUM_AMOUNT),netBuyRatio:u(o.DEAL_NET_RATIO),dealAmountRatio:u(o.DEAL_AMOUNT_RATIO),turnoverRate:u(o.TURNOVERRATE),floatMarketValue:u(o.FREE_MARKET_CAP),reason:String(o.EXPLANATION??o.EXPLAIN??""),afterChange1d:u(o.D1_CLOSE_ADJCHRATE),afterChange2d:u(o.D2_CLOSE_ADJCHRATE),afterChange5d:u(o.D5_CLOSE_ADJCHRATE),afterChange10d:u(o.D10_CLOSE_ADJCHRATE)}))}async function No(t,e="1month"){let n=ko[e];if(!n)throw new R(`Invalid period: ${e}.`);return D(t,{reportName:"RPT_BILLBOARD_TRADEALL",columns:"ALL",sortColumns:"BILLBOARD_TIMES,LATEST_TDATE,SECURITY_CODE",sortTypes:"-1,-1,1",pageSize:5e3,filter:`(STATISTICS_CYCLE="${n}")`},r=>({code:String(r.SECURITY_CODE??""),name:String(r.SECURITY_NAME_ABBR??""),latestDate:F(r.LATEST_TDATE),close:u(r.CLOSE_PRICE),changePercent:u(r.CHANGE_RATE),count:u(r.BILLBOARD_TIMES),totalBuyAmount:u(r.BILLBOARD_BUY_AMT),totalSellAmount:u(r.BILLBOARD_SELL_AMT),totalNetAmount:u(r.BILLBOARD_NET_AMT),totalDealAmount:u(r.BILLBOARD_DEAL_AMT),buyOrgCount:u(r.ORG_BUY_TIMES),sellOrgCount:u(r.ORG_SELL_TIMES)}))}async function Lo(t,e){let n=k(e.startDate),r=k(e.endDate);return D(t,{reportName:"RPT_ORGANIZATION_TRADE_DETAILS",columns:"ALL",sortColumns:"TRADE_DATE,SECURITY_CODE",sortTypes:"-1,1",pageSize:5e3,filter:`(TRADE_DATE<='${r}')(TRADE_DATE>='${n}')`},o=>({code:String(o.SECURITY_CODE??""),name:String(o.SECURITY_NAME_ABBR??""),date:F(o.TRADE_DATE),close:u(o.CLOSE_PRICE),changePercent:u(o.CHANGE_RATE),buyOrgCount:u(o.BUY_TIMES),sellOrgCount:u(o.SELL_TIMES),orgBuyAmount:u(o.BUY_AMT),orgSellAmount:u(o.SELL_AMT),orgNetAmount:u(o.NET_AMT)}))}async function Fo(t,e="1month"){let n=ko[e];if(!n)throw new R(`Invalid period: ${e}.`);return D(t,{reportName:"RPT_BILLBOARD_TRADEDETAILS",columns:"ALL",sortColumns:"TOTAL_BUYER_SALESTIMES",sortTypes:"-1",pageSize:5e3,filter:`(STATISTICS_CYCLE="${n}")`},r=>({code:String(r.OPERATEDEPT_CODE??""),name:String(r.OPERATEDEPT_NAME??""),totalBuyAmount:u(r.TOTAL_BUYAMT??r.BUY_AMT),totalSellAmount:u(r.TOTAL_SELLAMT??r.SELL_AMT),buyCount:u(r.TOTAL_BUYER_SALESTIMES??r.BUY_TIMES),sellCount:u(r.TOTAL_SELLER_SALESTIMES??r.SELL_TIMES),totalCount:u(r.TOTAL_TIMES)}))}async function vo(t,e,n){let r=e.replace(/^(sh|sz|bj)/i,""),o=k(n),i=`(SECURITY_CODE="${r}")(TRADE_DATE='${o}')`,[s,a]=await Promise.all([D(t,{reportName:"RPT_BILLBOARD_DAILYDETAILSBUY",columns:"ALL",sortColumns:"BUY_AMT_REAL",sortTypes:"-1",pageSize:100,filter:i},(l,c)=>({rank:u(l.RANK)??c+1,branchName:String(l.OPERATEDEPT_NAME??""),buyAmount:u(l.BUY_AMT_REAL??l.BUY_AMT),buyAmountRatio:u(l.BUY_RATIO_TOTAL??l.BUY_AMT_RATIO),sellAmount:u(l.SELL_AMT_REAL??l.SELL_AMT),sellAmountRatio:u(l.SELL_RATIO_TOTAL??l.SELL_AMT_RATIO),netAmount:u(l.NET_AMT),side:"buy"})),D(t,{reportName:"RPT_BILLBOARD_DAILYDETAILSSELL",columns:"ALL",sortColumns:"SELL_AMT_REAL",sortTypes:"-1",pageSize:100,filter:i},(l,c)=>({rank:u(l.RANK)??c+1,branchName:String(l.OPERATEDEPT_NAME??""),buyAmount:u(l.BUY_AMT_REAL??l.BUY_AMT),buyAmountRatio:u(l.BUY_RATIO_TOTAL??l.BUY_AMT_RATIO),sellAmount:u(l.SELL_AMT_REAL??l.SELL_AMT),sellAmountRatio:u(l.SELL_RATIO_TOTAL??l.SELL_AMT_RATIO),netAmount:u(l.NET_AMT),side:"sell"}))]);return[...s,...a]}function wo(t){if(!t)return"";let e=t.startDate?k(t.startDate):void 0,n=t.endDate?k(t.endDate):void 0,r=[];return e&&r.push(`(TRADE_DATE>='${e}')`),n&&r.push(`(TRADE_DATE<='${n}')`),r.join("")}async function xo(t){return D(t,{reportName:"PRT_BLOCKTRADE_MARKET_STA",columns:"ALL",sortColumns:"TRADE_DATE",sortTypes:"-1",pageSize:500},e=>({date:F(e.TRADE_DATE),shClose:u(e.CLOSE_PRICE??e.SH_CLOSE_PRICE),shChangePercent:u(e.CHANGE_RATE??e.SH_CHANGE_RATE),totalAmount:u(e.TURNOVER??e.TOTAL_AMOUNT),premiumAmount:u(e.PREMIUM_TURNOVER??e.PREMIUM_AMOUNT),premiumRatio:u(e.PREMIUM_RATIO),discountAmount:u(e.DISCOUNT_TURNOVER??e.DISCOUNT_AMOUNT),discountRatio:u(e.DISCOUNT_RATIO)}))}async function Uo(t,e={}){let n=wo(e);return D(t,{reportName:"RPT_BLOCK_TRADE_DETAIL",columns:"ALL",sortColumns:"TRADE_DATE,SECURITY_CODE",sortTypes:"-1,1",pageSize:5e3,filter:n||void 0},r=>({code:String(r.SECURITY_CODE??""),name:String(r.SECURITY_NAME_ABBR??""),date:F(r.TRADE_DATE),close:u(r.CLOSE_PRICE),changePercent:u(r.CHANGE_RATE),dealPrice:u(r.DEAL_PRICE??r.PRICE),dealVolume:u(r.DEAL_VOLUME??r.VOLUME),dealAmount:u(r.DEAL_AMT??r.TURNOVER),premiumRate:u(r.PREMIUM_RATIO??r.PREMIUM_RATE),buyBranch:String(r.BUYER_DEPT??r.BUYER_OPERATEDEPT_NAME??""),sellBranch:String(r.SELLER_DEPT??r.SELLER_OPERATEDEPT_NAME??"")}))}async function Ko(t,e={}){let n=wo(e);return D(t,{reportName:"RPT_BLOCK_TRADE_STA",columns:"ALL",sortColumns:"TRADE_DATE,DEAL_AMT",sortTypes:"-1,-1",pageSize:5e3,filter:n||void 0},r=>({code:String(r.SECURITY_CODE??""),name:String(r.SECURITY_NAME_ABBR??""),date:F(r.TRADE_DATE),changePercent:u(r.CHANGE_RATE),close:u(r.CLOSE_PRICE),dealCount:u(r.DEAL_NUM??r.DEAL_COUNT),dealTotalAmount:u(r.DEAL_AMT??r.TOTAL_AMOUNT),dealTotalVolume:u(r.DEAL_VOLUME??r.TOTAL_VOLUME),premiumAmount:u(r.PREMIUM_AMT??r.PREMIUM_AMOUNT),discountAmount:u(r.DISCOUNT_AMT??r.DISCOUNT_AMOUNT)}))}async function Bo(t){return D(t,{reportName:"RPTA_WEB_MARGIN_DAILYTRADE",columns:"ALL",sortColumns:"STATISTICS_DATE",sortTypes:"-1",pageSize:500},e=>({date:F(e.STATISTICS_DATE??e.TRADE_DATE),finBalance:u(e.FIN_BALANCE),loanBalance:u(e.LOAN_BALANCE),finBuyAmount:u(e.FIN_BUY_AMT),loanSellAmount:u(e.LOAN_SELL_AMT),investorCount:u(e.OPERATE_INVESTOR_NUM??e.INVESTOR_NUM),liabilityInvestorCount:u(e.MARGIN_INVESTOR_NUM),totalGuarantee:u(e.TOTAL_GUARANTEE),avgGuaranteeRatio:u(e.AVG_GUARANTEE_RATIO)}))}async function Ho(t,e){let n=e?`(TRADE_DATE='${e}')`:void 0;return D(t,{reportName:"RPT_MARGIN_TRADE_DETAIL",columns:"ALL",sortColumns:"FIN_BALANCE",sortTypes:"-1",pageSize:5e3,filter:n},r=>({code:String(r.SECURITY_CODE??""),name:String(r.SECURITY_NAME_ABBR??""),date:F(r.TRADE_DATE),finBalance:u(r.FIN_BALANCE),finBuyAmount:u(r.FIN_BUY_AMT),finRepayAmount:u(r.FIN_REPAY_AMT),loanBalance:u(r.LOAN_BALANCE),loanSellVolume:u(r.LOAN_SELL_VOLUME),loanRepayVolume:u(r.LOAN_REPAY_VOLUME)}))}var Nn="https://fundmobapi.eastmoney.com/FundMNewApi",Ln={plat:"Android",appType:"ttjj",product:"EFund",Version:"1",deviceid:"stock-sdk"};async function qo(t,e={}){let n=e.sort??"ZDF",r=e.order??"desc",o=e.category??"2",i=e.pageSize??20,s=e.page??1,a=new URLSearchParams({...Ln,RankItems:n,RankVectors:r,category:o,pageSize:String(i),page:String(s)}),l=`${Nn}/FundMNSubjectList?${a.toString()}`,c=await t.get(l,{provider:"eastmoney",responseType:"json"}),d=c.Data??[],m=c.pageinfo??{totalPages:0,pageSize:i,page:s};return{items:d.map(g=>({code:g.code??"",name:g.name??"",dailyChange:_(g.ZDF),weeklyReturn:_(g.SYL_W),monthlyReturn:_(g.SYL_M),quarterlyReturn:_(g.SYL_3M),halfYearReturn:_(g.SYL_6M),yearlyReturn:_(g.SYL_Y),threeYearReturn:_(g.SYL_3Y),fiveYearReturn:_(g.SYL_5Y),type:g.isIndustry===1?"\u884C\u4E1A":g.isIndustry===0?"\u6982\u5FF5":"\u884C\u4E1A"})),totalPages:m.totalPages??0,pageSize:m.pageSize??i,currentPage:m.page??s}}async function zo(t,e={}){let n=e.sort??"ZDF",r=e.order??"desc",o=e.category??"2",i=e.limit??20,s=new URLSearchParams({...Ln,RankItems:n,RankVectors:r,category:o,limit:String(i)}),a=`${Nn}/FundThemeList?${s.toString()}`;return((await t.get(a,{provider:"eastmoney",responseType:"json"})).Data??[]).map(d=>({code:d.code??"",name:d.name??"",dailyChange:_(d.ZDF),weeklyReturn:_(d.SYL_W),monthlyReturn:_(d.SYL_M),quarterlyReturn:_(d.SYL_3M),halfYearReturn:_(d.SYL_6M),yearlyReturn:_(d.SYL_Y),threeYearReturn:_(d.SYL_3Y),fiveYearReturn:_(d.SYL_5Y),type:d.isIndustry===1?"\u884C\u4E1A":d.isIndustry===0?"\u6982\u5FF5":"\u884C\u4E1A"}))}async function $o(t,e,n={}){let r=n.sortColumn??"SYL_1N",o=n.sort??"desc",i=n.page??1,s=n.pageSize??20,a=n.fundType??"",l=new URLSearchParams({...Ln,TOPICAL:e,SortColumn:r,Sort:o,pageIndex:String(i),pageSize:String(s),FundType:a}),c=`${Nn}/FundMNRank?${l.toString()}`,d=await t.get(c,{provider:"eastmoney",responseType:"json"}),m=d.Data??[],p=d.fundinfo??{total:0,pagesize:s,pageindex:i};return{items:m.map(S=>({code:S.fscode??"",name:S.abname??"",fundType:S.ftype??"",dailyChange:_(S.ZDF),weeklyReturn:_(S.SYL_Z),monthlyReturn:_(S.SYL_Y),quarterlyReturn:_(S.SYL_3Y),yearlyReturn:_(S.SYL_1N),nav:_(S.dwjz),themeCode:e})),total:p.total??0,pageIndex:p.pageindex??i,pageSize:p.pagesize??s}}var q={};lt(q,{getCommodityOptionKline:()=>ei,getCommodityOptionSpot:()=>Jo,getETFOption5DayMinute:()=>Xo,getETFOptionDailyKline:()=>Zo,getETFOptionExpireDay:()=>Qo,getETFOptionMinute:()=>Vo,getETFOptionMonths:()=>Go,getIndexOptionKline:()=>jo,getIndexOptionSpot:()=>Yo});function Ns(t){return{buyVolume:u(t[0]),buyPrice:u(t[1]),price:u(t[2]),askPrice:u(t[3]),askVolume:u(t[4]),openInterest:u(t[5]),change:u(t[6]),strikePrice:u(t[7]),symbol:t[8]??""}}function Ls(t){return{buyVolume:u(t[0]),buyPrice:u(t[1]),price:u(t[2]),askPrice:u(t[3]),askVolume:u(t[4]),openInterest:u(t[5]),change:u(t[6]),strikePrice:null,symbol:t[7]??""}}async function Yo(t,e){let n=`${Se}?type=futures&product=${t}&exchange=cffex&pinzhong=${e}`,r=await v(n),o=r?.result?.data?.up??[],i=r?.result?.data?.down??[];return{calls:o.map(Ns),puts:i.map(Ls)}}async function jo(t){let e=`${Re}?symbol=${t}`,n=await v(e,{callbackMode:"path"});return Array.isArray(n)?n.map(r=>({date:r.d,open:u(r.o),high:u(r.h),low:u(r.l),close:u(r.c),volume:u(r.v)})):[]}async function Go(t){let e=`${Qt}?exchange=null&cate=${encodeURIComponent(t)}`,r=(await v(e))?.result?.data,o=r?.contractMonth??[];return{months:o.length>1?o.slice(1):o,stockId:r?.stockId??"",cateId:r?.cateId??"",cateList:r?.cateList??[]}}async function Qo(t,e){let n=`${We}?exchange=null&cate=${encodeURIComponent(t)}&date=${e}`,r=await v(n),o=r?.result?.data?.remainderDays;if(typeof o=="number"&&o<0){let s=`${We}?exchange=null&cate=${encodeURIComponent("XD"+t)}&date=${e}`;r=await v(s)}let i=r?.result?.data;return{expireDay:i?.expireDay??"",remainderDays:i?.remainderDays??0,stockId:i?.stockId??"",name:i?.other?.name??""}}function Wo(t){let e="";return t.map(n=>(n.d&&(e=n.d),{time:n.i,date:e,price:u(n.p),volume:u(n.v),openInterest:u(n.t),avgPrice:u(n.a)}))}async function Vo(t){let e=`CON_OP_${t}`,n=`${Wt}?symbol=${e}`,o=(await v(n))?.result?.data;return Array.isArray(o)?Wo(o):[]}async function Zo(t){let e=`CON_OP_${t}`,n=`${Vt}?symbol=${e}`,r=await v(n,{callbackMode:"path"});return Array.isArray(r)?r.map(o=>({date:o.d,open:u(o.o),high:u(o.h),low:u(o.l),close:u(o.c),volume:u(o.v)})):[]}async function Xo(t){let e=`CON_OP_${t}`,n=`${Zt}?symbol=${e}`,o=(await v(n))?.result?.data;if(!Array.isArray(o))return[];let i=[];for(let s of o)Array.isArray(s)&&i.push(...Wo(s));return i}function Fs(t){return{buyVolume:u(t[0]),buyPrice:u(t[1]),price:u(t[2]),askPrice:u(t[3]),askVolume:u(t[4]),openInterest:u(t[5]),change:u(t[6]),strikePrice:u(t[7]),symbol:t[8]??""}}function vs(t){return{buyVolume:u(t[0]),buyPrice:u(t[1]),price:u(t[2]),askPrice:u(t[3]),askVolume:u(t[4]),openInterest:u(t[5]),change:u(t[6]),strikePrice:null,symbol:t[7]??""}}async function Jo(t,e){let n=Ve[t];if(!n)throw new R(`Unknown commodity option variety: "${t}". Available: ${Object.keys(Ve).join(", ")}`);let r=`${Se}?type=futures&product=${n.product}&exchange=${n.exchange}&pinzhong=${e}`,o=await v(r),i=o?.result?.data?.up??[],s=o?.result?.data?.down??[];return{calls:i.map(Fs),puts:s.map(vs)}}async function ei(t){let e=`${Re}?symbol=${t}`,n=await v(e,{callbackMode:"path"});return Array.isArray(n)?n.map(r=>({date:r.d,open:u(r.o),high:u(r.h),low:u(r.l),close:u(r.c),volume:u(r.v)})):[]}var b=class{constructor(e){this.client=e}};var Ie=class extends b{constructor(n){super(n);this.theme=new Fn(this.client)}getFundDividendList(n){return f.getFundDividendList(this.client,n)}getFundNavHistory(n){return f.getFundNavHistory(this.client,n)}getFundEstimate(n){return f.getFundEstimate(this.client,n)}getFundRankHistory(n){return f.getFundRankHistory(this.client,n)}getFundProfile(n){return f.getFundProfile(this.client,n)}},Fn=class{constructor(e){this.client=e}getThemeList(e){return f.getThemeList(this.client,e)}getThemeFunds(e,n){return f.getThemeFunds(this.client,e,n)}};var be=class extends b{constructor(e){super(e)}getFullQuotes(e){return M.getFullQuotes(this.client,e)}getSimpleQuotes(e){return M.getSimpleQuotes(this.client,e)}getHKQuotes(e){return M.getHKQuotes(this.client,e)}getUSQuotes(e){return M.getUSQuotes(this.client,e)}getFundQuotes(e){return M.getFundQuotes(this.client,e)}getFundFlow(e){return M.getFundFlow(this.client,e)}getPanelLargeOrder(e){return M.getPanelLargeOrder(this.client,e)}getTodayTimeline(e){return M.getTodayTimeline(this.client,e)}search(e){return M.search(this.client,e)}getAShareCodeList(e){return M.getAShareCodeList(this.client,e)}getUSCodeList(e){return M.getUSCodeList(this.client,e)}getHKCodeList(){return M.getHKCodeList(this.client)}getFundCodeList(){return M.getFundCodeList(this.client)}async getAllAShareQuotes(e={}){let{market:n,...r}=e,o=await this.getAShareCodeList({market:n});return M.getAllQuotesByCodes(this.client,o,r)}async getAllHKShareQuotes(e={}){let n=await this.getHKCodeList();return M.getAllHKQuotesByCodes(this.client,n,e)}async getAllUSShareQuotes(e={}){let{market:n,...r}=e,o=await this.getUSCodeList({simple:!0,market:n});return M.getAllUSQuotesByCodes(this.client,o,r)}getAllQuotesByCodes(e,n={}){return M.getAllQuotesByCodes(this.client,e,n)}batchRaw(e){return this.client.getTencentQuote(e)}getTradingCalendar(){return M.getTradingCalendar(this.client)}getDividendDetail(e){return f.getDividendDetail(this.client,e)}};var ke=class extends b{constructor(e){super(e)}getIndustryList(){return f.getIndustryList(this.client)}getIndustrySpot(e){return f.getIndustrySpot(this.client,e)}getIndustryConstituents(e){return f.getIndustryConstituents(this.client,e)}getIndustryKline(e,n){return f.getIndustryKline(this.client,e,n)}getIndustryMinuteKline(e,n){return f.getIndustryMinuteKline(this.client,e,n)}getConceptList(){return f.getConceptList(this.client)}getConceptSpot(e){return f.getConceptSpot(this.client,e)}getConceptConstituents(e){return f.getConceptConstituents(this.client,e)}getConceptKline(e,n){return f.getConceptKline(this.client,e,n)}getConceptMinuteKline(e,n){return f.getConceptMinuteKline(this.client,e,n)}};var Me=class extends b{constructor(e){super(e)}getHistoryKline(e,n){return f.getHistoryKline(this.client,e,n)}getMinuteKline(e,n){return f.getMinuteKline(this.client,e,n)}getHKHistoryKline(e,n){return f.getHKHistoryKline(this.client,e,n)}getHKMinuteKline(e,n){return f.getHKMinuteKline(this.client,e,n)}getUSHistoryKline(e,n){return f.getUSHistoryKline(this.client,e,n)}getUSMinuteKline(e,n){return f.getUSMinuteKline(this.client,e,n)}};var Ne=class extends b{constructor(e){super(e)}getFuturesKline(e,n){return f.getFuturesHistoryKline(this.client,e,n)}getGlobalFuturesSpot(e){return f.getGlobalFuturesSpot(this.client,e)}getGlobalFuturesKline(e,n){return f.getGlobalFuturesKline(this.client,e,n)}getFuturesInventorySymbols(){return f.getFuturesInventorySymbols(this.client)}getFuturesInventory(e,n){return f.getFuturesInventory(this.client,e,n)}getComexInventory(e,n){return f.getComexInventory(this.client,e,n)}};var Le=class extends b{constructor(e){super(e)}getIndexOptionSpot(e,n){return q.getIndexOptionSpot(e,n)}getIndexOptionKline(e){return q.getIndexOptionKline(e)}getCFFEXOptionQuotes(e){return f.getCFFEXOptionQuotes(this.client,e)}getETFOptionMonths(e){return q.getETFOptionMonths(e)}getETFOptionExpireDay(e,n){return q.getETFOptionExpireDay(e,n)}getETFOptionMinute(e){return q.getETFOptionMinute(e)}getETFOptionDailyKline(e){return q.getETFOptionDailyKline(e)}getETFOption5DayMinute(e){return q.getETFOption5DayMinute(e)}getCommodityOptionSpot(e,n){return q.getCommodityOptionSpot(e,n)}getCommodityOptionKline(e){return q.getCommodityOptionKline(e)}getOptionLHB(e,n){return f.getOptionLHB(this.client,e,n)}};var ws=500,xs=15,Fe=class{constructor(e,n){this.klineService=e;this.quoteService=n}detectMarket(e){let n=wn(e);if(n==="GLOBAL")throw new R(`No kline route for GLOBAL-market symbol '${e}'; use the US kline API with a raw secid instead (e.g. kline.us('100.GDAXI'))`);return n==="HK"?"HK":n==="US"?"US":"A"}calcActualStartDate(e,n,r=1.5){let o=this.toCompactDate(e),i=Math.ceil(n*r),s=new Date(parseInt(o.slice(0,4)),parseInt(o.slice(4,6))-1,parseInt(o.slice(6,8)));s.setDate(s.getDate()-i);let a=s.getFullYear(),l=String(s.getMonth()+1).padStart(2,"0"),c=String(s.getDate()).padStart(2,"0");return`${a}${l}${c}`}calcActualStartDateByCalendar(e,n,r){if(!r||r.length===0)return;let o=r.findIndex(s=>s>=e);o===-1&&(o=r.length-1);let i=Math.max(0,o-n);return this.toCompactDate(r[i])}tryNormalizeDate(e){let n=e.trim();return/^\d{4}-\d{2}-\d{2}/.test(n)?n.slice(0,10):/^\d{8}$/.test(n)?`${n.slice(0,4)}-${n.slice(4,6)}-${n.slice(6,8)}`:null}normalizeUserDate(e){let n=this.tryNormalizeDate(e);if(n===null)throw new R(`\u65E5\u671F\u683C\u5F0F\u5E94\u4E3A 'YYYY-MM-DD' \u6216 'YYYYMMDD',\u5F97\u5230 '${e}'`,{argument:"date",value:e});return n}normalizeRowDate(e){return this.tryNormalizeDate(e)??e}toCompactDate(e){return e.replace(/-/g,"")}async getKlineWithIndicators(e,n={}){let{indicators:r={}}=n,o=n.startDate?this.normalizeUserDate(n.startDate):void 0,i=n.endDate?this.normalizeUserDate(n.endDate):void 0,s=n.market??this.detectMarket(e),{requiredBars:a,maxRecursiveLookback:l}=Bn(r),c={A:1.5,HK:1.46,US:1.45},d;if(o)if(s==="A")try{let C=await this.quoteService.getTradingCalendar();d=this.calcActualStartDateByCalendar(o,a,C)??this.calcActualStartDate(o,a,c[s])}catch{d=this.calcActualStartDate(o,a,c[s])}else d=this.calcActualStartDate(o,a,c[s]);let m={period:n.period,adjust:n.adjust,startDate:d,endDate:i?this.toCompactDate(i):void 0},p;switch(s){case"HK":p=await this.klineService.getHKHistoryKline(e,m);break;case"US":p=await this.klineService.getUSHistoryKline(e,m);break;default:p=await this.klineService.getHistoryKline(e,m)}let g=n.period??"daily",S=30+(g==="weekly"?7:g==="monthly"?31:0),A=p.length===0||d===void 0||this.normalizeRowDate(p[0].date)<=Z(this.normalizeRowDate(d),S),h=!1;if(o&&p.length<a&&A)switch(h=!0,s){case"HK":p=await this.klineService.getHKHistoryKline(e,{...m,startDate:void 0});break;case"US":p=await this.klineService.getUSHistoryKline(e,{...m,startDate:void 0});break;default:p=await this.klineService.getHistoryKline(e,{...m,startDate:void 0})}if(o){let C=p.findIndex(U=>this.normalizeRowDate(U.date)>=o);if(C===-1)return[];let I=p;if(h&&!Kn(r)){let U=l>0?Math.max(a,ws,xs*l):a;I=p.slice(Math.max(0,C-U))}return ft(I,r).filter(U=>{let K=this.normalizeRowDate(U.date);return K>=o&&(i===void 0||K<=i)})}return ft(p,r)}};var Us=1.5,Ks=30,ve=class{constructor(e){this.klineService=e}getChipDistribution(e,n={}){return this.compute("A",e,n)}getHKChipDistribution(e,n={}){return this.compute("HK",e,n)}getUSChipDistribution(e,n={}){return this.compute("US",e,n)}async compute(e,n,r){let{days:o=90,range:i=120,adjust:s,includeHistogram:a,decimals:l}=r;if(!Number.isInteger(o)||o<1)throw new R(`days \u5E94\u4E3A\u6B63\u6574\u6570,\u5F97\u5230 ${JSON.stringify(o)}`,{argument:"days",value:o});if(!Number.isInteger(i)||i<0)throw new R(`range \u5E94\u4E3A\u975E\u8D1F\u6574\u6570(0 = \u5168\u91CF\u7D2F\u8BA1),\u5F97\u5230 ${JSON.stringify(i)}`,{argument:"range",value:i});let c=await this.fetchDailyKlines(e,n,s,o,i);return c.length===0?[]:Un(c,{range:i,tail:o,includeHistogram:a,decimals:l})}async fetchDailyKlines(e,n,r,o,i){let s=S=>{let A={period:"daily",adjust:r,startDate:S};switch(e){case"HK":return this.klineService.getHKHistoryKline(n,A);case"US":return this.klineService.getUSHistoryKline(n,A);default:return this.klineService.getHistoryKline(n,A)}};if(i===0)return s(void 0);let a={A:E.CN,HK:E.HK,US:E.US},l=o+i,c=w(a[e]),d=Z(c,-Math.ceil(l*Us)),m=d.replace(/-/g,""),p=await s(m),g=p.length===0||p[0].date<=Z(d,Ks);return p.length<l&&g&&(p=await s(void 0)),p}};var we=class extends b{constructor(e){super(e)}getIndividualFundFlow(e,n){return f.getIndividualFundFlow(this.client,e,n)}getMarketFundFlow(){return f.getMarketFundFlow(this.client)}getFundFlowRank(e){return f.getFundFlowRank(this.client,e)}getSectorFundFlowRank(e){return f.getSectorFundFlowRank(this.client,e)}getSectorFundFlowHistory(e,n){return f.getSectorFundFlowHistory(this.client,e,n)}};var xe=class extends b{constructor(e){super(e)}getNorthboundMinute(e){return f.getNorthboundMinute(this.client,e)}getNorthboundFlowSummary(){return f.getNorthboundFlowSummary(this.client)}getNorthboundHoldingRank(e){return f.getNorthboundHoldingRank(this.client,e)}getNorthboundHistory(e,n){return f.getNorthboundHistory(this.client,e,n)}getNorthboundIndividual(e,n){return f.getNorthboundIndividual(this.client,e,n)}};var Bs=4,Ue=class extends b{constructor(n,r){super(n);this.quoteService=r}getZTPool(n,r){return f.getZTPool(this.client,n,r)}getStockChanges(n){return f.getStockChanges(this.client,n)}getBoardChanges(){return f.getBoardChanges(this.client)}async getIndividualChanges(n,r={}){return(await f.getIndividualStockChanges(this.client,n,r.date)).changes}async getIndividualChangesHistory(n,r={}){let{days:o=7}=r;if(!Number.isInteger(o)||o<1||o>60)throw new R(`days \u5E94\u4E3A 1~60 \u7684\u6574\u6570,\u5F97\u5230 ${JSON.stringify(o)}`,{argument:"days",value:o});let i=f.assertCnStockSymbol(n),s=w(E.CN),a=Z(s,-(o-1)),c=(await this.quoteService.getTradingCalendar()).filter(h=>h>=a&&h<=s),m=(await oe(c.map(h=>()=>f.getIndividualStockChanges(this.client,n,h)),Bs,!0)).map((h,C)=>h.date===c[C]?h:{date:c[C],available:!1,code:h.code,name:"",changes:[]}),p=m.filter(h=>h.available),g=Object.create(null);for(let h of p)for(let C of h.changes){let I=C.typeCode||"unknown",U=g[I]??(g[I]={count:0,label:C.changeTypeLabel});U.count+=1}let S=p.find(h=>h.name),A=m[0]?.code??i.code;return{code:S?.code??A,name:S?.name??"",requestedDays:o,coverage:{from:a,to:s,availableFrom:p[0]?.date??null},days:m,stats:g}}};var Ke=class extends b{constructor(e){super(e)}getDragonTigerDetail(e){return f.getDragonTigerDetail(this.client,e)}getDragonTigerStockStats(e){return f.getDragonTigerStockStats(this.client,e)}getDragonTigerInstitution(e){return f.getDragonTigerInstitution(this.client,e)}getDragonTigerBranchRank(e){return f.getDragonTigerBranchRank(this.client,e)}getDragonTigerStockSeatDetail(e,n){return f.getDragonTigerStockSeatDetail(this.client,e,n)}};var Be=class extends b{constructor(e){super(e)}getBlockTradeMarketStat(){return f.getBlockTradeMarketStat(this.client)}getBlockTradeDetail(e){return f.getBlockTradeDetail(this.client,e)}getBlockTradeDailyStat(e){return f.getBlockTradeDailyStat(this.client,e)}getMarginAccountInfo(){return f.getMarginAccountInfo(this.client)}getMarginTargetList(e){return f.getMarginTargetList(this.client,e)}};var vn=class{constructor(e={}){this._ns={};this.client=new Ae(e),this.quoteService=new be(this.client),this.boardService=new ke(this.client),this.klineService=new Me(this.client),this.futuresService=new Ne(this.client),this.optionsService=new Le(this.client),this.indicatorService=new Fe(this.klineService,this.quoteService),this.chipService=new ve(this.klineService),this.fundFlowService=new we(this.client),this.northboundService=new xe(this.client),this.marketEventService=new Ue(this.client,this.quoteService),this.dragonTigerService=new Ke(this.client),this.dataService=new Be(this.client),this.tradingCalendarService=new Oe(this.quoteService),this.fundService=new Ie(this.client)}memoNs(e,n){let r=this._ns[e];return r===void 0&&(r=n(),this._ns[e]=r),r}get quotes(){return this.memoNs("quotes",()=>{let e=this.quoteService;return{cn:e.getFullQuotes.bind(e),cnSimple:e.getSimpleQuotes.bind(e),hk:e.getHKQuotes.bind(e),us:e.getUSQuotes.bind(e),fund:e.getFundQuotes.bind(e),fundFlow:e.getFundFlow.bind(e),largeOrder:e.getPanelLargeOrder.bind(e),timeline:e.getTodayTimeline.bind(e)}})}get codes(){return this.memoNs("codes",()=>{let e=this.quoteService;return{cn:e.getAShareCodeList.bind(e),us:e.getUSCodeList.bind(e),hk:e.getHKCodeList.bind(e),fund:e.getFundCodeList.bind(e)}})}get batch(){return this.memoNs("batch",()=>{let e=this.quoteService;return{cn:e.getAllAShareQuotes.bind(e),hk:e.getAllHKShareQuotes.bind(e),us:e.getAllUSShareQuotes.bind(e),byCodes:e.getAllQuotesByCodes.bind(e),raw:e.batchRaw.bind(e)}})}get kline(){return this.memoNs("kline",()=>{let e=this.klineService,n=this.indicatorService;return{cn:e.getHistoryKline.bind(e),cnMinute:e.getMinuteKline.bind(e),hk:e.getHKHistoryKline.bind(e),hkMinute:e.getHKMinuteKline.bind(e),us:e.getUSHistoryKline.bind(e),usMinute:e.getUSMinuteKline.bind(e),withIndicators:n.getKlineWithIndicators.bind(n)}})}get chips(){return this.memoNs("chips",()=>{let e=this.chipService;return{cn:e.getChipDistribution.bind(e),hk:e.getHKChipDistribution.bind(e),us:e.getUSChipDistribution.bind(e)}})}get board(){return this.memoNs("board",()=>{let e=this.boardService;return{industry:{list:e.getIndustryList.bind(e),spot:e.getIndustrySpot.bind(e),constituents:e.getIndustryConstituents.bind(e),kline:e.getIndustryKline.bind(e),minuteKline:e.getIndustryMinuteKline.bind(e)},concept:{list:e.getConceptList.bind(e),spot:e.getConceptSpot.bind(e),constituents:e.getConceptConstituents.bind(e),kline:e.getConceptKline.bind(e),minuteKline:e.getConceptMinuteKline.bind(e)}}})}get options(){return this.memoNs("options",()=>{let e=this.optionsService;return{index:{spot:e.getIndexOptionSpot.bind(e),kline:e.getIndexOptionKline.bind(e)},etf:{months:e.getETFOptionMonths.bind(e),expireDay:e.getETFOptionExpireDay.bind(e),minute:e.getETFOptionMinute.bind(e),dailyKline:e.getETFOptionDailyKline.bind(e),fiveDayMinute:e.getETFOption5DayMinute.bind(e)},commodity:{spot:e.getCommodityOptionSpot.bind(e),kline:e.getCommodityOptionKline.bind(e)},cffex:{quotes:e.getCFFEXOptionQuotes.bind(e)},lhb:e.getOptionLHB.bind(e)}})}get futures(){return this.memoNs("futures",()=>{let e=this.futuresService;return{kline:e.getFuturesKline.bind(e),globalSpot:e.getGlobalFuturesSpot.bind(e),globalKline:e.getGlobalFuturesKline.bind(e),inventorySymbols:e.getFuturesInventorySymbols.bind(e),inventory:e.getFuturesInventory.bind(e),comexInventory:e.getComexInventory.bind(e)}})}get fundFlow(){return this.memoNs("fundFlow",()=>{let e=this.fundFlowService;return{individual:e.getIndividualFundFlow.bind(e),market:e.getMarketFundFlow.bind(e),rank:e.getFundFlowRank.bind(e),sectorRank:e.getSectorFundFlowRank.bind(e),sectorHistory:e.getSectorFundFlowHistory.bind(e)}})}get northbound(){return this.memoNs("northbound",()=>{let e=this.northboundService;return{minute:e.getNorthboundMinute.bind(e),summary:e.getNorthboundFlowSummary.bind(e),holdingRank:e.getNorthboundHoldingRank.bind(e),history:e.getNorthboundHistory.bind(e),individual:e.getNorthboundIndividual.bind(e)}})}get marketEvent(){return this.memoNs("marketEvent",()=>{let e=this.marketEventService;return{ztPool:e.getZTPool.bind(e),stockChanges:e.getStockChanges.bind(e),boardChanges:e.getBoardChanges.bind(e),individualChanges:e.getIndividualChanges.bind(e),individualChangesHistory:e.getIndividualChangesHistory.bind(e)}})}get dragonTiger(){return this.memoNs("dragonTiger",()=>{let e=this.dragonTigerService;return{detail:e.getDragonTigerDetail.bind(e),stockStats:e.getDragonTigerStockStats.bind(e),institution:e.getDragonTigerInstitution.bind(e),branchRank:e.getDragonTigerBranchRank.bind(e),seatDetail:e.getDragonTigerStockSeatDetail.bind(e)}})}get blockTrade(){return this.memoNs("blockTrade",()=>{let e=this.dataService;return{marketStat:e.getBlockTradeMarketStat.bind(e),detail:e.getBlockTradeDetail.bind(e),dailyStat:e.getBlockTradeDailyStat.bind(e)}})}get margin(){return this.memoNs("margin",()=>{let e=this.dataService;return{accountInfo:e.getMarginAccountInfo.bind(e),targetList:e.getMarginTargetList.bind(e)}})}get fund(){return this.memoNs("fund",()=>{let e=this.fundService;return{dividendList:e.getFundDividendList.bind(e),navHistory:e.getFundNavHistory.bind(e),estimate:e.getFundEstimate.bind(e),rankHistory:e.getFundRankHistory.bind(e),profile:e.getFundProfile.bind(e),theme:e.theme}})}get calendar(){return this.memoNs("calendar",()=>{let e=this.tradingCalendarService;return{isTradingDay:e.isTradingDay.bind(e),nextTradingDay:e.nextTradingDay.bind(e),prevTradingDay:e.prevTradingDay.bind(e),marketStatus:e.getMarketStatus.bind(e)}})}get reference(){return this.memoNs("reference",()=>{let e=this.quoteService;return{dividendDetail:e.getDividendDetail.bind(e),tradingCalendar:e.getTradingCalendar.bind(e)}})}search(e){return this.quoteService.search(e)}},ip=vn;export{yt as a,ht as b,T as c,O as d,me as e,oe as f,ze as g,v as h,ge as i,pi as j,ue as k,Rt as l,E as m,le as n,L as o,_t as p,Ct as q,Oe as r,Ie as s,vn as t,ip as u};
|