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 MarginRatioArgs {
188    /// 交易市场:HK / US / CN / HKCC
189    #[arg(short, long)]
190    pub(crate) market: String,
191
192    /// 交易账户 ID
193    #[arg(long)]
194    pub(crate) acc_id: Option<u64>,
195
196    /// App 显示卡号:4 位末尾或 16 位完整卡号
197    #[arg(long = "card-num")]
198    pub(crate) card_num: Option<String>,
199
200    /// 环境:real / simulate(默认 real)
201    #[arg(short, long, default_value = "real")]
202    pub(crate) env: String,
203
204    /// 证券列表,逗号分隔(位置参数或 --code / --symbols 二选一)
205    #[arg(index = 1, value_name = "SYMBOLS")]
206    pub(crate) symbols: Option<String>,
207
208    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
209    #[arg(long = "code", visible_alias = "symbols", conflicts_with = "symbols")]
210    pub(crate) symbols_arg: Option<String>,
211}
212
213#[derive(Args)]
214pub struct OrderFeeArgs {
215    /// 交易市场:HK / US / CN / HKCC
216    #[arg(short, long)]
217    pub(crate) market: String,
218
219    /// 交易账户 ID
220    #[arg(long)]
221    pub(crate) acc_id: Option<u64>,
222
223    /// App 显示卡号:4 位末尾或 16 位完整卡号
224    #[arg(long = "card-num")]
225    pub(crate) card_num: Option<String>,
226
227    /// 环境:real / simulate(默认 real)
228    #[arg(short, long, default_value = "real")]
229    pub(crate) env: String,
230
231    /// 扩展订单号列表,逗号分隔(从 `order` / `history-orders` 的 order_id_ex 列取)
232    pub(crate) order_ids: String,
233}
234
235#[derive(Args)]
236pub struct AccCashFlowArgs {
237    /// 账户 id(位置参数或 --acc-id 二选一)
238    #[arg(index = 1, value_name = "ACC_ID")]
239    pub(crate) acc_id: Option<u64>,
240
241    /// v1.4.52 BUG-9: REST/MCP 风格命名参数 alias
242    #[arg(long = "acc-id", conflicts_with = "acc_id")]
243    pub(crate) acc_id_arg: Option<u64>,
244
245    /// App 显示卡号:4 位末尾或 16 位完整卡号
246    #[arg(long = "card-num")]
247    pub(crate) card_num: Option<String>,
248
249    /// 清算日期 YYYY-MM-DD(单日;和 `--date-range` 二选一)
250    #[arg(long, conflicts_with = "date_range")]
251    pub(crate) date: Option<String>,
252
253    /// v1.4.32+ 日期范围 `YYYY-MM-DD..YYYY-MM-DD`(跨度上限 31 天,跳周末)
254    #[arg(long, conflicts_with = "date")]
255    pub(crate) date_range: Option<String>,
256
257    /// 环境:simulate / real(默认 real)
258    #[arg(long, default_value = "real")]
259    pub(crate) env: String,
260
261    /// 市场:HK / US / CN / HKCC(默认 HK)
262    #[arg(long, default_value = "HK")]
263    pub(crate) market: String,
264
265    /// 方向过滤:1=入金 / 2=出金(默认全部)
266    #[arg(long)]
267    pub(crate) direction: Option<i32>,
268}