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    /// 例:`{"multi_legs":[...]}`。这是 10.7 新接口的薄 proto-json 入口,
10    /// 不会替用户改写字段或补默认值。
11    #[arg(long = "c2s-json", value_name = "JSON")]
12    pub(crate) c2s_json: String,
13}
14
15#[derive(Args)]
16pub struct QuoteArgs {
17    /// 股票代码,MARKET.CODE 格式,如 HK.00700 US.AAPL
18    #[arg(required = true)]
19    pub(crate) symbols: Vec<String>,
20}
21
22#[derive(Args)]
23pub struct SnapshotArgs {
24    /// 股票代码,MARKET.CODE 格式
25    #[arg(required = true)]
26    pub(crate) symbols: Vec<String>,
27}
28
29#[derive(Args)]
30pub struct SubArgs {
31    /// 股票代码,MARKET.CODE 格式
32    #[arg(required = true)]
33    pub(crate) symbols: Vec<String>,
34
35    /// 订阅类型,逗号分隔
36    ///
37    /// 支持: basic, orderbook, orderbook_odd, ticker, rt, kl_day, kl_1min, kl_3min, kl_5min,
38    ///       kl_15min, kl_30min, kl_60min, kl_week, kl_month, broker, order_detail
39    ///
40    /// v1.4.83 §10 新增 aliases: `--sub-type` / `--sub-types` / `--stype`
41    #[arg(
42        short = 't',
43        long,
44        visible_aliases = ["sub-type", "sub-types", "stype"],
45        default_value = "basic"
46    )]
47    pub(crate) r#type: String,
48}
49
50#[derive(Args)]
51pub struct KlineArgs {
52    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
53    #[arg(index = 1, value_name = "SYMBOL")]
54    pub(crate) symbol_positional: Option<String>,
55
56    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
57    #[arg(
58        long = "symbol",
59        visible_aliases = ["code", "stock"],
60        conflicts_with = "symbol_positional",
61        value_name = "SYMBOL"
62    )]
63    pub(crate) symbol_arg: Option<String>,
64
65    /// K 线类型: day | week | month | 1min | 5min | 15min | 30min | 60min | quarter | year
66    ///
67    /// v1.4.83 §10 新增 aliases: `--ktype` / `--kltype` / `--kl-type`
68    #[arg(
69        short = 't',
70        long,
71        visible_aliases = ["ktype", "kltype", "kl-type"],
72        default_value = "day"
73    )]
74    pub(crate) r#type: String,
75
76    /// 返回根数(默认 100)
77    ///
78    /// v1.4.83 §10 新增 aliases: `--num` / `--max-count` / `--req-count`
79    #[arg(
80        short = 'n',
81        long,
82        visible_aliases = ["num", "max-count", "req-count"]
83    )]
84    pub(crate) count: Option<i32>,
85
86    /// 开始日期 yyyy-MM-dd(默认 end - 回溯)
87    ///
88    /// v1.4.83 §10 alias: `--begin-time` / `--from`
89    #[arg(long, visible_aliases = ["begin-time", "from"])]
90    pub(crate) begin: Option<String>,
91
92    /// 结束日期 yyyy-MM-dd(默认今日)
93    ///
94    /// v1.4.83 §10 alias: `--end-time` / `--to`
95    #[arg(long, visible_aliases = ["end-time", "to"])]
96    pub(crate) end: Option<String>,
97}
98
99#[derive(Args)]
100pub struct OrderbookArgs {
101    /// 股票代码,MARKET.CODE 格式(positional)或 `--symbol`/`--code` 指定
102    #[arg(index = 1, value_name = "SYMBOL")]
103    pub(crate) symbol_positional: Option<String>,
104
105    /// v1.4.83 §10 alias: 显式 `--symbol <X>` / `--code <X>` / `--stock <X>`
106    #[arg(
107        long = "symbol",
108        visible_aliases = ["code", "stock"],
109        conflicts_with = "symbol_positional",
110        value_name = "SYMBOL"
111    )]
112    pub(crate) symbol_arg: Option<String>,
113
114    /// 摆盘深度(档数)
115    ///
116    /// v1.4.83 §10 新增 aliases: `--num` / `--count`
117    #[arg(
118        short = 'n',
119        long,
120        visible_aliases = ["num", "count"],
121        default_value_t = 10
122    )]
123    pub(crate) depth: i32,
124
125    /// 查询 SG/MY 碎股摆盘(会订阅 SubType_OrderBook_Odd=22)
126    #[arg(long = "odd-lot", visible_alias = "odd")]
127    pub(crate) odd_lot: bool,
128}
129
130#[derive(Args)]
131pub struct TickerArgs {
132    /// 股票代码
133    #[arg(index = 1, value_name = "SYMBOL")]
134    pub(crate) symbol_positional: Option<String>,
135
136    /// v1.4.83 §10 alias
137    #[arg(
138        long = "symbol",
139        visible_aliases = ["code", "stock"],
140        conflicts_with = "symbol_positional",
141        value_name = "SYMBOL"
142    )]
143    pub(crate) symbol_arg: Option<String>,
144
145    /// 拉取根数
146    ///
147    /// v1.4.83 §10 aliases: `--num` / `--max-count`
148    #[arg(
149        short = 'n',
150        long,
151        visible_aliases = ["num", "max-count"],
152        default_value_t = 100
153    )]
154    pub(crate) count: i32,
155}
156
157#[derive(Args)]
158pub struct RtArgs {
159    /// 股票代码
160    #[arg(index = 1, value_name = "SYMBOL")]
161    pub(crate) symbol_positional: Option<String>,
162
163    /// v1.4.83 §10 alias
164    #[arg(
165        long = "symbol",
166        visible_aliases = ["code", "stock"],
167        conflicts_with = "symbol_positional",
168        value_name = "SYMBOL"
169    )]
170    pub(crate) symbol_arg: Option<String>,
171}
172
173#[derive(Args)]
174pub struct StaticArgs {
175    /// 股票代码(可多个)
176    #[arg(required = true)]
177    pub(crate) symbols: Vec<String>,
178}
179
180#[derive(Args)]
181pub struct BrokerArgs {
182    /// 股票代码
183    #[arg(index = 1, value_name = "SYMBOL")]
184    pub(crate) symbol_positional: Option<String>,
185
186    /// v1.4.83 §10 alias
187    #[arg(
188        long = "symbol",
189        visible_aliases = ["code", "stock"],
190        conflicts_with = "symbol_positional",
191        value_name = "SYMBOL"
192    )]
193    pub(crate) symbol_arg: Option<String>,
194}
195
196#[derive(Args)]
197pub struct PlateListArgs {
198    /// 市场: HK | HK_FUTURE | US | SH | SZ
199    #[arg(short, long)]
200    pub(crate) market: String,
201
202    /// 板块类型: all | industry | region | concept;region 仅 SH/SZ 有后端数据,HK/HK_FUTURE/US 对齐 C++ 返回成功空列表
203    // v1.4.52 BUG-9: visible_alias = "plate-type" 供 REST/MCP 风格用户
204    #[arg(short = 's', long, visible_alias = "plate-type", default_value = "all")]
205    pub(crate) set: String,
206}
207
208#[derive(Args)]
209pub struct PlateStocksArgs {
210    /// 板块 symbol,MARKET.CODE 格式(位置参数或 --plate 二选一)
211    #[arg(index = 1, value_name = "PLATE")]
212    pub(crate) plate: Option<String>,
213
214    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
215    #[arg(long = "plate", conflicts_with = "plate")]
216    pub(crate) plate_arg: Option<String>,
217}
218
219#[derive(Args)]
220pub struct CapitalFlowArgs {
221    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
222    pub(crate) symbol: String,
223    /// 周期类型:1=分时 2=1日 3=3日 4=5日 5=10日 6=20日 7=30日 8=60日 9=90日 10=180日 11=360日
224    #[arg(long, default_value_t = 1)]
225    pub(crate) period_type: i32,
226    /// 开始时间 YYYY-MM-DD HH:MM:SS(可选)
227    #[arg(long)]
228    pub(crate) begin: Option<String>,
229    /// 结束时间(可选)
230    #[arg(long)]
231    pub(crate) end: Option<String>,
232}
233
234#[derive(Args)]
235pub struct CompanyProfileArgs {
236    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
237    pub(crate) symbol: String,
238}
239
240#[derive(Args)]
241pub struct CompanyExecutivesArgs {
242    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
243    pub(crate) symbol: String,
244}
245
246#[derive(Args)]
247pub struct CompanyExecutiveBackgroundArgs {
248    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
249    pub(crate) symbol: String,
250    /// 高管/董事姓名,通常来自 company-executives 返回的 leader_name
251    pub(crate) leader_name: String,
252}
253
254#[derive(Args)]
255pub struct CompanyOperationalEfficiencyArgs {
256    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
257    pub(crate) symbol: String,
258    /// 分页标识,首次不填,续拉填上次返回的 next_key
259    #[arg(long, allow_hyphen_values = true)]
260    pub(crate) next_key: Option<String>,
261    /// 每页返回数量,范围 1~50;不传走 backend 默认 10
262    #[arg(long)]
263    pub(crate) num: Option<i32>,
264    /// 货币代码,如 CNY / USD / HKD
265    #[arg(long)]
266    pub(crate) currency_code: Option<String>,
267    /// 兼容保留字段;C++ OpenD 在经营效率接口忽略 financialType,固定查询后端年报视图
268    #[arg(long)]
269    pub(crate) financial_type: Option<i32>,
270}
271
272#[derive(Args)]
273pub struct FinancialsEarningsPriceMoveArgs {
274    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
275    pub(crate) symbol: String,
276    /// 财报周期数量,范围 1~50;不传走 backend 默认 10
277    #[arg(long)]
278    pub(crate) period_count: Option<i32>,
279}
280
281#[derive(Args)]
282pub struct FinancialsEarningsPriceHistoryArgs {
283    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
284    pub(crate) symbol: String,
285}
286
287#[derive(Args)]
288pub struct FinancialsStatementsArgs {
289    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
290    pub(crate) symbol: String,
291    /// 财务报表类型,0=未知,1=利润表,2=资产负债表,3=现金流量表,4=关键指标;不传走 C++ 默认 1
292    #[arg(long)]
293    pub(crate) statement_type: Option<i32>,
294    /// 财报周期筛选,支持 0~7 和 9~11;不传走 C++ 默认 10
295    #[arg(long)]
296    pub(crate) financial_type: Option<i32>,
297    /// 货币代码,如 CNY / USD / HKD
298    #[arg(long)]
299    pub(crate) currency_code: Option<String>,
300    /// 分页标识,首次不填,续拉填上次返回的 next_key
301    #[arg(long, allow_hyphen_values = true)]
302    pub(crate) next_key: Option<String>,
303    /// 每页返回数量,范围 1~50;不传走 backend 默认 10
304    #[arg(long)]
305    pub(crate) num: Option<i32>,
306}
307
308#[derive(Args)]
309pub struct FinancialsRevenueBreakdownArgs {
310    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
311    pub(crate) symbol: String,
312    /// 筛选时间戳,来自上次返回的 screen_date_list.date
313    #[arg(long)]
314    pub(crate) date: Option<u32>,
315    /// 财报周期筛选,支持 0~7 和 9;不传走 C++ 默认 0
316    #[arg(long)]
317    pub(crate) financial_type: Option<i32>,
318    /// 货币代码,如 CNY / USD / HKD
319    #[arg(long)]
320    pub(crate) currency_code: Option<String>,
321}
322
323#[derive(Args)]
324pub struct ResearchAnalystConsensusArgs {
325    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
326    pub(crate) symbol: String,
327}
328
329#[derive(Args)]
330pub struct ResearchRatingSummaryArgs {
331    /// 证券 MARKET.CODE,如 US.AAPL / CA.SHOP
332    pub(crate) symbol: String,
333    /// 评级维度,0/1=机构,2=分析师;0 或不传走 C++ 默认机构维度
334    #[arg(long)]
335    pub(crate) rating_dimension_type: Option<i32>,
336    /// 机构或分析师 uid;不传返回汇总列表,传入返回详情
337    #[arg(long)]
338    pub(crate) uid: Option<String>,
339    /// 分页标识,首次不填,续拉填上次返回的 next_key
340    #[arg(long, allow_hyphen_values = true)]
341    pub(crate) next_key: Option<String>,
342    /// 每页返回数量,范围 1~20;不传走 C++ 默认 10
343    #[arg(long)]
344    pub(crate) num: Option<i32>,
345}
346
347#[derive(Args)]
348pub struct ResearchMorningstarReportArgs {
349    /// 证券 MARKET.CODE,如 US.AAPL
350    pub(crate) symbol: String,
351}
352
353#[derive(Args)]
354pub struct ValuationDetailArgs {
355    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL / HK.800000
356    pub(crate) symbol: String,
357    /// 估值类型,0=推荐类型,1=PE,2=PB,3=PS;不传走 C++ 默认 0
358    #[arg(long)]
359    pub(crate) valuation_type: Option<i32>,
360    /// 区间类型,1=3个月,2=6个月,3=1年,4=3年,5=2019至今,6=5年,7=10年,8=2年,9=20年,10=30年;0/不传走 C++ 默认 3
361    #[arg(long)]
362    pub(crate) interval_type: Option<i32>,
363}
364
365#[derive(Args)]
366pub struct ValuationPlateStockListArgs {
367    /// 指数或板块 MARKET.CODE,如 HK.800000 / HK.BK0001
368    pub(crate) symbol: String,
369    /// 估值类型,0/1=PE,2=PB,3=PS;0 或不传走 C++ 默认 PE
370    #[arg(long)]
371    pub(crate) valuation_type: Option<i32>,
372    /// 分页标识,首次不填,续拉填上次返回的 next_key
373    #[arg(long, allow_hyphen_values = true)]
374    pub(crate) next_key: Option<String>,
375    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
376    #[arg(long)]
377    pub(crate) num: Option<i32>,
378    /// 排序方向,0/2=升序,1=降序;不传走 C++ 默认升序
379    #[arg(long)]
380    pub(crate) sort_type: Option<i32>,
381    /// 排序列,51=市值,52=估值,53=预测估值,54=历史分位
382    #[arg(long)]
383    pub(crate) sort_id: Option<i32>,
384    /// 指数成分股筛选板块 MARKET.CODE,仅指数场景有效
385    #[arg(long)]
386    pub(crate) filter_security: Option<String>,
387}
388
389#[derive(Args)]
390pub struct StockScreenArgs {
391    /// 完整 Qot_StockScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 filter_list/retrieve_list/page_from/page_count
392    #[arg(long = "c2s-json")]
393    pub(crate) c2s_json: String,
394}
395
396#[derive(Args)]
397pub struct OptionScreenArgs {
398    /// 完整 Qot_OptionScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 market_category_list/filter_list/sort_list/page_from/page_count
399    #[arg(long = "c2s-json")]
400    pub(crate) c2s_json: String,
401}
402
403#[derive(Args)]
404pub struct WarrantScreenArgs {
405    /// 完整 Qot_WarrantScreen C2S JSON;使用生成 proto 的 snake_case 字段,如 market_type/filter_list/sort_list/page_from/page_count
406    #[arg(long = "c2s-json")]
407    pub(crate) c2s_json: String,
408}
409
410#[derive(Args)]
411pub struct TechnicalUnusualArgs {
412    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
413    pub(crate) stock_symbol: String,
414    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
415    #[arg(long)]
416    pub(crate) time_range: Option<i32>,
417    /// 技术指标过滤项;可重复传入,不传表示全部
418    #[arg(long = "indicator-filter")]
419    pub(crate) indicator_filters: Vec<String>,
420    /// 返回语种:0=简中,1=繁中,2=英文
421    #[arg(long)]
422    pub(crate) language_id: Option<i32>,
423}
424
425#[derive(Args)]
426pub struct FinancialUnusualArgs {
427    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
428    pub(crate) stock_symbol: String,
429    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
430    #[arg(long)]
431    pub(crate) time_range: Option<i32>,
432    /// 分析维度;可重复传入,不传表示全部
433    #[arg(long = "analysis-dimension")]
434    pub(crate) analysis_dimensions: Vec<String>,
435    /// 返回语种:0=简中,1=繁中,2=英文
436    #[arg(long)]
437    pub(crate) language_id: Option<i32>,
438}
439
440#[derive(Args)]
441pub struct DerivativeUnusualArgs {
442    /// 股票 MARKET.CODE,如 HK.00700 / US.AAPL
443    pub(crate) stock_symbol: String,
444    /// 时间范围天数;不传或 <=0 走 C++ 默认 7
445    #[arg(long)]
446    pub(crate) time_range: Option<i32>,
447    /// 分析维度;可重复传入,不传表示全部
448    #[arg(long = "analysis-dimension")]
449    pub(crate) analysis_dimensions: Vec<String>,
450    /// 返回语种:0=简中,1=繁中,2=英文
451    #[arg(long)]
452    pub(crate) language_id: Option<i32>,
453}
454
455#[derive(Args)]
456pub struct CorporateActionsDividendsArgs {
457    /// 证券 MARKET.CODE,如 HK.00700 / SH.600519
458    pub(crate) symbol: String,
459}
460
461#[derive(Args)]
462pub struct CorporateActionsBuybacksArgs {
463    /// 证券 MARKET.CODE,如 HK.00700 / SH.600519
464    pub(crate) symbol: String,
465    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
466    #[arg(long, allow_hyphen_values = true)]
467    pub(crate) next_key: Option<String>,
468    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
469    #[arg(long)]
470    pub(crate) num: Option<i32>,
471}
472
473#[derive(Args)]
474pub struct CorporateActionsStockSplitsArgs {
475    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
476    pub(crate) symbol: String,
477    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
478    #[arg(long, allow_hyphen_values = true)]
479    pub(crate) next_key: Option<String>,
480    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
481    #[arg(long)]
482    pub(crate) num: Option<i32>,
483}
484
485#[derive(Args)]
486pub struct DailyShortVolumeArgs {
487    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
488    pub(crate) symbol: String,
489    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
490    #[arg(long, allow_hyphen_values = true)]
491    pub(crate) next_key: Option<String>,
492    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
493    #[arg(long)]
494    pub(crate) num: Option<i32>,
495}
496
497#[derive(Args)]
498pub struct ShortInterestArgs {
499    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
500    pub(crate) symbol: String,
501    /// 分页标识,首次不填,续拉填上次返回的 next_key;"-1" 表示无更多
502    #[arg(long, allow_hyphen_values = true)]
503    pub(crate) next_key: Option<String>,
504    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
505    #[arg(long)]
506    pub(crate) num: Option<i32>,
507}
508
509#[derive(Args)]
510pub struct TopTenBuySellBrokersArgs {
511    /// 证券 MARKET.CODE,如 HK.00700
512    pub(crate) symbol: String,
513    /// 查询过去第 N 个交易日;0 或不传表示实时十大买卖经纪
514    #[arg(long)]
515    pub(crate) days_before: Option<i32>,
516}
517
518#[derive(Args)]
519pub struct ShareholdersOverviewArgs {
520    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
521    pub(crate) symbol: String,
522    /// 指定报告期 ID;不传或 0 返回最新数据并带可用报告期列表
523    #[arg(long)]
524    pub(crate) period_id: Option<i32>,
525}
526
527#[derive(Args)]
528pub struct ShareholdersHoldingChangesArgs {
529    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
530    pub(crate) symbol: String,
531    /// 分页标识,首次不填;"-1" 表示无更多
532    #[arg(long, allow_hyphen_values = true)]
533    pub(crate) next_key: Option<String>,
534    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
535    #[arg(long)]
536    pub(crate) num: Option<i32>,
537    /// 排序方向,0/1=降序,2=升序
538    #[arg(long)]
539    pub(crate) sort_type: Option<i32>,
540    /// 排序字段,62=持股变动数,63=持股日期,64=变动比例,65=变动金额,66=持股比例
541    #[arg(long)]
542    pub(crate) sort_column: Option<i32>,
543    /// 筛选类型,0=全部,1=增持,2=减持,3=建仓,4=清仓
544    #[arg(long)]
545    pub(crate) filter_type: Option<i32>,
546}
547
548#[derive(Args)]
549pub struct ShareholdersHolderDetailArgs {
550    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
551    pub(crate) symbol: String,
552    /// 持股明细类型,0=默认,1..15=机构类型,100/200/300/400/500,1000=全部
553    #[arg(long)]
554    pub(crate) request_type: Option<i32>,
555    /// 分页标识,首次不填;"-1" 表示无更多
556    #[arg(long, allow_hyphen_values = true)]
557    pub(crate) next_key: Option<String>,
558    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
559    #[arg(long)]
560    pub(crate) num: Option<i32>,
561    /// 排序字段,0/61=持股股数,62=持股变动数
562    #[arg(long)]
563    pub(crate) sort_column: Option<i32>,
564    /// 排序方向,0/1=降序,2=升序
565    #[arg(long)]
566    pub(crate) sort_type: Option<i32>,
567    /// 统计周期 ID
568    #[arg(long)]
569    pub(crate) period_id: Option<i32>,
570    /// 股东/持有人 ID
571    #[arg(long)]
572    pub(crate) holder_id: Option<i32>,
573}
574
575#[derive(Args)]
576pub struct ShareholdersInstitutionalArgs {
577    /// 证券 MARKET.CODE,如 HK.00700 / US.AAPL
578    pub(crate) symbol: String,
579    /// 分页标识,首次不填;"-1" 表示无更多
580    #[arg(long, allow_hyphen_values = true)]
581    pub(crate) next_key: Option<String>,
582    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
583    #[arg(long)]
584    pub(crate) num: Option<i32>,
585}
586
587#[derive(Args)]
588pub struct InsiderHolderListArgs {
589    /// 美股证券 MARKET.CODE,如 US.AAPL
590    pub(crate) symbol: String,
591    /// 分页标识,首次不填;"-1" 表示无更多
592    #[arg(long, allow_hyphen_values = true)]
593    pub(crate) next_key: Option<String>,
594    /// 每页返回数量,范围 1~20;不传走 C++ 默认 10
595    #[arg(long)]
596    pub(crate) num: Option<i32>,
597}
598
599#[derive(Args)]
600pub struct InsiderTradeListArgs {
601    /// 美股证券 MARKET.CODE,如 US.AAPL
602    pub(crate) symbol: String,
603    /// 内部人股东 ID;可取自 insider-holder-list 或本命令返回的 Holder ID
604    #[arg(long)]
605    pub(crate) holder_id: Option<i64>,
606    /// 分页标识,首次不填;"-1" 表示无更多
607    #[arg(long, allow_hyphen_values = true)]
608    pub(crate) next_key: Option<String>,
609    /// 每页返回数量,范围 1~50;不传走 C++ 默认 10
610    #[arg(long)]
611    pub(crate) num: Option<i32>,
612}
613
614#[derive(Args)]
615pub struct OptionVolatilityArgs {
616    /// 期权 MARKET.CODE,如 US.AAPL260116C200000
617    pub(crate) symbol: String,
618    /// 查询周期:0/不填=月;1=周,2=月,3=季,4=半年,5=年
619    #[arg(long)]
620    pub(crate) query_time_period: Option<i32>,
621    /// 标的历史波动率周期,范围 5~250;不传走 C++ 默认 30
622    #[arg(long)]
623    pub(crate) hv_time_period: Option<i32>,
624}
625
626#[derive(Args)]
627pub struct OptionExerciseProbabilityArgs {
628    /// 期权 MARKET.CODE,如 US.AAPL260116C200000
629    pub(crate) symbol: String,
630}