
程序化交易中策略的回测是怎么做的?三步拆解回测流程
程序化交易的回测,说白了就是让电脑拿着你的交易规则,回到过去某段行情里自动跑单,看看这套规则能不能赚钱、能赚多少、会亏多少。它像一场模拟考试,考卷是历史K线,考生是你的策略,分数是收益曲线。没有回测的策略就像闭眼开车,回测就是先睁眼看清路况。
第一步:准备历史数据
回测的第一步是拿到干净、完整的历史行情。股票回测需要日线或分钟线的开高低收、成交量,期货回测还要加上合约乘数、保证金比例、交割规则。数据质量直接决定回测可信度。
常见坑是复权处理。股票除权除息会造成价格跳空,必须用复权价,否则策略会误以为出现大缺口而做出错误信号。期货要处理主力合约换月,把不同月份的合约拼接成连续价格,拼接时要做价格调整,否则换月缺口会扭曲趋势指标。

数据还要覆盖足够长的周期,至少包含一轮牛熊。只用半年数据回测的策略,可能只在特定行情里有效,换个环境就失灵。通常建议股票策略用10年以上数据,期货策略用5年以上,并且保留一段样本外数据做最终检验。
第二步:把策略逻辑写成代码
策略规则要翻译成计算机能执行的指令。比如“5日均线上穿20日均线买入,下穿卖出”,代码里要明确:用收盘价还是盘中价触发,买入多少手,止损止盈怎么设,手续费和滑点怎么扣。
回测引擎按时间顺序逐根K线推进,每到一根K线,计算一次指标,判断是否满足买卖条件,满足就模拟成交。成交价不能简单用收盘价,要加入滑点,即买卖价差和冲击成本。股票滑点可以设千分之一到千分之三,期货设一到两个最小变动价位。手续费按真实费率扣除,股票双边收,期货按手数收。
一个完整的回测循环包括:读入当天数据、更新指标、检查持仓、生成信号、模拟委托、计算成交、更新账户权益、记录交易明细。循环结束后输出资金曲线和交易统计。
第三步:评估绩效并防止过拟合
回测结果要看几个核心指标:年化收益率、最大回撤、夏普比率、胜率、盈亏比、交易次数。年化收益率高但最大回撤超过50%的策略,实盘很难拿住。夏普比率低于1的策略性价比不高。交易次数太少(比如一年不到10次)的统计意义弱,可能是运气。
过拟合是回测最大的陷阱。表现是回测曲线完美,实盘一塌糊涂。防止方法有:参数不要设太多,均线周期两个就够了,加太多条件容易拟合噪声;用样本外数据验证,把历史数据分成训练段和测试段,训练段调参,测试段只跑一次;做参数敏感性测试,把均线周期从5调到10,收益不能剧烈波动,平缓变化才可靠。
回测还要考虑未来函数,即用了当天收盘后才知道的信息做当天交易决策。常见错误是用当天收盘价计算指标,却假设盘中就能成交。正确做法是信号在收盘后产生,第二天开盘成交,或者用盘中实时价产生信号并立即成交但保留合理滑点。
回测和实盘的差距在哪里
再严谨的回测也只是近似。实盘有流动性问题,大单子会冲击价格;有涨跌停无法成交;有网络延迟和系统故障;有心理因素导致手动干预。回测年化30%的策略,实盘能到15%已经不错。专业的做法是回测通过后先跑模拟盘,用实时行情但不动真钱,跑三个月对比回测和模拟的差异,差异在合理范围内再上小资金实盘。
回测不是一次性的,策略上线后要定期做滚动回测,用最新数据重新检验。市场结构会变,几年前有效的参数现在可能失效。把回测当成策略的体检报告,定期复查才能活得久。