精华帖子

小市值WFA动态回测寻优策略

由bqtnziby创建,最终由bqtnziby 被浏览 5 用户

量化策略投资中,“参数拟合”是策略失效最大的陷阱。在回测阶段很惊艳,一到实盘就水土不服;或者把回测时间一改,绩效结果就惨不忍睹。所以如何降低“过拟合风险”尤为重要。

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


\

标签

量化投资过拟合
{link}