Skip to main content

futucli/cli/commands/
qot.rs

1//! Basic QOT clap argument structs split from commands.rs.
2
3use clap::Args;
4
5#[derive(Args)]
6pub struct ProtoJsonArgs {
7    /// 官方 proto C2S JSON;字段名按 generated proto serde 的 snake_case 写法。
8    ///
9    /// 例:`{"market":11,"count":20}`。`market` 使用 Qot_Common.QotMarket
10    /// 数字值(HK=1, US=11, SH=21, SZ=22, SG=31, JP=41, AU=51),
11    /// 不接受 "US" 这类字符串;本入口不会替用户改写字段或补默认值。
12    #[arg(long = "c2s-json", value_name = "JSON")]
13    pub(crate) c2s_json: String,
14}
15
16#[derive(Args)]
17pub struct QuoteArgs {
18    /// 股票代码,MARKET.CODE 格式,如 HK.00700 US.AAPL
19    #[arg(required = true)]
20    pub(crate) symbols: Vec<String>,
21}
22
23#[derive(Args)]
24pub struct SnapshotArgs {
25    /// 股票代码,MARKET.CODE 格式
26    #[arg(required = true)]
27    pub(crate) symbols: Vec<String>,
28}
29
30#[derive(Args)]
31pub struct SubArgs {
32    /// 股票代码,MARKET.CODE 格式
33    #[arg(required = true)]
34    pub(crate) symbols: Vec<String>,
35
36    /// 订阅类型,逗号分隔
37    ///
38    /// 支持: basic, orderbook, orderbook_odd, ticker, rt, kl_day, kl_1min, kl_3min, kl_5min,
39    ///       kl_10min, kl_15min, kl_30min, kl_60min, kl_120min, kl_180min, kl_240min,
40    ///       kl_week, kl_month, broker
41    ///
42    /// v1.4.83 §10 新增 aliases: `--sub-type` / `--sub-types` / `--stype`
43    #[arg(
44        short = 't',
45        long,
46        visible_aliases = ["sub-type", "sub-types", "stype"],
47        default_value = "basic"
48    )]
49    pub(crate) r#type: String,
50
51    /// 允许美股盘前/盘后行情数据(Qot_Sub.extendedTime)
52    #[arg(long = "extended-time")]
53    pub(crate) extended_time: bool,
54
55    /// 行情订阅时段:NONE|RTH|ETH|ALL 或 0|1|2|3;OVERNIGHT/4 按 C++ OpenD 拒绝
56    #[arg(long)]
57    pub(crate) session: Option<String>,
58
59    /// 订阅摆盘明细(Qot_Sub.isSubOrderBookDetail)
60    #[arg(long = "orderbook-detail")]
61    pub(crate) orderbook_detail: bool,
62}
63
64#[derive(Args)]
65pub struct KlineArgs {
66    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
67    #[arg(index = 1, value_name = "SYMBOL")]
68    pub(crate) symbol_positional: Option<String>,
69
70    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
71    #[arg(
72        long = "symbol",
73        visible_aliases = ["code", "stock"],
74        conflicts_with = "symbol_positional",
75        value_name = "SYMBOL"
76    )]
77    pub(crate) symbol_arg: Option<String>,
78
79    /// K 线类型: day | week | month | quarter | year | 1min | 3min | 5min |
80    ///          10min | 15min | 30min | 60min | 120min | 180min | 240min
81    ///
82    /// v1.4.83 §10 新增 aliases: `--ktype` / `--kltype` / `--kl-type`
83    #[arg(
84        short = 't',
85        long,
86        visible_aliases = ["ktype", "kltype", "kl-type"],
87        default_value = "day"
88    )]
89    pub(crate) r#type: String,
90
91    /// 返回根数(默认 100)
92    ///
93    /// v1.4.83 §10 新增 aliases: `--num` / `--max-count` / `--req-count`
94    #[arg(
95        short = 'n',
96        long,
97        visible_aliases = ["num", "max-count", "req-count"]
98    )]
99    pub(crate) count: Option<i32>,
100
101    /// 复权类型: none | forward | backward(默认 none)
102    #[arg(long = "rehab-type", default_value = "none")]
103    pub(crate) rehab_type: String,
104
105    /// backend 分页返回上限(Qot_RequestHistoryKL.maxAckKLNum);不传时保留 CLI 最新 N 根旧语义
106    #[arg(long = "page-size", visible_alias = "max-ack-kl-num")]
107    pub(crate) page_size: Option<i32>,
108
109    /// 上一页响应返回的 next_req_key(base64)
110    #[arg(long = "next-req-key", visible_alias = "nextReqKey")]
111    pub(crate) next_req_key: Option<String>,
112
113    /// 指定返回 K 线字段 bitmask(Qot_Common.KLFields)
114    #[arg(long = "need-kl-fields-flag", visible_alias = "needKLFieldsFlag")]
115    pub(crate) need_kl_fields_flag: Option<i64>,
116
117    /// 获取美股盘前/盘后历史 K 线(Qot_RequestHistoryKL.extendedTime)
118    #[arg(long = "extended-time")]
119    pub(crate) extended_time: bool,
120
121    /// 历史 K 线时段:NONE|RTH|ETH|ALL 或 0|1|2|3;OVERNIGHT/4 按 C++ OpenD 拒绝
122    #[arg(long)]
123    pub(crate) session: Option<String>,
124
125    /// 开始日期 yyyy-MM-dd(默认 end - 回溯)
126    ///
127    /// v1.4.83 §10 alias: `--begin-time` / `--from`
128    #[arg(long, visible_aliases = ["begin-time", "from"])]
129    pub(crate) begin: Option<String>,
130
131    /// 结束日期 yyyy-MM-dd(默认今日)
132    ///
133    /// v1.4.83 §10 alias: `--end-time` / `--to`
134    #[arg(long, visible_aliases = ["end-time", "to"])]
135    pub(crate) end: Option<String>,
136}
137
138#[derive(Args)]
139pub struct OrderbookArgs {
140    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
141    #[arg(index = 1, value_name = "SYMBOL")]
142    pub(crate) symbol_positional: Option<String>,
143
144    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
145    #[arg(
146        long = "symbol",
147        visible_aliases = ["code", "stock"],
148        conflicts_with = "symbol_positional",
149        value_name = "SYMBOL"
150    )]
151    pub(crate) symbol_arg: Option<String>,
152
153    /// 摆盘深度(档数)
154    ///
155    /// v1.4.83 §10 新增 aliases: `--num` / `--count`
156    #[arg(
157        short = 'n',
158        long,
159        visible_aliases = ["num", "count"],
160        default_value_t = 10
161    )]
162    pub(crate) depth: i32,
163
164    /// 查询 SG/MY 碎股摆盘(会订阅 SubType_OrderBook_Odd=22)
165    #[arg(long = "odd-lot", visible_alias = "odd")]
166    pub(crate) odd_lot: bool,
167}
168
169#[derive(Args)]
170pub struct TickerArgs {
171    /// 股票代码
172    #[arg(index = 1, value_name = "SYMBOL")]
173    pub(crate) symbol_positional: Option<String>,
174
175    /// v1.4.83 §10 alias
176    #[arg(
177        long = "symbol",
178        visible_aliases = ["code", "stock"],
179        conflicts_with = "symbol_positional",
180        value_name = "SYMBOL"
181    )]
182    pub(crate) symbol_arg: Option<String>,
183
184    /// 拉取根数
185    ///
186    /// v1.4.83 §10 aliases: `--num` / `--max-count`
187    #[arg(
188        short = 'n',
189        long,
190        visible_aliases = ["num", "max-count"],
191        default_value_t = 100
192    )]
193    pub(crate) count: i32,
194}
195
196#[derive(Args)]
197pub struct RtArgs {
198    /// 股票代码
199    #[arg(index = 1, value_name = "SYMBOL")]
200    pub(crate) symbol_positional: Option<String>,
201
202    /// v1.4.83 §10 alias
203    #[arg(
204        long = "symbol",
205        visible_aliases = ["code", "stock"],
206        conflicts_with = "symbol_positional",
207        value_name = "SYMBOL"
208    )]
209    pub(crate) symbol_arg: Option<String>,
210}
211
212#[derive(Args)]
213pub struct StaticArgs {
214    /// 股票代码(可多个)
215    #[arg(required = true)]
216    pub(crate) symbols: Vec<String>,
217}
218
219#[derive(Args)]
220pub struct BrokerArgs {
221    /// 股票代码
222    #[arg(index = 1, value_name = "SYMBOL")]
223    pub(crate) symbol_positional: Option<String>,
224
225    /// v1.4.83 §10 alias
226    #[arg(
227        long = "symbol",
228        visible_aliases = ["code", "stock"],
229        conflicts_with = "symbol_positional",
230        value_name = "SYMBOL"
231    )]
232    pub(crate) symbol_arg: Option<String>,
233}
234
235#[derive(Args)]
236pub struct PlateListArgs {
237    /// 市场: HK | HK_FUTURE | US | SH | SZ
238    #[arg(short, long)]
239    pub(crate) market: String,
240
241    /// 板块类型: all | industry | region | concept;region 仅 SH/SZ 有后端数据,HK/HK_FUTURE/US 对齐 C++ 返回成功空列表
242    // v1.4.52 BUG-9: visible_alias = "plate-type" 供 REST/MCP 风格用户
243    #[arg(short = 's', long, visible_alias = "plate-type", default_value = "all")]
244    pub(crate) set: String,
245}
246
247#[derive(Args)]
248pub struct PlateStocksArgs {
249    /// 板块 symbol,MARKET.CODE 格式(位置参数或 --plate 二选一)
250    #[arg(index = 1, value_name = "PLATE")]
251    pub(crate) plate: Option<String>,
252
253    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
254    #[arg(long = "plate", conflicts_with = "plate")]
255    pub(crate) plate_arg: Option<String>,
256}
257
258#[derive(Args)]
259pub struct ReferenceArgs {
260    /// 标的证券,MARKET.CODE 格式(位置参数)或 `--symbol`/`--code` 指定
261    #[arg(index = 1, value_name = "SYMBOL")]
262    pub(crate) symbol_positional: Option<String>,
263
264    /// REST/MCP 风格命名参数 alias
265    #[arg(
266        long = "symbol",
267        visible_aliases = ["code", "stock"],
268        conflicts_with = "symbol_positional",
269        value_name = "SYMBOL"
270    )]
271    pub(crate) symbol_arg: Option<String>,
272
273    /// 关联证券类型:warrant | future。option 走 option-chain。
274    #[arg(
275        long = "reference-type",
276        visible_alias = "type",
277        default_value = "warrant"
278    )]
279    pub(crate) reference_type: String,
280}
281
282#[derive(Args)]
283pub struct CapitalFlowArgs {
284    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
285    pub(crate) symbol: String,
286    /// 周期类型:1=分时 2=1日 3=3日 4=5日 5=10日 6=20日 7=30日 8=60日 9=90日 10=180日 11=360日
287    #[arg(long, default_value_t = 1)]
288    pub(crate) period_type: i32,
289    /// 开始时间 YYYY-MM-DD HH:MM:SS(可选)
290    #[arg(long)]
291    pub(crate) begin: Option<String>,
292    /// 结束时间(可选)
293    #[arg(long)]
294    pub(crate) end: Option<String>,
295}
296
297#[derive(Args)]
298pub struct CompanyProfileArgs {
299    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
300    pub(crate) symbol: String,
301}
302
303#[derive(Args)]
304pub struct CompanyExecutivesArgs {
305    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
306    pub(crate) symbol: String,
307}
308
309#[derive(Args)]
310pub struct CompanyExecutiveBackgroundArgs {
311    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
312    pub(crate) symbol: String,
313    /// 高管/董事姓名,通常来自 company-executives 返回的 leader_name
314    pub(crate) leader_name: String,
315}
316
317#[derive(Args)]
318pub struct CompanyOperationalEfficiencyArgs {
319    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
320    pub(crate) symbol: String,
321    /// 分页标识,首次不填,续拉填上次返回的 next_key
322    #[arg(long, allow_hyphen_values = true)]
323    pub(crate) next_key: Option<String>,
324    /// 每页返回数量,范围 1~50;不传走 backend 默认 10
325    #[arg(long)]
326    pub(crate) num: Option<i32>,
327    /// 货币代码,如 CNY / USD / HKD
328    #[arg(long)]
329    pub(crate) currency_code: Option<String>,
330    /// 兼容保留字段;C++ OpenD 在经营效率接口忽略 financialType,固定查询后端年报视图
331    #[arg(long)]
332    pub(crate) financial_type: Option<i32>,
333}
334
335#[derive(Args)]
336pub struct FinancialsEarningsPriceMoveArgs {
337    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
338    pub(crate) symbol: String,
339    /// 财报周期数量,范围 1~50;不传走 backend 默认 10
340    #[arg(long)]
341    pub(crate) period_count: Option<i32>,
342}
343
344#[derive(Args)]
345pub struct FinancialsEarningsPriceHistoryArgs {
346    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
347    pub(crate) symbol: String,
348}
349
350#[derive(Args)]
351pub struct FinancialCalendarArgs {
352    /// 起始日期 YYYYMMDD
353    #[arg(long)]
354    pub(crate) begin_date: String,
355    /// 结束日期右开边界 YYYYMMDD
356    #[arg(long)]
357    pub(crate) end_date: String,
358    /// 市场: HK|US|CN|AU|SG|CA|JP|MY 或 1..8;可重复,也可逗号分隔
359    #[arg(long = "market", visible_alias = "market-list", value_delimiter = ',')]
360    pub(crate) markets: Vec<String>,
361    /// 财报发布时段: regular|before|after 或 0|1|2;可重复,也可逗号分隔
362    #[arg(
363        long = "pub-type",
364        visible_alias = "pub-type-list",
365        value_delimiter = ','
366    )]
367    pub(crate) pub_types: Vec<String>,
368    /// 股票筛选: watchlist|position|special 或 1|2|3;可重复,也可逗号分隔
369    #[arg(
370        long = "stock-type",
371        visible_alias = "stock-type-list",
372        value_delimiter = ','
373    )]
374    pub(crate) stock_types: Vec<String>,
375    /// 只看自选股财报日历;需要配合 --watchlist-stock-id 提供客户端已知 stock_id
376    #[arg(long)]
377    pub(crate) watchlist_only: bool,
378    /// 只看持仓股财报日历;需要配合 --holding-stock-id 提供客户端已知 stock_id
379    #[arg(long)]
380    pub(crate) positions_only: bool,
381    /// 返回数量上限,1..1000
382    #[arg(long, default_value_t = 6)]
383    pub(crate) count: i32,
384    /// 排序类型,按 financial_calendar RankingType enum 传整数
385    #[arg(long)]
386    pub(crate) ranking_type: Option<i32>,
387    /// 自定义过滤,格式 TYPE[:MIN[:MAX]];TYPE 支持 market-cap|option-volume|iv|iv-rank|iv-pctl|rt-market-cap 或 1..6
388    #[arg(long = "custom-filter", value_name = "TYPE[:MIN[:MAX]]")]
389    pub(crate) custom_filters: Vec<String>,
390    /// 预估指标: eps_gaap|revenue|ebit 或 1|2|3;默认 eps_gaap,revenue,ebit
391    #[arg(
392        long = "estimate-type",
393        visible_alias = "estimate-type-list",
394        value_delimiter = ','
395    )]
396    pub(crate) estimate_types: Vec<String>,
397    /// 显式自选股 stock_id;可重复
398    #[arg(long = "watchlist-stock-id")]
399    pub(crate) watchlist_stock_ids: Vec<u64>,
400    /// 显式持仓 stock_id;可重复
401    #[arg(long = "holding-stock-id")]
402    pub(crate) holding_stock_ids: Vec<u64>,
403}
404
405#[derive(Args)]
406pub struct FinancialCalendarTargetArgs {
407    /// 待查询股票的 backend stock_id;可重复
408    #[arg(long = "stock-id", required = true)]
409    pub(crate) stock_ids: Vec<u64>,
410    /// 市场: HK|US|CN|AU|SG|CA|JP|MY 或 1..8;可重复,也可逗号分隔
411    #[arg(long = "market", visible_alias = "market-list", value_delimiter = ',')]
412    pub(crate) markets: Vec<String>,
413    /// 返回数量,必须为正数
414    #[arg(long, default_value_t = 20)]
415    pub(crate) size: i32,
416    /// 分页起点,默认走 backend 0
417    #[arg(long)]
418    pub(crate) start: Option<i32>,
419}
420
421#[derive(Args)]
422pub struct IpoCalendarArgs {
423    /// 市场:HK=1 / HK_FUTURE=2 / US=11 / CN/SH=21 / SZ=22 / SG=31 / JP=41 / MY=61
424    #[arg(long)]
425    pub(crate) market: String,
426    /// 事件类型:list/apply/apply_start/apply_end/winning/approval/issue_confirm/price_confirm_start/price_confirm_end/inquiry_start/inquiry_end/draw
427    #[arg(long = "event", visible_alias = "event-type", value_delimiter = ',')]
428    pub(crate) events: Vec<String>,
429    /// 可选起始日期 YYYYMMDD
430    #[arg(long)]
431    pub(crate) begin_date: Option<String>,
432    /// 可选结束日期 YYYYMMDD
433    #[arg(long)]
434    pub(crate) end_date: Option<String>,
435}
436
437#[derive(Args)]
438pub struct FinancialsStatementsArgs {
439    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
440    pub(crate) symbol: String,
441    /// 财务报表类型,0=未知,1=利润表,2=资产负债表,3=现金流量表,4=关键指标;不传走 C++ 默认 1
442    #[arg(long)]
443    pub(crate) statement_type: Option<i32>,
444    /// 财报周期筛选,支持 0~7 和 9~11;不传走 C++ 默认 10
445    #[arg(long)]
446    pub(crate) financial_type: Option<i32>,
447    /// 货币代码,如 CNY / USD / HKD
448    #[arg(long)]
449    pub(crate) currency_code: Option<String>,
450    /// 分页标识,首次不填,续拉填上次返回的 next_key
451    #[arg(long, allow_hyphen_values = true)]
452    pub(crate) next_key: Option<String>,
453    /// 每页返回数量,范围 1~50;不传走 backend 默认 10
454    #[arg(long)]
455    pub(crate) num: Option<i32>,
456}
457
458#[derive(Args)]
459pub struct FinancialsRevenueBreakdownArgs {
460    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
461    pub(crate) symbol: String,
462    /// 筛选时间戳,来自上次返回的 screen_date_list.date
463    #[arg(long)]
464    pub(crate) date: Option<u32>,
465    /// 财报周期筛选,支持 0~7 和 9;不传走 C++ 默认 0
466    #[arg(long)]
467    pub(crate) financial_type: Option<i32>,
468    /// 货币代码,如 CNY / USD / HKD
469    #[arg(long)]
470    pub(crate) currency_code: Option<String>,
471}
472
473#[derive(Args)]
474pub struct ResearchAnalystConsensusArgs {
475    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
476    pub(crate) symbol: String,
477}
478
479#[derive(Args)]
480pub struct ResearchRatingSummaryArgs {
481    /// 证券 MARKET.CODE,如 US.AAPL / CA.SHOP
482    pub(crate) symbol: String,
483    /// 评级维度,0/1=机构,2=分析师;0 或不传走 C++ 默认机构维度
484    #[arg(long)]
485    pub(crate) rating_dimension_type: Option<i32>,
486    /// 机构或分析师 uid;不传返回汇总列表,传入返回详情
487    #[arg(long)]
488    pub(crate) uid: Option<String>,
489    /// 分页标识,首次不填,续拉填上次返回的 next_key
490    #[arg(long, allow_hyphen_values = true)]
491    pub(crate) next_key: Option<String>,
492    /// 每页返回数量,范围 1~20;不传走 C++ 默认 10
493    #[arg(long)]
494    pub(crate) num: Option<i32>,
495}
496
497#[derive(Args)]
498pub struct ResearchMorningstarReportArgs {
499    /// 证券 MARKET.CODE,如 US.AAPL
500    pub(crate) symbol: String,
501}
502
503#[derive(Args)]
504pub struct ValuationDetailArgs {
505    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL / HK.800000
506    pub(crate) symbol: String,
507    /// 估值类型,0=推荐类型,1=PE,2=PB,3=PS;不传走 C++ 默认 0
508    #[arg(long)]
509    pub(crate) valuation_type: Option<i32>,
510    /// 区间类型,1=3个月,2=6个月,3=1年,4=3年,5=2019至今,6=5年,7=10年,8=2年,9=20年,10=30年;0/不传走 C++ 默认 3
511    #[arg(long)]
512    pub(crate) interval_type: Option<i32>,
513}
514
515#[derive(Args)]
516pub struct ValuationPlateStockListArgs {
517    /// 指数或板块 MARKET.CODE,如 HK.800000 / HK.BK0001
518    pub(crate) symbol: String,
519    /// 估值类型,0/1=PE,2=PB,3=PS;0 或不传走 C++ 默认 PE
520    #[arg(long)]
521    pub(crate) valuation_type: Option<i32>,
522    /// 分页标识,首次不填,续拉填上次返回的 next_key
523    #[arg(long, allow_hyphen_values = true)]
524    pub(crate) next_key: Option<String>,
525    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
526    #[arg(long)]
527    pub(crate) num: Option<i32>,
528    /// 排序方向,0/2=升序,1=降序;不传走 C++ 默认升序
529    #[arg(long)]
530    pub(crate) sort_type: Option<i32>,
531    /// 排序列,51=市值,52=估值,53=预测估值,54=历史分位
532    #[arg(long)]
533    pub(crate) sort_id: Option<i32>,
534    /// 指数成分股筛选板块 MARKET.CODE,仅指数场景有效
535    #[arg(long)]
536    pub(crate) filter_security: Option<String>,
537}
538
539#[derive(Args)]
540pub struct StockScreenArgs {
541    /// 完整 Qot_StockScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 filter_list/retrieve_list/page_from/page_count
542    #[arg(long = "c2s-json")]
543    pub(crate) c2s_json: String,
544}
545
546#[derive(Args)]
547pub struct OptionScreenArgs {
548    /// 完整 Qot_OptionScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 market_category_list/filter_list/sort_list/page_from/page_count
549    #[arg(long = "c2s-json")]
550    pub(crate) c2s_json: String,
551}
552
553#[derive(Args)]
554pub struct WarrantScreenArgs {
555    /// 完整 Qot_WarrantScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 market_type/filter_list/sort_list/page_from/page_count
556    #[arg(long = "c2s-json")]
557    pub(crate) c2s_json: String,
558}
559
560#[derive(Args)]
561pub struct TechnicalUnusualArgs {
562    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
563    pub(crate) stock_symbol: String,
564    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
565    #[arg(long)]
566    pub(crate) time_range: Option<i32>,
567    /// 技术指标过滤项;可重复传入,不传表示全部
568    #[arg(long = "indicator-filter")]
569    pub(crate) indicator_filters: Vec<String>,
570    /// 返回语种:0=简中,1=繁中,2=英文
571    #[arg(long)]
572    pub(crate) language_id: Option<i32>,
573}
574
575#[derive(Args)]
576pub struct FinancialUnusualArgs {
577    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
578    pub(crate) stock_symbol: String,
579    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
580    #[arg(long)]
581    pub(crate) time_range: Option<i32>,
582    /// 分析维度;可重复传入,不传表示全部
583    #[arg(long = "analysis-dimension")]
584    pub(crate) analysis_dimensions: Vec<String>,
585    /// 返回语种:0=简中,1=繁中,2=英文
586    #[arg(long)]
587    pub(crate) language_id: Option<i32>,
588}
589
590#[derive(Args)]
591pub struct DerivativeUnusualArgs {
592    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
593    pub(crate) stock_symbol: String,
594    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
595    #[arg(long)]
596    pub(crate) time_range: Option<i32>,
597    /// 分析维度;可重复传入,不传表示全部
598    #[arg(long = "analysis-dimension")]
599    pub(crate) analysis_dimensions: Vec<String>,
600    /// 返回语种:0=简中,1=繁中,2=英文
601    #[arg(long)]
602    pub(crate) language_id: Option<i32>,
603}
604
605#[derive(Args)]
606pub struct CorporateActionsDividendsArgs {
607    /// 证券 MARKET.CODE,如 HK.00700 / SH.600519
608    pub(crate) symbol: String,
609}
610
611#[derive(Args)]
612pub struct CorporateActionsBuybacksArgs {
613    /// 证券 MARKET.CODE,如 HK.00700 / SH.600519
614    pub(crate) symbol: String,
615    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
616    #[arg(long, allow_hyphen_values = true)]
617    pub(crate) next_key: Option<String>,
618    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
619    #[arg(long)]
620    pub(crate) num: Option<i32>,
621}
622
623#[derive(Args)]
624pub struct CorporateActionsStockSplitsArgs {
625    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
626    pub(crate) symbol: String,
627    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
628    #[arg(long, allow_hyphen_values = true)]
629    pub(crate) next_key: Option<String>,
630    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
631    #[arg(long)]
632    pub(crate) num: Option<i32>,
633}
634
635#[derive(Args)]
636pub struct DailyShortVolumeArgs {
637    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
638    pub(crate) symbol: String,
639    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
640    #[arg(long, allow_hyphen_values = true)]
641    pub(crate) next_key: Option<String>,
642    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
643    #[arg(long)]
644    pub(crate) num: Option<i32>,
645}
646
647#[derive(Args)]
648pub struct ShortInterestArgs {
649    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
650    pub(crate) symbol: String,
651    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
652    #[arg(long, allow_hyphen_values = true)]
653    pub(crate) next_key: Option<String>,
654    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
655    #[arg(long)]
656    pub(crate) num: Option<i32>,
657}
658
659#[derive(Args)]
660pub struct TopTenBuySellBrokersArgs {
661    /// 证券 MARKET.CODE,如 HK.00700
662    pub(crate) symbol: String,
663    /// 查询过去第 N 个交易日;0 或不传表示实时十大买卖经纪
664    #[arg(long)]
665    pub(crate) days_before: Option<i32>,
666}
667
668#[derive(Args)]
669pub struct ShareholdersOverviewArgs {
670    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
671    pub(crate) symbol: String,
672    /// 指定报告期 ID;不传或 0 返回最新数据并带可用报告期列表
673    #[arg(long)]
674    pub(crate) period_id: Option<i32>,
675}
676
677#[derive(Args)]
678pub struct ShareholdersHoldingChangesArgs {
679    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
680    pub(crate) symbol: String,
681    /// 分页标识,首次不填;"-1" 表示无更多
682    #[arg(long, allow_hyphen_values = true)]
683    pub(crate) next_key: Option<String>,
684    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
685    #[arg(long)]
686    pub(crate) num: Option<i32>,
687    /// 排序方向,0/1=降序,2=升序
688    #[arg(long)]
689    pub(crate) sort_type: Option<i32>,
690    /// 排序字段,62=持股变动数,63=持股日期,64=变动比例,65=变动金额,66=持股比例
691    #[arg(long)]
692    pub(crate) sort_column: Option<i32>,
693    /// 筛选类型,0=全部,1=增持,2=减持,3=建仓,4=清仓
694    #[arg(long)]
695    pub(crate) filter_type: Option<i32>,
696}
697
698#[derive(Args)]
699pub struct ShareholdersHolderDetailArgs {
700    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
701    pub(crate) symbol: String,
702    /// 持股明细类型,0=默认,1..15=机构类型,100/200/300/400/500,1000=全部
703    #[arg(long)]
704    pub(crate) request_type: Option<i32>,
705    /// 分页标识,首次不填;"-1" 表示无更多
706    #[arg(long, allow_hyphen_values = true)]
707    pub(crate) next_key: Option<String>,
708    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
709    #[arg(long)]
710    pub(crate) num: Option<i32>,
711    /// 排序字段,0/61=持股股数,62=持股变动数
712    #[arg(long)]
713    pub(crate) sort_column: Option<i32>,
714    /// 排序方向,0/1=降序,2=升序
715    #[arg(long)]
716    pub(crate) sort_type: Option<i32>,
717    /// 统计周期 ID
718    #[arg(long)]
719    pub(crate) period_id: Option<i32>,
720    /// 股东/持有人 ID
721    #[arg(long)]
722    pub(crate) holder_id: Option<i32>,
723}
724
725#[derive(Args)]
726pub struct ShareholdersInstitutionalArgs {
727    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
728    pub(crate) symbol: String,
729    /// 分页标识,首次不填;"-1" 表示无更多
730    #[arg(long, allow_hyphen_values = true)]
731    pub(crate) next_key: Option<String>,
732    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
733    #[arg(long)]
734    pub(crate) num: Option<i32>,
735}
736
737#[derive(Args)]
738pub struct InsiderHolderListArgs {
739    /// 美股证券 MARKET.CODE,如 US.AAPL
740    pub(crate) symbol: String,
741    /// 分页标识,首次不填;"-1" 表示无更多
742    #[arg(long, allow_hyphen_values = true)]
743    pub(crate) next_key: Option<String>,
744    /// 每页返回数量,范围 1~20;不传走 C++ 默认 10
745    #[arg(long)]
746    pub(crate) num: Option<i32>,
747}
748
749#[derive(Args)]
750pub struct InsiderTradeListArgs {
751    /// 美股证券 MARKET.CODE,如 US.AAPL
752    pub(crate) symbol: String,
753    /// 内部人股东 ID;可取自 insider-holder-list 或本命令返回的 Holder ID
754    #[arg(long)]
755    pub(crate) holder_id: Option<i64>,
756    /// 分页标识,首次不填;"-1" 表示无更多
757    #[arg(long, allow_hyphen_values = true)]
758    pub(crate) next_key: Option<String>,
759    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
760    #[arg(long)]
761    pub(crate) num: Option<i32>,
762}
763
764#[derive(Args)]
765pub struct OptionVolatilityArgs {
766    /// 期权 MARKET.CODE,如 US.AAPL260116C200000
767    pub(crate) symbol: String,
768    /// 查询周期:0/不填=月;1=周,2=月,3=季,4=半年,5=年
769    #[arg(long)]
770    pub(crate) query_time_period: Option<i32>,
771    /// 标的历史波动率周期,范围 5~250;不传走 C++ 默认 30
772    #[arg(long)]
773    pub(crate) hv_time_period: Option<i32>,
774}
775
776#[derive(Args)]
777pub struct OptionExerciseProbabilityArgs {
778    /// 期权 MARKET.CODE,如 US.AAPL260116C200000
779    pub(crate) symbol: String,
780}