前言国内期货量化程序里每一个订阅、每一笔报单都要写「合约代码」字符串天勤 TqSdk 里叫symbol。例如螺纹钢 2025 年 10 月合约写作SHFE.rb2510上期所 SHFE 品种 rb 月份 2510。程序用api.get_quote(symbol)订行情、用get_kline_serial(symbol, 300)订 5 分钟 K 线算均线信号、用TargetPosTask(api, symbol)在该合约上调仓。代码写错时Python 往往不报错——get_quote仍能返回对象但可能是另一张合约、或长期无成交的冷门月份均线信号在白算下单则挂在错误的盘上。常见错误大小写写反、漏交易所前缀、郑商所月份位数搞错。下面说明天勤标准格式、启动时怎么校验、如何用query_quotes减少手写月份失误。一、标准 symbol 格式交易所exchange_id示例上期所SHFESHFE.cu2510大商所DCEDCE.i2509郑商所CZCECZCE.TA509中金所CFFEXCFFEX.IF2509能源中心INEINE.sc2510主连示例KQ.mSHFE.rb以官方文档为准。组合DCE.SP m2509m2511等。大小写品种代码通常小写rb、cu与query_quotes返回一致。二、常见错误模式只有rb2510没有交易所前缀。郑商所年份位数错SR2509vsSR509。把模拟盘月份抄成已交割旧月。信号用主连KQ.m下单忘记映射到具体月份。复制粘贴带空格或全角字符。三、启动时校验清单defvalidate_symbol(api,symbol):qapi.get_quote(symbol)for_inrange(10):api.wait_update()ifq.datetimeq.datetime:breakifq.ins_class!FUTURE:# 或你期望的类型raiseValueError(funexpected ins_class{q.ins_class}for{symbol})ifq.volume0andq.open_interest0:log.warning(zero volume and oi, check symbol %s,symbol)returnq对比quote.instrument_id、quote.exchange_id与配置是否一致。下单前打印symbol、last_price、expire_rest_days到日志首日人工扫一眼。四、与 get_position 的一致性get_position(SHFE.rb2510)的 key 必须与TargetPosTask创建时 symbol 完全一致否则读到空持仓。多策略配置文件建议集中SYMBOL常量禁止在代码里散落字符串。五、query_quotes 辅助纠错若只记得品种可先api.query_quotes(ins_classFUTURE,product_idrb,expiredFalse)从返回列表里选持仓量最大月份作为主力减少手写月份错误。六、配置中心化# config.pySYMBOLS{rb_trade:SHFE.rb2510,rb_signal:KQ.mSHFE.rb,}全项目只 import 这一处禁止在五个文件里各写一遍字符串。七、下单前双人复核字段首日实盘或换月日日志打印instrument_id、exchange_id、expire_rest_days、last_price人工扫一眼再放开自动交易开关。八、郑商所三位年份坑CZCE.SR509表示 2025 年 9 月不是SR2509。从别的交易所习惯拷贝代码时最容易错。九、事故复盘字段一旦出现盈亏异常第一时间日志应能回答当时symbol字符串、instrument_id、exchange_id、last_price与预期品种是否一致。很多「策略突然不行」其实是换月后配置文件没改一行字。总结合约代码写错不会总在启动时报错但会在成交、持仓、盈亏上悄悄偏离。天勤要求交易所.合约统一格式郑商所月份位数、主连与具体月分工尤其容易踩坑。启动时用get_quote校验ins_class、成交量持仓量用query_quotes生成候选列表并把 symbol 收敛到配置常量能避免绝大多数 silent wrong symbol 事故。代码正确性优先于参数优化这是期货程序化里成本最低的保险。FAQ1行情有但下单拒单查是否交易非可下单合约类型指数、连续仅行情。2TqAccount 与 symbol 交易所要一致吗账户需有该交易所交易权限。3组合合约 symbol 怎么写见官方组合代码说明与单腿不同。4能否从主力自动解析可用quote.underlying_symbol或主连服务但要显式映射到下单月。本文基于天勤 TqSdk 公开 API 整理不构成投资建议。