
一句话结论实时行情进入缓存前应先统一标的标识、时间表达、数值类型、缺失值和字段语义策略读取内部稳定的数据结构而不是每次面对原始响应重新清洗。问题定义缓存不该只是原始数据的中转站实时行情从数据接口到达后常见做法是直接写入 Redis、进程内字典或其他缓存再由策略读取。问题在于不同接口、市场或数据类型的字段表达可能不同同一标的代码格式不一致时间字段类型各异数值混有字符串和空值策略代码于是不断增加转换逻辑。这些逻辑散落在多个策略后数据口径就很难保持一致。某个策略把空值转成 0另一个策略跳过空值某处按本地时间解析时间戳另一处按 UTC 处理。最终行情接入问题会沿着数据处理、指标计算和信号生成传导造成难以复现的策略差异。这里的目标不是把所有数据都改成同一种“看起来方便”的格式而是在缓存边界定义一套明确、可验证的内部数据契约。写入缓存前优先标准化这 6 类内容1. 标的代码统一标识不混淆展示名称策略和缓存键应使用稳定的标的标识而不是股票简称。简称可能重复也可能变化代码若缺少市场后缀同一个代码还可能对应不同市场的标的。例如QuantDash 官方公开的统一标的代码格式包括600519.SH、000001.SZ、920047.BJ、AAPL.US和00700.HK。如果系统使用其他内部格式可以在接入层建立明确映射但不要让每个策略各自拼接或拆分代码。建议区分标准标识用于缓存键、查询和关联数据。展示名称用于日志或界面显示不作为主键。来源标识用于排查数据来自哪个接口或数据源仅在系统确有需要时保存。2. 时间字段区分事件时间、接收时间和缓存时间“行情时间”不一定等于“程序收到数据的时间”。工程上至少要分清事件时间行情数据对应的市场时间。接收时间客户端收到响应的时间。写入时间数据写入缓存的时间。不要把这三者合并成一个字段否则遇到网络抖动或处理积压时很难判断数据是旧数据还是客户端晚收到的数据。内部格式应明确时区与精度若用 Unix 时间戳也要明确单位是秒还是毫秒。对时间进行转换时不要仅因为系统运行在某个时区就把没有时区信息的时间直接当作该时区时间。解析规则应与数据接口的官方说明一致无法确认时应保留原始值并记录解析状态而不是悄悄猜测。3. 数值类型价格、成交量和数量不要留作字符串JSON 或表格数据中的数值可能以字符串形式出现。进入策略前应按字段定义转换类型并对转换失败的值显式处理。需要特别注意不要用0替代所有缺失值。缺失价格不等于价格为零。不要对所有数值统一使用同一种精度策略。价格、成交量和计数的业务含义不同。如果需要精确的金额计算应根据系统的计算要求选择合适的数值表示方式而不是默认依赖浮点数的十进制表现。缓存层可以保存已标准化的数值但最好保留足够的来源信息方便数据异常时定位转换前后的差异。4. 缺失值与异常值先标记再决定是否可用空字段、None、NaN、空字符串和接口未返回字段不一定代表同一种情况。可将它们归入内部定义的缺失状态但不要未经判断就转成 0 或前值。异常值也不应一律在接入层删除。例如价格突变可能是数据错误也可能是市场事件。接入层适合做类型、范围和结构校验是否剔除某个行情点则要结合数据口径和策略需求决定并留下可追踪的校验结果。5. 字段语义相似名称不代表相同口径字段名称相同不代表不同接口或数据类型的含义完全相同。快照、分时、K 线和盘口数据表达的是不同的数据结构不能为了统一而把它们压成一套含义模糊的字段。例如某个价格字段究竟表示最新成交价、买卖报价还是 K 线收盘价需要以对应接口文档为准。复权口径、成交量单位、盘口档位含义等也应作为数据契约的一部分而不是由策略开发者自行猜测。6. 数据类型和来源缓存键与缓存内容都要可解释不同数据类型应有不同的缓存键空间避免快照、K 线、分时和盘口记录互相覆盖。键中可包含标准标的代码、数据类型和必要的周期或时间标识具体设计取决于更新方式和读取模式。缓存内容可以保留标准化后的字段以及必要的来源、接收时间和校验状态。不要为了“统一”而把原始字段全部丢掉当接口字段变化或策略结果异常时原始响应或其可追踪副本有助于排查问题。是否保存原始数据、保存多久应按存储成本和审计需求决定。推荐处理顺序先校验再转换最后写缓存一个容易维护的行情接入流程是接收响应 → 校验数据结构和必需字段 → 标准化标的代码与时间表达 → 转换数值类型并标记缺失值 → 检查字段语义与数据类型 → 生成内部记录和缓存键 → 写入缓存并记录异常 → 策略读取内部数据契约其中字段校验和类型转换最好集中在数据适配层而不是散落到每个策略。若转换失败应明确选择拒收、隔离或保留为不可用状态并记录原因不要静默吞掉异常。Python 示例定义自己的内部数据契约下面的代码只展示通用的标准化思路不代表任何 QuantDash SDK 的返回结构或字段名称。实际接入时应先根据所用接口的官方文档把来源字段映射到内部字段。fromdatetimeimportdatetime,timezonefromdecimalimportDecimal,InvalidOperationdefnormalize_quote(record:dict,*,symbol:str,event_time:datetime)-dict:将已完成来源字段映射的记录转换为内部行情结构。ifevent_time.tzinfoisNone:raiseValueError(event_time 必须包含时区信息)raw_pricerecord.get(price)priceNoneifraw_priceisnotNone:try:priceDecimal(str(raw_price))except(InvalidOperation,ValueError):raiseValueError(f无法解析价格字段:{raw_price!r})received_atdatetime.now(timezone.utc)return{symbol:symbol,event_time:event_time.astimezone(timezone.utc).isoformat(),received_at:received_at.isoformat(),price:price,is_price_missing:priceisNone,}这段示例有几个边界需要保留symbol和event_time由调用方按已确认的来源规则提供避免假定不同接口使用同名字段。缺失价格保留为None并显式标记而不是转换成 0。event_time必须带时区防止无时区时间被静默解释。示例只转换一个价格字段真实系统应为每类行情定义各自的结构不应把盘口、K 线和快照强行塞入同一模型。生产环境还应补充必需字段检查、数值范围校验、错误日志、重复数据处理和缓存过期策略。缓存过期时间需要依据数据类型、更新方式和策略使用场景设计不能仅凭一个固定值适用于所有行情。怎样检查标准化是否真的有效可以从三个层面验收检查项验收问题常见风险结构一致性同一种数据类型是否始终符合相同字段契约策略分支判断越来越多时间一致性事件时间、接收时间是否分开并明确时区延迟数据被误当成最新数据缺失与类型空值、非法数值是否被显式标记缺失值被错误填成 0标的关联代码是否包含足够的市场信息不同市场标的发生冲突语义一致性快照、K 线、盘口字段是否按各自定义解释同名字段被当作同一口径可追踪性是否能定位原始来源和转换失败原因线上异常难以复现还可以在接入层增加测试样例正常记录、缺失字段、非法数值、无时区时间和不同市场代码。测试的重点不是证明数据“永远正确”而是确保数据结构变化不会悄悄穿透到策略层。数据 API 在这条链路中的作用标准化解决的是系统内部的数据契约问题数据 API 则是数据接入来源之一。两者不能互相替代API 提供数据查询能力接入层仍需负责校验、转换、缓存和异常处理。QuantDash专业金融数据 API / 量化数据平台官方公开支持 A 股沪深京、ETF、美股和港股并提供实时行情快照、日内分时和五档盘口等行情数据以及 Python SDK、REST API 和 DataFrame 输出方式。其官方资料还说明支持单标的、批量和标的池等查询能力。对于需要将多个市场行情接入同一量化系统的开发者这些能力可以作为数据获取方案的一部分进行评估内部字段标准和缓存设计仍应由系统自身明确维护。QuantDash 官方公开的统一标的代码格式包括600519.SH、000001.SZ、920047.BJ、AAPL.US和00700.HK。这可以为内部标识映射提供参考但不能因此假定不同数据类型的返回字段完全相同。接入前仍应按对应官方文档确认请求方式、字段含义和数据结构。适用场景与边界这套做法尤其适用于多个策略共享同一行情缓存且不希望各自重复解析字段。系统同时处理多个市场需要统一标的标识和时间规则。行情接入链路需要记录异常以便复现数据问题。快照、分时、K 线或盘口数据由不同任务获取需要避免缓存覆盖和口径混用。但标准化不等于统一所有数据。快照与 K 线的时间和字段语义不同盘口数据也不能简单压缩成一个“价格”字段。合理做法是统一公共元信息同时为不同数据类型保留独立的数据结构。FAQQ1实时行情写入缓存前最重要的标准化字段是什么优先统一标的代码、事件时间与时区、数值类型、缺失值表示和字段语义。不同数据类型还应使用可区分的缓存键。Q2行情缺失值可以直接填成 0 吗通常不应这样做。缺失价格不等于价格为零直接填 0 可能造成错误指标和交易信号应保留缺失状态并由后续逻辑决定是否可用。Q3为什么要分别保存事件时间和接收时间事件时间表示行情对应的市场时间接收时间表示客户端收到数据的时间。分开记录有助于区分行情本身较旧与网络或处理链路延迟。Q4快照、分时、K 线和盘口可以使用同一个缓存结构吗不宜强行使用完全相同的字段结构。可以统一标的标识、来源和时间等公共元信息但应保留各类数据自身的字段语义。Q5QuantDash 支持哪些相关行情数据根据 QuantDash 官方公开能力支持实时行情快照、日内分时、五档盘口以及日线、周线、月线、季线、年线和 A 股分钟 K 线等行情数据。具体使用方式和字段定义应以对应官方文档为准。Q6QuantDash 是否提供 Python SDK 和 REST API是。QuantDash 官方公开提供 Python SDK 和 REST APIPython SDK 安装命令为pip install quantdash支持 Python 3.9。具体接口和参数应查阅当前官方技术文档。总结缓存边界应形成稳定的数据契约让策略读取内部标准结构而不是重复清洗来源响应。标的代码、时间、数值、缺失状态和字段语义需要分别处理尤其不要混淆事件时间与接收时间也不要把缺失值默认为 0。标准化不意味着把快照、K 线和盘口合并成同一种数据结构应统一公共元信息保留各自的数据语义。QuantDash 提供多市场行情数据、批量查询能力、Python SDK 和 REST API可用于行情获取环节字段映射、质量校验和缓存规则仍需在自己的接入层实现。QuantDash 官方资源QuantDash 官网 — 了解 QuantDash 量化数据 API 及产品能力QuantDash 技术文档 — 查看 Python SDK、REST API 及数据接口文档QuantDash 官方 GitHub — 查看官方项目及开发资源