一、为什么跨市场不是“多加几个 region”,而是一次工程重构
把 NYSE、TSX、BMV 放到同一套监控或研究里,难点往往不在“能不能拿到行情”,而在“能不能把行情解释在同一个坐标系里”。如果坐标系没统一,你会被大量伪信号淹没:同一天不同收盘时刻、同一家公司多地上市、不同币种计价、公司行为造成价格跃迁,都会把简单对比变成误读。
二、先把标的建模拆开:Issuer、Listing、Symbol 各司其职
跨市场最容易踩的坑,是把“公司”和“代码”当成同一件事。更稳妥的做法是三层拆分:Issuer 表示公司主体;Listing 表示某交易所上的一条上市记录(交易所、币种、交易时段、是否 ADR 等);Symbol 才是你系统里的唯一键。内部 symbol 推荐 REGION:CODE(例如 US:AAPL、CA:SHOP、MX:WALMEX),并通过 listingId 关联到 issuerId,这样“公司维度对比”和“上市地维度对比”都不会互相污染。
三、时间戳与交易状态:用 ts 对齐事件,用 marketDate 做报表
跨市场对齐不要用“日期”对齐“事件”。建议双时间体系并存:ts 统一 UTC 毫秒用于排序、补洞与对账;marketDate 必须由交易所日历生成用于日报与日线聚合。同时把交易状态显式化(Regular/Pre/After/Closed/Halt),即使上游没有直接给出,也要用日历与时间段推导出来,并让规则与指标能过滤“不可比状态”。
这一步最容易被低估的是夏令时与半日市:同样是“收盘价”,不同市场的收盘时刻会随 DST 切换发生偏移,节假日前的提前收盘也会让日线窗口变短。如果你不把日历与 session 做成底座能力,跨市场联动很容易只是“时段错位”的假象。
四、币种与 FX 快照:把换算口径写进结果,而不是写进脑子
跨市场比较要显式引入 FX 快照,否则汇率波动会制造伪差异。建议每个 listing 记录 quoteCurrency,并对每个计算窗口固定一个 fxSnapshotTs(例如窗口结束),把 fxSnapshotTs 与 FX 来源写进指标元数据。这样你才能复算并解释“差异来自标的还是来自汇率”。
五、公司行为与复权:把展示口径和触发口径分开
拆股、分红会让价格出现结构性跳变。工程上更可控的方式是:实时触发优先使用未复权的真实成交/报价,但在公司行为窗口内对敏感规则做降级或改用百分比阈值;研究统计统一使用复权序列,并把复权因子与公司行为事件表落库。只要口径在数据合同层面被固定,回测与实盘就更容易对齐。
六、质量校验与一致性:跨市场系统必须学会“怀疑数据”
跨市场里,数据质量问题会被放大成结构性错误。建议把校验前置到 ingestion 层:数据新鲜度(区分停牌 vs 数据停滞)、异常跳点、时序乱序可重排、以及 REST 快照与 WS 流的定期对账。尤其在休市或半日市,你需要把状态标成“不可比”,而不是用静止价格参与强弱对比。
七、存储与接口:Raw/Normalized/Feature 分层 + REST/WS 分工
为了可追溯与可迭代,存储建议分三层:Raw 保留原始消息或近似原始;Normalized 落成统一合同(symbol/ts/price/currency/session/source);Feature 保存业务指标并记录口径与版本。接口层则建议 REST 管确定性(快照、批量、补洞、对账),WebSocket 管及时性(实时监控、低延迟触发)。订阅要分层:核心标的实时订阅,长尾按需快照,系统拥塞时先降级长尾与频率。
八、跨市场对比怎么做才不虚:先定义可比窗口,再选指标
比较前先定义可比窗口:两边都在 Regular、都未停牌、币种口径一致(或带 FX 说明)。指标从可解释的开始:同窗收益的相对强弱、行业内分位、异常波动提示、以及同一 issuer 多地上市的价差监控。只要窗口与口径可追溯,结论就能复盘。
九、上线与验收:缓存、限流、降级与最小交付标准
跨市场成本主要来自订阅规模与历史回补,缓存与限流要先设计再实现。降级路径也要明确:订阅失败切快照,快照失败回退缓存,缓存过期返回“不可用并标状态”,避免静默错误。上线前建议用最小清单验收:symbol 可逆映射、ts/marketDate/交易状态正确、FX 快照可复算、公司行为策略明确、REST/WS 可对账、缺口可追溯、分层存储可追溯、降级策略可演练、关键指标可观测。
如果你要把它做成长期运行的服务,建议再加一条“灰度演练”:随机抽取少量标的先走新链路,观察对账差异与延迟分位,再逐步扩大范围。跨市场系统最怕一次性全量切换,因为错误往往不是爆炸式,而是缓慢漂移。
十、结语:把不确定性显式化,跨市场才会变得可控
跨市场能力的本质,是把时间、币种、交易状态、公司行为与数据质量这些不确定性从“隐含假设”变成“显式字段与流程”。当它们被显式化并可追溯,你就能稳定地把 US、CA、MX 放在同一套系统里解释与迭代,而不是靠经验猜测和事后补丁。



