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 ComboMaxTrdQtysArgs {
7    /// 官方 `Trd_GetComboMaxTrdQtys.C2S` JSON。
8    ///
9    /// 字段名按 generated proto serde 的 snake_case 写法,例如
10    /// `header`、`combo_legs`、`order_type`。
11    #[arg(long = "c2s-json", value_name = "JSON")]
12    pub(crate) c2s_json: String,
13}
14
15#[derive(Args)]
16pub struct FundsArgs {
17    /// 市场: HK | US | CN | HKCC | SG | AU | JP | MY | CA | HKFUND |
18    /// USFUND. v1.4.106 ergonomics: 改为 optional, 不传时 daemon 按
19    /// `acc_id` cache 推断主市场 (TrdMarket::Unknown=0 走默认路径).
20    /// 综合账户 (uniCardNum 非空) 用户传或不传效果一致 (daemon
21    /// `acc_id` 路径不依赖 `trd_market` filter); 普通账户 (HK-only /
22    /// US-only) 不传也 OK, daemon 按账户主市场默认路由.
23    #[arg(short, long)]
24    pub(crate) market: Option<String>,
25
26    /// 交易账户 ID;也可改用 --card-num 传 App 显示卡号
27    #[arg(long)]
28    pub(crate) acc_id: Option<u64>,
29
30    /// App 显示卡号:4 位末尾或 16 位完整卡号
31    #[arg(long = "card-num")]
32    pub(crate) card_num: Option<String>,
33
34    /// 交易环境: real | simulate
35    #[arg(short, long, default_value = "real")]
36    pub(crate) env: String,
37
38    /// 资金视图币种: HKD | USD | CNH | JPY | SGD | AUD | CAD | MYR.
39    /// 不传时 daemon 使用账户所属券商的默认币种;显式传入时会校验
40    /// 该账户是否支持。普通单市场账户可能由 backend 忽略显式币种。
41    #[arg(long)]
42    pub(crate) currency: Option<String>,
43}
44
45#[derive(Args)]
46pub struct PositionArgs {
47    #[arg(short, long)]
48    pub(crate) market: String,
49
50    #[arg(long)]
51    pub(crate) acc_id: Option<u64>,
52
53    /// App 显示卡号:4 位末尾或 16 位完整卡号
54    #[arg(long = "card-num")]
55    pub(crate) card_num: Option<String>,
56
57    #[arg(short, long, default_value = "real")]
58    pub(crate) env: String,
59
60    /// 持仓视图币种。C++ 10.7 起 crypto 账户必填;非 crypto 账户由
61    /// daemon/backend 忽略并使用账户主币种。
62    #[arg(long)]
63    pub(crate) currency: Option<String>,
64
65    /// 请求期权策略组合持仓视图(C++ 10.7 optionStrategyView)。
66    #[arg(long = "option-strategy-view")]
67    pub(crate) option_strategy_view: bool,
68}
69
70#[derive(Args)]
71pub struct OrderArgs {
72    #[arg(short, long)]
73    pub(crate) market: String,
74
75    #[arg(long)]
76    pub(crate) acc_id: Option<u64>,
77
78    /// App 显示卡号:4 位末尾或 16 位完整卡号
79    #[arg(long = "card-num")]
80    pub(crate) card_num: Option<String>,
81
82    #[arg(short, long, default_value = "real")]
83    pub(crate) env: String,
84}
85
86#[derive(Args)]
87pub struct DealArgs {
88    #[arg(short, long)]
89    pub(crate) market: String,
90
91    #[arg(long)]
92    pub(crate) acc_id: Option<u64>,
93
94    /// App 显示卡号:4 位末尾或 16 位完整卡号
95    #[arg(long = "card-num")]
96    pub(crate) card_num: Option<String>,
97
98    #[arg(short, long, default_value = "real")]
99    pub(crate) env: String,
100}
101
102#[derive(Args)]
103pub struct HistoryOrdersArgs {
104    #[arg(short, long)]
105    pub(crate) market: String,
106
107    #[arg(long)]
108    pub(crate) acc_id: Option<u64>,
109
110    /// App 显示卡号:4 位末尾或 16 位完整卡号
111    #[arg(long = "card-num")]
112    pub(crate) card_num: Option<String>,
113
114    #[arg(short, long, default_value = "real")]
115    pub(crate) env: String,
116
117    /// 代码列表(空=不过滤),不含 market 前缀,逗号分隔
118    #[arg(long)]
119    pub(crate) codes: Option<String>,
120
121    /// 开始时间 'yyyy-MM-dd HH:mm:ss'
122    #[arg(long)]
123    pub(crate) begin: Option<String>,
124
125    /// 结束时间 'yyyy-MM-dd HH:mm:ss'
126    #[arg(long)]
127    pub(crate) end: Option<String>,
128}
129
130#[derive(Args)]
131pub struct HistoryDealsArgs {
132    #[arg(short, long)]
133    pub(crate) market: String,
134
135    #[arg(long)]
136    pub(crate) acc_id: Option<u64>,
137
138    /// App 显示卡号:4 位末尾或 16 位完整卡号
139    #[arg(long = "card-num")]
140    pub(crate) card_num: Option<String>,
141
142    #[arg(short, long, default_value = "real")]
143    pub(crate) env: String,
144
145    #[arg(long)]
146    pub(crate) codes: Option<String>,
147
148    #[arg(long)]
149    pub(crate) begin: Option<String>,
150
151    #[arg(long)]
152    pub(crate) end: Option<String>,
153}
154
155#[derive(Args)]
156pub struct MaxQtysArgs {
157    #[arg(short, long)]
158    pub(crate) market: String,
159
160    #[arg(long)]
161    pub(crate) acc_id: Option<u64>,
162
163    /// App 显示卡号:4 位末尾或 16 位完整卡号
164    #[arg(long = "card-num")]
165    pub(crate) card_num: Option<String>,
166
167    #[arg(short, long, default_value = "real")]
168    pub(crate) env: String,
169
170    /// 订单类型(和 place-order 一致)
171    #[arg(long, default_value = "NORMAL")]
172    pub(crate) order_type: String,
173
174    #[arg(long)]
175    pub(crate) code: String,
176
177    /// 限价(MARKET 单传 0)
178    #[arg(long)]
179    pub(crate) price: f64,
180
181    /// JP 子账户类型(TrdHeader.jpAccType / TrdSubAccType)
182    #[arg(long = "jp-acc-type")]
183    pub(crate) jp_acc_type: Option<i32>,
184}
185
186#[derive(Args)]
187pub struct TradeCheckArgs {
188    #[arg(short, long)]
189    pub(crate) market: String,
190
191    #[arg(long)]
192    pub(crate) acc_id: Option<u64>,
193
194    /// App 显示卡号:4 位末尾或 16 位完整卡号
195    #[arg(long = "card-num")]
196    pub(crate) card_num: Option<String>,
197
198    #[arg(short, long, default_value = "real")]
199    pub(crate) env: String,
200
201    /// 订单类型(和 max-qtys/place-order 一致);本命令只做只读试算
202    #[arg(long, default_value = "NORMAL")]
203    pub(crate) order_type: String,
204
205    /// 股票代码,可传 MARKET.CODE 或本地 code;MARKET.CODE 会用于 static warmup
206    #[arg(long)]
207    pub(crate) code: String,
208
209    /// 限价(MARKET 单传 0)
210    #[arg(long)]
211    pub(crate) price: f64,
212
213    /// JP 子账户类型(TrdHeader.jpAccType / TrdSubAccType)
214    #[arg(long = "jp-acc-type")]
215    pub(crate) jp_acc_type: Option<i32>,
216}
217
218#[derive(Args)]
219pub struct MarginRatioArgs {
220    /// 交易市场:HK / US / CN / HKCC
221    #[arg(short, long)]
222    pub(crate) market: String,
223
224    /// 交易账户 ID
225    #[arg(long)]
226    pub(crate) acc_id: Option<u64>,
227
228    /// App 显示卡号:4 位末尾或 16 位完整卡号
229    #[arg(long = "card-num")]
230    pub(crate) card_num: Option<String>,
231
232    /// 环境:real / simulate(默认 real)
233    #[arg(short, long, default_value = "real")]
234    pub(crate) env: String,
235
236    /// 证券列表,逗号分隔(位置参数或 --code / --symbols 二选一)
237    #[arg(index = 1, value_name = "SYMBOLS")]
238    pub(crate) symbols: Option<String>,
239
240    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
241    #[arg(long = "code", visible_alias = "symbols", conflicts_with = "symbols")]
242    pub(crate) symbols_arg: Option<String>,
243}
244
245#[derive(Args)]
246pub struct OrderFeeArgs {
247    /// 交易市场:HK / US / CN / HKCC
248    #[arg(short, long)]
249    pub(crate) market: String,
250
251    /// 交易账户 ID
252    #[arg(long)]
253    pub(crate) acc_id: Option<u64>,
254
255    /// App 显示卡号:4 位末尾或 16 位完整卡号
256    #[arg(long = "card-num")]
257    pub(crate) card_num: Option<String>,
258
259    /// 环境:real / simulate(默认 real)
260    #[arg(short, long, default_value = "real")]
261    pub(crate) env: String,
262
263    /// 扩展订单号列表,逗号分隔(从 `order` / `history-orders` 的 order_id_ex 列取)
264    pub(crate) order_ids: String,
265}
266
267#[derive(Args)]
268pub struct AccCashFlowArgs {
269    /// 账户 id(位置参数或 --acc-id 二选一)
270    #[arg(index = 1, value_name = "ACC_ID")]
271    pub(crate) acc_id: Option<u64>,
272
273    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
274    #[arg(long = "acc-id", conflicts_with = "acc_id")]
275    pub(crate) acc_id_arg: Option<u64>,
276
277    /// App 显示卡号:4 位末尾或 16 位完整卡号
278    #[arg(long = "card-num")]
279    pub(crate) card_num: Option<String>,
280
281    /// 清算日期 YYYY-MM-DD(单日;和 `--date-range` 二选一)
282    #[arg(long, conflicts_with = "date_range")]
283    pub(crate) date: Option<String>,
284
285    /// v1.4.32+ 日期范围 `YYYY-MM-DD..YYYY-MM-DD`(跨度上限 31 天,跳周末)
286    #[arg(long, conflicts_with = "date")]
287    pub(crate) date_range: Option<String>,
288
289    /// 环境:simulate / real(默认 real)
290    #[arg(long, default_value = "real")]
291    pub(crate) env: String,
292
293    /// 市场:HK / US / CN / HKCC(默认 HK)
294    #[arg(long, default_value = "HK")]
295    pub(crate) market: String,
296
297    /// 方向过滤:1=入金 / 2=出金(默认全部)
298    #[arg(long)]
299    pub(crate) direction: Option<i32>,
300}