小市值WFA动态回测寻优策略
由bqtnziby创建,最终由bqtnziby 被浏览 21 用户
量化策略投资中,“参数拟合”是策略失效最大的陷阱。在回测阶段很惊艳,一到实盘就水土不服;或者把回测时间一改,绩效结果就惨不忍睹。所以如何降低“过拟合风险”尤为重要。
1.什么是WFA
WFA(Walk-Forward Analysis)即滚动前向分析,是一种动态回测方法,它模拟“真实投资决策流程”,通过“滚动训练+样本外测试”的循环,让策略参数不断适配市场变化,避免单一回测的“未来函数”和过拟合问题。
1.1 WFA的逻辑:拒绝上帝视角
传统静态回测会用全量历史数据优化参数(比如直接用2016-2024年数据找最优持股数和最优调仓时间),本质是“用未来数据指导过去决策”,存在严重的过拟合风险。而WFA的核心是:
(1)分段迭代:把整个时间周期拆分成多个“训练期+测试期”的滚动窗口,每个窗口独立决策。
(2)样本外验证:用“过去的训练期”优化参数,再用“未来的测试期”验证效果,完全模拟实盘时“只能用历史数据做决策”的场景。
(3)动态适配:每个滚动窗口的最优参数可能不同,策略能随市场结构变化调整,更贴近真实投资。
1.2 WFA实现步骤
总时间范围是2016-01-01到2024-12-31,训练期6个月、测试期3个月,具体步骤如下:
- step1:划分滚动窗口:第1个窗口(训练2016.1-2016.6,测试2016.7-2016.9)、第2个窗口(训练2016.10-2017.3,测试2017.4-2017.6……)直到覆盖全周期。
- step2:训练期参数优化:在每个训练期内,遍历备选参数(如持股数2-7只),通过回测找到“让训练期收益最高”的最优参数。
- step3:测试期效果验证:用训练期找到的最优参数,在对应的测试期做回测,记录真实收益(样本外收益)。
- step4:汇总与定参:统计所有测试期的参数表现,选出现频次最高的参数作为“最终策略参数”,用于全周期回测。
2.策略核心:选股逻辑
策略选股逻辑即为 小市值筛选优选+WFA优化
2.1核心因子:流通市值
为什么选择小市值?
(1)成长潜力高:小市值公司多处于业务扩张期,规模基数小,业绩增长弹性显著大于成熟大公司,容易实现快速成长带来的股价上涨
(2)估值修复:市场对小市值标的关注度相对较低,可能存在估值低估,一旦业绩改善或逻辑被验证,估值易向合理区间修复
(3)并购重组预期:小市值公司市值体量小,被并购整合的概率更高,重组事件往往能带来股价阶段性爆发
2.2选股交易流程
- STEP1:【基础筛选】非ST、非停牌,覆盖沪深北交所主板/创业/科创板,上市满365天(list_days > 365),市盈率TTM > 0(排除亏损股,确保基本面无重大问题)
- STEP2:【核心因子排序】按流通市值(float_market_cap)从小到大排序,聚焦小市值标的,捕捉成长弹性
交易规则
- 调仓频率:根据WFA优化结果决定调仓频率
- 持股数量:根据WFA优化结果决定
- 仓位分配:等权重分配
- 成本设置:买入佣金0.03%、卖出佣金0.13%(含印花税),最低5元/笔
2.3 WFA优化过程(双参数寻优)
我们对两个参数进行寻优:持股数量和调仓周期(其它参数同样可以按照这种方法寻优),在这个策略中,我们只为每个参数设置了5个遍历选项,分别为:
持股数量:3,4,5,7,10
调仓周期:3,5,7,10,15
(1)生成滚动窗口:把 2016-2024 年拆成多个 “6 个月训练 + 3 个月测试” 的窗口,规则前面介绍过了。
(2)遍历窗口,搜索最优参数:对每个拆分后的窗口,循环遍历所有 25 种参数组合(5 个持股数 ×5 个调仓天数)
a.对每组参数(比如持股 5 只、调仓 7 天),跑 “当前窗口训练期” 的回测;
b.以 “训练期最终净值(total_value)最高” 为标准,选出该窗口的 “最优参数”(比如这组参数训练净值最高,就选它);
c.若某组参数回测失败(比如数据缺失),直接跳过,用默认参数兜底。
(3)记录并统计最优参数
(4)用最终参数跑全周期回测:用 WFA 选出的最终参数,跑 2016-2024 年全周期回测,验证参数在完整周期内的表现 —— 这一步是 “闭环验证”,确保参数不是偶然有效。
3.回测结果分析
回测时间为2016-01-01到2024-12-31
下面是WFA的代码实现:
https://bigquant.com/codesharev3/5c0d27b4-d10d-475a-b002-1f7e38164486
\