Skip to main content

pick_market_state

Function pick_market_state 

Source
pub fn pick_market_state(all: &[MarketStatus], mkt: QuoteMktType) -> Option<u32>
Expand description

v1.4.48 helper: 从全市场 snapshot 里按 QuoteMktType 过滤 + 取状态。

v1.4.71 D5 fix(eli v1.4.69 market_hk_future=0 报告,代码级定位到本函数): 之前 .find 取第一个匹配 → 对 HKFuture 同时匹配 FUT_HK=5(老港期,已 deprecated 但 backend 仍下发,status 常为 0=NOT_TRADING)和 FUT_HK_NEW=6 (主要港期,open 时 status=15=FUTURE_DAY_OPEN),如果 id=5 在 list 里排前面, 结果会返 0 遮蔽主要市场真实状态。修法:优先返 non-zero status 的匹配, 全 zero 才 fallback 到第一个。

v1.4.73 B1 D5 升级(eli v1.4.71 AI tester 报告 “Rust 对 HK/JP/SG 期货全 返 15,C++ SG 返 18=FUTURE_DAY_WAIT_OPEN”):同一个 QuoteMktType 范围 内 backend 可能下发多条 non-zero status(如 SGFuture 多个子交易所),当 同时有“开盘“类(15 / 23 / 3 / 5 / 13)和“等待开盘 / 休市“类(2 / 4 / 6 / 11 / 14 / 16 / 17 / 18 / 9 / 1)时,优先返后者(更精确描述市场实际情况: 不能交易的状态永远比“能交易“更安全,防止客户端误判“等待开盘“为“已开盘“下 单被拒)。

对齐 C++ APIServer_GlobalState.cpp:87-94 的语义 —— C++ 仅取 pMktStateInfo[0],但是 backend 层 INNData_Qot_EventNotice::GetMarketStateInfo 按 enum 精确 dispatch,不会混多个 market_id。Rust 的 market_id_matches 按 range 匹配,会得到多条,所以要在 selection 上做 “prefer restrictive” 来对齐 C++ 实际观测行为。

无匹配 → None。