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