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。