TqSdk 主连能直接下单吗?研究代码与实际合约别混用
2026/9/7 2:17:51 网站建设 项目流程

主连合约适合把同一品种不同月份的活跃行情连接起来做连续研究,但它不是一个可以直接成交的具体月份合约。TqSdk 中常见的KQ.m@SHFE.rb表示螺纹钢主连,Quote 的underlying_symbol可以告诉程序当前映射到哪个实际合约。研究信号与交易执行必须分开:主连生成方向,具体合约承担订单和持仓。

主连解决的是连续观察问题

期货具体月份合约会到期,市场活跃度也会转移。若长期研究只固定读取一个月份,数据在到期后就中断;主连提供连续入口,便于观察品种走势和构建跨期历史逻辑。

import os from tqsdk import TqApi, TqAuth api = TqApi( auth=TqAuth(os.environ["TQ_USER"], os.environ["TQ_PASSWORD"]) ) main_quote = api.get_quote("KQ.m@SHFE.rb") try: while True: api.wait_update() if api.is_changing(main_quote, "underlying_symbol"): print("当前映射合约:", main_quote.underlying_symbol) finally: api.close()

underlying_symbol变化意味着主力映射发生了切换。程序需要记录旧值、新值和切换时间;只在启动时读取一次,运行数周后可能继续使用已经过期的执行合约。

主连价格序列是研究工具,不应被理解为某个账户真实可成交的完整价格路径。换月点附近,连续序列的价格关系与实际移仓成本不是同一个问题。

主连选择反映的是特定映射规则,并不等于所有策略都应持有该月份。策略可能因到期距离、流动性、交割限制或自身持仓周期选择别的合约。映射可以成为候选输入,最终执行选择仍要经过业务规则。

程序首次启动时也应等待underlying_symbol有效,再建立执行层状态。若字段尚为空就缓存映射,后续可能把空字符串当成合约代码。映射变化时先进入“待确认”状态,比立即切换交易对象更稳妥。

研究信号与执行合约怎样分层

行情层可以订阅主连 K 线,按连续数据计算指标。执行层只接受一个明确的实际合约代码、目标方向和时间戳,再核对该合约行情、持仓与活动委托。

main_klines = api.get_kline_serial( "KQ.m@SHFE.rb", 60, data_length=100 ) while True: api.wait_update() if api.is_changing(main_klines.iloc[-1], "datetime"): signal = calculate_signal(main_klines.iloc[:-1]) actual_symbol = main_quote.underlying_symbol if actual_symbol: route_signal(signal, actual_symbol)

两个函数是结构占位,不能直接用于交易。route_signal至少要验证实际合约是否可交易、行情是否有效、映射是否刚切换、账户是否已有旧月份持仓。它不能只把字符串替换后立即下单。

信号还要绑定生成时的映射。若信号计算后排队很久才执行,主连可能已经切换。执行前重新校验映射,并决定旧信号是否仍有效,避免把上一合约背景下的意图发送到新合约。

换月不是修改一个字符串

账户可能仍持有旧月份合约,而新的主连已经指向下一月份。此时直接把目标任务改到新合约,会在新合约开仓,却没有自动处理旧仓,最终同时持有两个合约。

完整换月需要明确何时停止旧合约新增动作、怎样撤销旧活动委托、是否平旧仓、何时开新仓,以及两边成交不同步时如何限制风险。这些规则属于执行设计,主连映射本身不会替你完成。

价差也不可忽略。旧月与新月价格可能不同,把连续指标值直接当成新合约委托价格没有意义。执行价格应来自实际合约 Quote,并遵守其价格最小变动、涨跌停和流动性状态。

换月规则最好先在模拟环境中用明确日期和持仓场景测试。至少覆盖无持仓切换、有旧仓切换、旧委托未完成和程序重启四种情况。只测试“查询到了新代码”远远不够。

还要决定换月期间信号如何处理。可以暂停新信号直到旧仓与委托处理完成,也可以分别维护旧、新合约目标,但两种方案都要写清优先级。若切换过程中仍按主连每次更新产生动作,旧任务和新任务可能同时争夺仓位。

一次换月应生成完整记录:检测到变化的时间、旧映射、新映射、当时持仓、活动委托、执行计划和最终结果。没有这些信息,事后看到两个合约同时有成交时,很难判断是计划内移仓还是重复下单。

主连、指数与具体合约要分别标记

代码和日志应给合约角色命名,例如research_symbolexecution_symbol,不要都叫symbol。每条信号记录主连代码、实际映射和生成时间;每条订单只记录真实执行合约。

存储历史时也要保留来源。只保存价格而不保存它来自主连还是具体月份,回看时无法解释换月跳变与成交差异。研究数据和交易回报应当能够通过时间与映射记录关联,但不能混成同一列价格。

主连适合趋势研究,指数合约也常用于观察品种整体表现,但它们的构造含义不同。无论使用哪一种非具体合约,都不要因为能取得 Quote 就推断能够下单。

哪些结果最容易被误读

第一种是主连回测收益。它可能没有完整包含实际换月动作、价差和费用,不能直接等同于账户可实现结果。第二种是映射变化前后的指标连续性。指标数学上连续,不代表执行持仓也能无成本连续。

第三种是当前主力永远流动性最好。映射规则给出当前结果,但具体执行仍应检查实际盘口、交易状态和策略需求。第四种是切换日所有策略都应同一时刻换月。不同持仓周期与风险规则可能需要不同安排。

第五种是没有持仓就没有换月风险。即使账户空仓,挂在旧合约上的活动委托也可能成交。切换前必须检查订单,而不只检查净仓。

第六种是历史主连映射与当时实时选择完全一致。复盘时应确认数据源和映射规则,不从今天看到的主力合约反推过去执行对象。交易日志中的实际合约才是账户事实。

第七种是新合约更活跃就一定能无损迁移。旧仓平仓与新仓开仓发生在两个市场对象上,成交时间与价格都可能不同。风险评估要把这段暂时敞口或双重持仓纳入,而不是用连续图表抹平。

主连使用清单

  • 主连只承担连续研究和信号输入,不作为下单合约。
  • 通过underlying_symbol跟踪实际映射,并记录每次变化。
  • 信号绑定生成时间和当时映射,执行前再次校验实际合约。
  • 换月同时处理旧持仓、活动委托、价差与新合约流动性。
  • 日志区分研究代码与执行代码,回测结论包含换月假设边界。

主连让长期研究更方便,但也容易把“连续图表”误认为“连续持仓”。只要把研究与执行拆开,并把映射变化当成一个需要处理的业务事件,就能保留主连的便利,又不把它带进错误订单。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询