ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TqSdk 主连能直接下单吗?研究代码与实际合约别混用

TqSdk 主连能直接下单吗?研究代码与实际合约别混用 主连合约适合把同一品种不同月份的活跃行情连接起来做连续研究但它不是一个可以直接成交的具体月份合约。TqSdk 中常见的KQ.mSHFE.rb表示螺纹钢主连Quote 的underlying_symbol可以告诉程序当前映射到哪个实际合约。研究信号与交易执行必须分开主连生成方向具体合约承担订单和持仓。主连解决的是连续观察问题期货具体月份合约会到期市场活跃度也会转移。若长期研究只固定读取一个月份数据在到期后就中断主连提供连续入口便于观察品种走势和构建跨期历史逻辑。import os from tqsdk import TqApi, TqAuth api TqApi( authTqAuth(os.environ[TQ_USER], os.environ[TQ_PASSWORD]) ) main_quote api.get_quote(KQ.mSHFE.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.mSHFE.rb, 60, data_length100 ) 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_symbol与execution_symbol不要都叫symbol。每条信号记录主连代码、实际映射和生成时间每条订单只记录真实执行合约。存储历史时也要保留来源。只保存价格而不保存它来自主连还是具体月份回看时无法解释换月跳变与成交差异。研究数据和交易回报应当能够通过时间与映射记录关联但不能混成同一列价格。主连适合趋势研究指数合约也常用于观察品种整体表现但它们的构造含义不同。无论使用哪一种非具体合约都不要因为能取得 Quote 就推断能够下单。哪些结果最容易被误读第一种是主连回测收益。它可能没有完整包含实际换月动作、价差和费用不能直接等同于账户可实现结果。第二种是映射变化前后的指标连续性。指标数学上连续不代表执行持仓也能无成本连续。第三种是当前主力永远流动性最好。映射规则给出当前结果但具体执行仍应检查实际盘口、交易状态和策略需求。第四种是切换日所有策略都应同一时刻换月。不同持仓周期与风险规则可能需要不同安排。第五种是没有持仓就没有换月风险。即使账户空仓挂在旧合约上的活动委托也可能成交。切换前必须检查订单而不只检查净仓。第六种是历史主连映射与当时实时选择完全一致。复盘时应确认数据源和映射规则不从今天看到的主力合约反推过去执行对象。交易日志中的实际合约才是账户事实。第七种是新合约更活跃就一定能无损迁移。旧仓平仓与新仓开仓发生在两个市场对象上成交时间与价格都可能不同。风险评估要把这段暂时敞口或双重持仓纳入而不是用连续图表抹平。主连使用清单主连只承担连续研究和信号输入不作为下单合约。通过underlying_symbol跟踪实际映射并记录每次变化。信号绑定生成时间和当时映射执行前再次校验实际合约。换月同时处理旧持仓、活动委托、价差与新合约流动性。日志区分研究代码与执行代码回测结论包含换月假设边界。主连让长期研究更方便但也容易把“连续图表”误认为“连续持仓”。只要把研究与执行拆开并把映射变化当成一个需要处理的业务事件就能保留主连的便利又不把它带进错误订单。
返回列表