Skip to main content

futucli/cli/commands/
trade_read.rs

1//! Trade-read clap argument structs split from commands.rs.
2
3use clap::Args;
4
5#[derive(Args)]
6pub struct FundsArgs {
7    /// 市场: HK | US | CN | HKCC | SG | AU | JP | MY | CA | HKFUND |
8    /// USFUND. v1.4.106 ergonomics: 改为 optional, 不传时 daemon 按
9    /// `acc_id` cache 推断主市场 (TrdMarket::Unknown=0 走默认路径).
10    /// 综合账户 (uniCardNum 非空) 用户传或不传效果一致 (daemon
11    /// `acc_id` 路径不依赖 `trd_market` filter); 普通账户 (HK-only /
12    /// US-only) 不传也 OK, daemon 按账户主市场默认路由.
13    #[arg(short, long)]
14    pub(crate) market: Option<String>,
15
16    /// 交易账户 ID;也可改用 --card-num 传 App 显示卡号
17    #[arg(long)]
18    pub(crate) acc_id: Option<u64>,
19
20    /// App 显示卡号:4 位末尾或 16 位完整卡号
21    #[arg(long = "card-num")]
22    pub(crate) card_num: Option<String>,
23
24    /// 交易环境: real | simulate
25    #[arg(short, long, default_value = "real")]
26    pub(crate) env: String,
27
28    /// 资金视图币种: HKD | USD | CNH | JPY | SGD | AUD | CAD | MYR.
29    /// 不传时 daemon 使用账户所属券商的默认币种;显式传入时会校验
30    /// 该账户是否支持。普通单市场账户可能由 backend 忽略显式币种。
31    #[arg(long)]
32    pub(crate) currency: Option<String>,
33}
34
35#[derive(Args)]
36pub struct PositionArgs {
37    #[arg(short, long)]
38    pub(crate) market: String,
39
40    #[arg(long)]
41    pub(crate) acc_id: Option<u64>,
42
43    /// App 显示卡号:4 位末尾或 16 位完整卡号
44    #[arg(long = "card-num")]
45    pub(crate) card_num: Option<String>,
46
47    #[arg(short, long, default_value = "real")]
48    pub(crate) env: String,
49}
50
51#[derive(Args)]
52pub struct OrderArgs {
53    #[arg(short, long)]
54    pub(crate) market: String,
55
56    #[arg(long)]
57    pub(crate) acc_id: Option<u64>,
58
59    /// App 显示卡号:4 位末尾或 16 位完整卡号
60    #[arg(long = "card-num")]
61    pub(crate) card_num: Option<String>,
62
63    #[arg(short, long, default_value = "real")]
64    pub(crate) env: String,
65}
66
67#[derive(Args)]
68pub struct DealArgs {
69    #[arg(short, long)]
70    pub(crate) market: String,
71
72    #[arg(long)]
73    pub(crate) acc_id: Option<u64>,
74
75    /// App 显示卡号:4 位末尾或 16 位完整卡号
76    #[arg(long = "card-num")]
77    pub(crate) card_num: Option<String>,
78
79    #[arg(short, long, default_value = "real")]
80    pub(crate) env: String,
81}
82
83#[derive(Args)]
84pub struct HistoryOrdersArgs {
85    #[arg(short, long)]
86    pub(crate) market: String,
87
88    #[arg(long)]
89    pub(crate) acc_id: Option<u64>,
90
91    /// App 显示卡号:4 位末尾或 16 位完整卡号
92    #[arg(long = "card-num")]
93    pub(crate) card_num: Option<String>,
94
95    #[arg(short, long, default_value = "real")]
96    pub(crate) env: String,
97
98    /// 代码列表(空=不过滤),不含 market 前缀,逗号分隔
99    #[arg(long)]
100    pub(crate) codes: Option<String>,
101
102    /// 开始时间 'yyyy-MM-dd HH:mm:ss'
103    #[arg(long)]
104    pub(crate) begin: Option<String>,
105
106    /// 结束时间 'yyyy-MM-dd HH:mm:ss'
107    #[arg(long)]
108    pub(crate) end: Option<String>,
109}
110
111#[derive(Args)]
112pub struct HistoryDealsArgs {
113    #[arg(short, long)]
114    pub(crate) market: String,
115
116    #[arg(long)]
117    pub(crate) acc_id: Option<u64>,
118
119    /// App 显示卡号:4 位末尾或 16 位完整卡号
120    #[arg(long = "card-num")]
121    pub(crate) card_num: Option<String>,
122
123    #[arg(short, long, default_value = "real")]
124    pub(crate) env: String,
125
126    #[arg(long)]
127    pub(crate) codes: Option<String>,
128
129    #[arg(long)]
130    pub(crate) begin: Option<String>,
131
132    #[arg(long)]
133    pub(crate) end: Option<String>,
134}
135
136#[derive(Args)]
137pub struct MaxQtysArgs {
138    #[arg(short, long)]
139    pub(crate) market: String,
140
141    #[arg(long)]
142    pub(crate) acc_id: Option<u64>,
143
144    /// App 显示卡号:4 位末尾或 16 位完整卡号
145    #[arg(long = "card-num")]
146    pub(crate) card_num: Option<String>,
147
148    #[arg(short, long, default_value = "real")]
149    pub(crate) env: String,
150
151    /// 订单类型(和 place-order 一致)
152    #[arg(long, default_value = "NORMAL")]
153    pub(crate) order_type: String,
154
155    #[arg(long)]
156    pub(crate) code: String,
157
158    /// 限价(MARKET 单传 0)
159    #[arg(long)]
160    pub(crate) price: f64,
161}
162
163#[derive(Args)]
164pub struct MarginRatioArgs {
165    /// 交易市场:HK / US / CN / HKCC
166    #[arg(short, long)]
167    pub(crate) market: String,
168
169    /// 交易账户 ID
170    #[arg(long)]
171    pub(crate) acc_id: Option<u64>,
172
173    /// App 显示卡号:4 位末尾或 16 位完整卡号
174    #[arg(long = "card-num")]
175    pub(crate) card_num: Option<String>,
176
177    /// 环境:real / simulate(默认 real)
178    #[arg(short, long, default_value = "real")]
179    pub(crate) env: String,
180
181    /// 证券列表,逗号分隔(位置参数或 --code / --symbols 二选一)
182    #[arg(index = 1, value_name = "SYMBOLS")]
183    pub(crate) symbols: Option<String>,
184
185    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
186    #[arg(long = "code", visible_alias = "symbols", conflicts_with = "symbols")]
187    pub(crate) symbols_arg: Option<String>,
188}
189
190#[derive(Args)]
191pub struct OrderFeeArgs {
192    /// 交易市场:HK / US / CN / HKCC
193    #[arg(short, long)]
194    pub(crate) market: String,
195
196    /// 交易账户 ID
197    #[arg(long)]
198    pub(crate) acc_id: Option<u64>,
199
200    /// App 显示卡号:4 位末尾或 16 位完整卡号
201    #[arg(long = "card-num")]
202    pub(crate) card_num: Option<String>,
203
204    /// 环境:real / simulate(默认 real)
205    #[arg(short, long, default_value = "real")]
206    pub(crate) env: String,
207
208    /// 扩展订单号列表,逗号分隔(从 `order` / `history-orders` 的 order_id_ex 列取)
209    pub(crate) order_ids: String,
210}
211
212#[derive(Args)]
213pub struct AccCashFlowArgs {
214    /// 账户 id(位置参数或 --acc-id 二选一)
215    #[arg(index = 1, value_name = "ACC_ID")]
216    pub(crate) acc_id: Option<u64>,
217
218    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
219    #[arg(long = "acc-id", conflicts_with = "acc_id")]
220    pub(crate) acc_id_arg: Option<u64>,
221
222    /// App 显示卡号:4 位末尾或 16 位完整卡号
223    #[arg(long = "card-num")]
224    pub(crate) card_num: Option<String>,
225
226    /// 清算日期 YYYY-MM-DD(单日;和 `--date-range` 二选一)
227    #[arg(long, conflicts_with = "date_range")]
228    pub(crate) date: Option<String>,
229
230    /// v1.4.32+ 日期范围 `YYYY-MM-DD..YYYY-MM-DD`(跨度上限 31 天,跳周末)
231    #[arg(long, conflicts_with = "date")]
232    pub(crate) date_range: Option<String>,
233
234    /// 环境:simulate / real(默认 real)
235    #[arg(long, default_value = "real")]
236    pub(crate) env: String,
237
238    /// 市场:HK / US / CN / HKCC(默认 HK)
239    #[arg(long, default_value = "HK")]
240    pub(crate) market: String,
241
242    /// 方向过滤:1=入金 / 2=出金(默认全部)
243    #[arg(long)]
244    pub(crate) direction: Option<i32>,
245}