pub struct CheckCtx {
pub market: String,
pub symbol: String,
pub order_value: Option<f64>,
pub trd_side: Option<String>,
pub acc_id: Option<u64>,
pub mutation_no_exposure: bool,
pub currency: Option<String>,
}Expand description
限额检查上下文:一次下单的 market/symbol/金额/方向
Fields§
§market: String“HK” / “US” / “CN” / “HKCC” 等
symbol: String“HK.00700” 格式(market + code);空串 表示调用方无法推导 symbol (改单 / 撤单路径),此时 symbol 白名单检查被跳过(但 market 仍会被校验)。
order_value: Option<f64>qty × price(本币);None 表示无法计算(如 MARKET 单),跳过金额检查
trd_side: Option<String>交易方向字符串("BUY" / "SELL" / …);None 表示无需方向校验
(改单 / 撤单路径)
acc_id: Option<u64>v1.4.35:被操作的账户 ID;None 表示此请求不涉及特定账户(全局请求 如 subscribe / quote,跳过 acc_id 白名单检查)。
mutation_no_exposure: boolv1.4.106 codex 0538 F2 (P2): typed marker — 此 mutation 不产生 新 exposure delta(撤单 / 失效 / 生效 / 删除老单)。
语义:true = 改 daemon 状态但不动 risk exposure(不跑 daily counter, 但仍跑 acc_id / market / rate / hours 白名单)。 false = 真有 exposure delta(PlaceOrder, ModifyOrder Normal)→ 必须给 order_value 让 daily counter 累加.
区分 ModifyOrder 5 种 op:
| modify_order_op | 含义 | mutation_no_exposure | order_value |
|---|---|---|---|
| 1 (Normal) | 改价 / 改量 → 新 exposure | false | Some(qty*price) |
| 2 (Cancel) | 撤单 → 减 exposure | true | None |
| 3 (Disable) | 失效 | true | None |
| 4 (Enable) | 生效(之前 Disable) | true | None (cap 难算) |
| 5 (Delete) | 删除老单 | true | None |
保守语义:Enable 理论可重新激活老单产生 exposure, 但不知 qty/price 上下文(仅靠 order_id),无法算 order_value → 标 mutation_no_exposure = true(跳 daily counter);rate-window 仍计数挡 spray attack。
默认 false: 所有 PlaceOrder / 已知 exposure 路径默认 false(保守)。
currency: Option<String>v1.4.106 codex 0538 F4 (P3): 订单币种 (HKD / USD / CNY / JPY
/ SGD / AUD / MYR / CAD 等)
None = legacy 单桶模式 (counter 全合并到 _default_ key, 与 v1.4.105
行为完全等价);
Some(ccy) = per-currency 桶 (HKD / USD / … 各自独立 daily counter, USD 单不消耗 HKD 配额, 防 cross-currency dilution).
Limits::max_daily_value cap 解释成每个 currency 桶独立 cap.
由调用方从 market 派生 (见 market_to_currency).