趋势策略回测别只看收益:TqBacktest 样本内外验证流程 前言很多策略研发的问题不是回测工具不够强而是回测流程太随意。TqBacktest最容易被误用在“不断调参数直到曲线好看”。我见过不少趋势策略样本内收益很亮眼换一段行情立刻失效原因是没有把样本内外拆开也没有给参数留约束边界。这篇以日内趋势突破策略为例讲一个可复现的回测流程先固定交易假设再做样本内筛选最后用样本外验证稳定性。代码部分给出最小框架重点在流程纪律。一、先固定回测假设再调策略回测前应固定四类参数手续费模型滑点模型交易时段过滤合约滚动方式如果这四项边界不固定后面的参数优化会变成“移动靶子”结论不可复现。建议把这些假设写进版本化配置文件每次回测报告都带配置快照。这样后续复盘时可以明确区分“策略逻辑变化”和“假设变化”带来的结果差异避免讨论陷入各说各话。二、最小回测骨架以突破策略为例fromtqsdkimportTqApi,TqBacktest,TqAuth,TargetPosTaskfromdatetimeimportdate apiTqApi(backtestTqBacktest(start_dtdate(2024,1,1),end_dtdate(2024,6,30)),authTqAuth(账户,密码))symbolSHFE.rb2410klapi.get_kline_serial(symbol,300,data_length300)taskTargetPosTask(api,symbol)N20whileTrue:api.wait_update()ifnotapi.is_changing(kl.iloc[-1],datetime):continueiflen(kl)N2:continuehhkl.high.iloc[-N-1:-1].max()llkl.low.iloc[-N-1:-1].min()ckl.close.iloc[-2]ifchh:task.set_target_volume(1)elifcll:task.set_target_volume(-1)策略并不复杂关键是后面的验证动作。回测代码越简单越便于定位问题。复杂策略也建议先用最小骨架验证流程再逐步加过滤和风控避免在同一阶段同时改逻辑和改验证框架导致结果不可解释。三、样本内外拆分建议阶段时间段目的样本内2024H1找可用参数区间样本外12024H2验证稳定性样本外22025Q1验证跨阶段鲁棒性建议不要只做一次样本外。期货行情切换快一次通过不足以说明参数稳定。更稳妥的方式是按市场状态分组做样本外例如震荡期、趋势期、高波动期分别检验。这样得到的结论更贴近实盘场景能提前发现策略在哪类行情下最容易失效。四、参数约束比最优参数更重要趋势策略建议用“参数带”而不是单点突破窗口 N18-25止损阈值1.8-2.5 ATR持仓上限按波动分层如果只有单点最优参数实盘通常更脆弱。参数带表现稳定才有工程价值。参数带还可以降低策略迁移成本。换品种、换周期、换手续费模型时只要落在合理区间内策略通常仍能维持可接受表现不必每次都从零开始“重新找最优”。五、回测报告最少应包含这些指标年化收益与最大回撤胜率、盈亏比、交易次数分时段表现白盘/夜盘换月周表现尤其是换月周表现能提前暴露很多实盘执行问题。建议把换月周单独输出成交偏差和滑点分布因为这段时间执行特征往往与平时不同。提前看到这些变化能帮助你在实盘前调整阈值、仓位和交易时段限制。总结TqBacktest真正的价值不只是跑出一条收益曲线而是让策略开发形成可复现、可审计、可迭代的流程。对趋势策略来说样本内外拆分和参数约束是两条硬线。先把回测流程做稳再谈复杂信号后续迁移到模拟和实盘会顺得多。把回测当成流程工具而不是结果展示工具策略研发会更健康。只要每次改动都能回答“为什么改、改了什么、影响在哪”团队就能持续积累可复用经验减少依赖个人直觉的试错成本。FAQ1样本内收益很高就能实盘吗不能。必须经过至少一轮样本外验证并观察稳定性。2回测滑点怎么设更合理先用保守值再做敏感性分析看策略对滑点变化的耐受度。3是否要每次都全历史回测不必。可分阶段回测但关键版本要保留完整可复现实验。4回测交易次数太少怎么办先检查策略触发逻辑和时段过滤再考虑参数是否过紧。5样本外表现一般要不要放弃先看是结构性失效还是成本参数问题再决定是否终止。风险提示本文用于期货量化技术实践讨论不构成任何投资建议。回测结果受成交假设和参数设定影响较大历史表现不代表未来收益实盘前请进行多阶段验证与风险评估。