Skip to main content

futucli/cli/commands/
trade_write.rs

1//! Trade-write clap argument structs split from commands.rs.
2
3use clap::Args;
4
5#[derive(Args)]
6pub struct PlaceOrderArgs {
7    #[arg(short, long)]
8    pub(crate) market: String,
9
10    #[arg(long)]
11    pub(crate) acc_id: Option<u64>,
12
13    /// App 显示卡号:4 位末尾或 16 位完整卡号
14    #[arg(long = "card-num")]
15    pub(crate) card_num: Option<String>,
16
17    /// 交易环境(默认 simulate 防实盘误触)
18    #[arg(short, long, default_value = "simulate")]
19    pub(crate) env: String,
20
21    /// 买卖方向: BUY | SELL | SELL_SHORT | BUY_BACK
22    #[arg(long)]
23    pub(crate) side: String,
24
25    /// 订单类型: NORMAL | MARKET | ABSOLUTE_LIMIT | AUCTION | AUCTION_LIMIT | SPECIAL_LIMIT
26    #[arg(long, default_value = "NORMAL")]
27    pub(crate) order_type: String,
28
29    /// 股票代码(不含 market 前缀,如 00700 / AAPL)
30    #[arg(long)]
31    pub(crate) code: String,
32
33    /// 数量
34    #[arg(long)]
35    pub(crate) qty: f64,
36
37    /// 价格(NORMAL 限价单必填,MARKET 可省)
38    #[arg(long)]
39    pub(crate) price: Option<f64>,
40
41    /// real env 必须显式加此 flag 才能下单
42    #[arg(long)]
43    pub(crate) confirm: bool,
44
45    /// v1.4.39:可选幂等键。**设置后**,同一键在 90s 内重试返 cached 响应不
46    /// 重复下单(对齐 REST `Idempotency-Key` header 语义)。不设置则每次调
47    /// 用都真实下单。例:`--idempotency-key my-order-2026-04-20-a`
48    #[arg(long)]
49    pub(crate) idempotency_key: Option<String>,
50
51    /// **v1.4.53 条件单**:止损/止盈触发价(仅对 STOP / STOP_LIMIT / MIT /
52    /// LIT / TRAILING_STOP / TRAILING_STOP_LIMIT 生效)。对齐 FTAPI `auxPrice`
53    #[arg(long)]
54    pub(crate) stop_price: Option<f64>,
55
56    /// **v1.4.53 条件单**:跟踪类型 1=Ratio(比例)/ 2=Amount(金额)
57    #[arg(long)]
58    pub(crate) trail_type: Option<i32>,
59
60    /// **v1.4.53 条件单**:跟踪金额 / 百分比(TrailType=1 时为百分比)
61    #[arg(long)]
62    pub(crate) trail_value: Option<f64>,
63
64    /// **v1.4.53 条件单**:指定价差(跟踪限价单用)
65    #[arg(long)]
66    pub(crate) trail_spread: Option<f64>,
67}
68
69#[derive(Args)]
70pub struct ModifyOrderArgs {
71    #[arg(short, long)]
72    pub(crate) market: String,
73
74    #[arg(long)]
75    pub(crate) acc_id: Option<u64>,
76
77    /// App 显示卡号:4 位末尾或 16 位完整卡号
78    #[arg(long = "card-num")]
79    pub(crate) card_num: Option<String>,
80
81    #[arg(short, long, default_value = "simulate")]
82    pub(crate) env: String,
83
84    #[arg(long)]
85    pub(crate) order_id: String,
86
87    /// 操作类型: NORMAL(改数量价格)| CANCEL | DISABLE | ENABLE | DELETE
88    #[arg(long)]
89    pub(crate) op: String,
90
91    /// 新数量(op=NORMAL 必填)
92    #[arg(long)]
93    pub(crate) qty: Option<f64>,
94
95    /// 新价格(op=NORMAL 必填)
96    #[arg(long)]
97    pub(crate) price: Option<f64>,
98
99    #[arg(long)]
100    pub(crate) confirm: bool,
101
102    /// v1.4.39:可选幂等键。同 `place-order --idempotency-key`
103    #[arg(long)]
104    pub(crate) idempotency_key: Option<String>,
105}
106
107#[derive(Args)]
108pub struct CancelOrderArgs {
109    #[arg(short, long)]
110    pub(crate) market: String,
111
112    #[arg(long)]
113    pub(crate) acc_id: Option<u64>,
114
115    /// App 显示卡号:4 位末尾或 16 位完整卡号
116    #[arg(long = "card-num")]
117    pub(crate) card_num: Option<String>,
118
119    #[arg(short, long, default_value = "simulate")]
120    pub(crate) env: String,
121
122    #[arg(long)]
123    pub(crate) order_id: String,
124
125    /// v1.4.110:可选幂等键。同 `modify-order --idempotency-key`
126    #[arg(long)]
127    pub(crate) idempotency_key: Option<String>,
128
129    #[arg(long)]
130    pub(crate) confirm: bool,
131}
132
133#[derive(Args)]
134pub struct ReconfirmOrderArgs {
135    #[arg(short, long)]
136    pub(crate) market: String,
137
138    #[arg(long)]
139    pub(crate) acc_id: Option<u64>,
140
141    /// App 显示卡号:4 位末尾或 16 位完整卡号
142    #[arg(long = "card-num")]
143    pub(crate) card_num: Option<String>,
144
145    #[arg(short, long, default_value = "simulate")]
146    pub(crate) env: String,
147
148    /// 待二次确认的 FTAPI numeric order_id
149    #[arg(long)]
150    pub(crate) order_id: String,
151
152    /// 二次确认原因(Trd_Common.ReconfirmOrderReason int)
153    #[arg(long)]
154    pub(crate) reason: i32,
155
156    /// real env 必须显式加此 flag 才能二次确认订单
157    #[arg(long)]
158    pub(crate) confirm: bool,
159}