调过策略参数的都懂: 几十个参数排列组合,网格搜索跑到天荒地老。有没有更聪明的办法?今天分享一个Python优化库,用遗传算法、粒子群这些仿生算法,让调参效率直接起飞。
这个库是干什么的
scikit-opt 把7种启发式优化算法打包成了工具箱,安装就能用:
核心算法:
- 遗传算法(GA) - 模拟生物进化,适合多因子权重配置
- 粒子群(PSO) - 像鸟群觅食一样搜索最优解,收敛快
- 模拟退火(SA) - 物理退火过程,擅长跳出局部最优
- 蚁群算法(ACA) - 蚂蚁找路径的智慧,用于订单执行优化
- 差分进化(DE) - 连续参数的精细调节
- 免疫算法(IA) - 处理带约束的多目标问题
- 人工鱼群(AFSA) - 适应动态变化的市场环境
这些算法的共同特点是全局搜索能力强,不像梯度下降那样容易卡在局部最优点出不来。
实战:给双均线策略调参
假设你的双均线策略有三个参数要调:短周期、长周期、止损位。传统方法是写三层循环暴力遍历,现在可以这样:
from sko.PSO import PSO
def strategy_sharpe(params):
short_ma, long_ma, stop_loss = params
# 这里跑你的回测
sharpe = backtest(short_ma, long_ma, stop_loss)
return -sharpe # 算法求最小值,所以加负号
# 用粒子群优化
pso = PSO(
func=strategy_sharpe,
n_dim=3, # 3个参数
pop=40, # 40个粒子并行搜索
max_iter=100, # 迭代100次
lb=[5, 20, 0.02], # 参数下限
ub=[20, 60, 0.10] # 参数上限
)
pso.run()
print(f'最优参数组合: {pso.gbest_x}')
实测下来,40个粒子跑100代,比网格搜索快十几倍,而且经常能找到网格搜索漏掉的更优解。
三个实用场景
场景1:多因子权重配置
你有动量、价值、质量、成长四个因子,想找最优配比,同时还要控制换手率:
from sko.GA import GA
def factor_ic(weights):
ic = calculate_ic(weights) # 计算IC
turnover = calc_turnover(weights) # 计算换手
return -(ic - turnover * 0.001) # IC最大化,换手惩罚
ga = GA(func=factor_ic, n_dim=4, size_pop=50, max_iter=200)
ga.run()
遗传算法会不断"进化"出更好的权重组合。
场景2:订单执行路径
大单要拆成小单分批执行,怎么安排时间片能让市场冲击成本最小?蚁群算法专治这个。
场景3:日内参数微调
早上开盘前用PSO做全局优化,盘中根据实时行情用模拟退火做局部微调,让策略适应市场变化。
性能实测
我们用一个经典的多峰测试函数(Rastrigin)跑了10维参数优化:
| 算法 |
耗时 |
找到的最优值 |
适合场景 |
| PSO粒子群 |
2.5秒 |
0.089 |
中低维度快速调参 |
| GA遗传算法 |
3.2秒 |
0.213 |
高维复杂约束问题 |
| SA模拟退火 |
4.1秒 |
0.156 |
局部精细搜索 |
结论:参数维度在20以下时,PSO收敛最快,日常策略调参首选。
什么时候用,什么时候不用
适合的场景:
- ✅ 盘前做策略参数优化(离线跑,不着急)
- ✅ 挖掘因子、配置权重
- ✅ 组合再平衡路径规划
不适合的场景:
- ❌ tick级别的实时决策(算法有延迟)
- ❌ 超高维问题(参数超过100个效率会下降)
推荐工作流:
收盘后用历史数据 → PSO全局优化100代 → 得到基准参数
↓
开盘后用实时数据 → SA局部微调20代 → 当天实际使用的参数
5分钟上手
安装很简单:
pip install scikit-opt
最简单的用法,5行代码搞定:
from sko.PSO import PSO
pso = PSO(func=你的目标函数, n_dim=参数个数, pop=30, max_iter=100,
lb=[下限列表], ub=[上限列表])
pso.run()
print(pso.gbest_x) # 打印最优解
写在最后
scikit-opt提供了一套开箱即用的优化工具,特别适合量化策略的参数调优。相比网格搜索,它能在更短时间内找到更好的解。
如果你在用alphaFind做策略开发,建议把这个库集成到离线优化模块里:盘前跑优化任务,盘中直接用预计算好的参数,既保证效果又不影响执行速度。
关注「alphaFind」,持续分享量化工具和实战经验
项目地址:
https://github.com/guofei9987/scikit-opt
官方文档:
https://scikit-opt.github.io/scikit-opt/
1024程序员节课程推荐
Java就业班 : https://yunpan.plus/t/412-1-1
Python大数据 : https://yunpan.plus/t/417-1-1
爬虫+JS逆向 : https://yunpan.plus/t/419-1-1
标签:#scikit-opt #Github #参数优化 #量化策略 #启发式算法