当前位置:首页>python>别再迷信金叉死叉了:用 Python 重新验证 5/10 双均线策略

别再迷信金叉死叉了:用 Python 重新验证 5/10 双均线策略

  • 2026-10-11 07:53:41
别再迷信金叉死叉了:用 Python 重新验证 5/10 双均线策略
很多散户第一次学技术分析,都会接触均线。
最常见的一种用法,就是看 5 日均线和 10 日均线:5 日均线上穿 10 日均线,认为短期走势转强;5 日均线跌破 10 日均线,认为短期趋势转弱。
这套规则简单、透明、容易执行,但真正放到市场里,很快就会遇到问题。
行情一旦进入震荡区间,5 日线和 10 日线会频繁金叉、死叉,刚买进去价格又跌回来,刚卖出去价格又涨上去。几轮下来,利润没有多少,手续费、滑点和心态成本倒是先交了一遍。
所以这次我不只讨论“5/10 双均线有没有用”,而是把它放到一个更完整的验证框架里,比较四组策略:5/10 双均线、5/10 双均线 + 强化学习、参数搜索双均线、滚动验证双均线。
这样既能看传统规则本身的效果,也能看 AI 过滤、参数优化和滚动验证是否真的带来改善。
一、这次比较哪四组策略?
策略名称核心逻辑主要作用适合观察的问题
5/10 双均线5 日均线上穿 10 日均线持仓,否则空仓基础均线策略固定短周期规则是否有效
5/10 双均线 + 强化学习双均线先给信号,再由模型判断是否放行信号过滤AI 是否能减少低质量交易
参数搜索双均线在训练集搜索更优快慢均线组合,再到测试集验证参数优化5/10 是否过于死板
滚动验证双均线每个窗口重新选参数,再用后续窗口测试稳定性检验策略是否只拟合某段行情
这里要说明一点:强化学习不是替代双均线,也不是让 AI 自己乱买乱卖。
它更像一个“信号审核员”。
当 5/10 双均线发出看多信号后,模型再结合市场状态判断:这次信号更像趋势启动,还是更像震荡假突破。
二、基础策略:5/10 双均线

5/10 双均线的核心代码很简单:

def ma_cross_signal(close, fast=5, slow=10):        fast_ma = close.rolling(fast).mean()        slow_ma = close.rolling(slow).mean()        return (fast_ma > slow_ma).astype(float).fillna(0.0)
这里的 1 代表持仓,0 代表空仓。为了避免未来函数,回测不会用今天收盘后产生的信号,假设今天已经成交,而是统一延后一根 K 线执行。
也就是说,今天收盘后看到信号,下一根 K 线才允许交易。
这个细节很关键。
很多看起来很漂亮的回测,问题就出在这里:它们默认你能在信号出现的同一根 K 线上成交,相当于提前知道了未来结果。这样的曲线再好看,也没有实盘意义。
三、强化学习到底看什么?

强化学习版本不是凭空预测涨跌,而是把常见市场状态转化成特征。它会观察均线距离、均线斜率、价格相对均线的位置、近期波动率、短期涨跌幅和成交量变化。

features["ma_diff"] = (fast_ma - slow_ma) / slow_mafeatures["fast_slope"] = fast_ma.diff(3) / closefeatures["price_pos"] = (close - slow_ma) / slow_mafeatures["volatility_10"] = close.pct_change().rolling(10).std()features["ret_5"] = close.pct_change(5)features["volume_z"] = (volume - volume.rolling(20).mean()) / volume.rolling(20).std()
这些特征并不神秘。
ma_diff 看均线距离,fast_slope 看短线趋势是否加速,price_pos 看价格是否偏离均线太远,volatility_10 看近期波动是否过大,ret_5 看短期动量,volume_z 看成交量是否异常。
模型最终只做一件事:
当 5/10 双均线发出持仓信号时,判断这次信号是否值得执行。
如果它认为当前环境更像震荡假突破,就不放行;如果更像趋势延续,就允许持仓。
四、为什么还要参数搜索和滚动验证?

如果只比较 5/10 双均线和强化学习,结论还不够完整。因为 5/10 本身只是经验参数,并不一定适合所有股票和行情。

参数搜索会在训练集里遍历不同快慢均线组合,比如快线从 3 到 30,慢线从 10 到 100,选出训练集表现较好的组合,再放到测试集验证。
它要回答的问题是:如果固定 5/10 表现一般,到底是均线思想不行,还是参数太死板?
滚动验证更严格。
它会让时间向前滚动,每个窗口重新训练、重新选参数,再用后续窗口测试。
这样可以观察策略是否只在某一段行情有效,还是在不同阶段都有相对稳定的表现。
验证方式做法优点风险
固定 5/10全程使用 5 日和 10 日均线简单透明参数僵化
参数搜索训练集找参数,测试集验证能发现更适合样本的参数可能过拟合
滚动验证多窗口训练和测试更接近真实研究流程计算更慢
强化学习过滤固定 5/10 信号,再由模型过滤尝试减少误交易解释性较弱
五、结果与判断
综合图表主要看七类:
平均总收益、夏普分布、最大回撤分布、盈利股票占比、第一名次数、收益-回撤定位图、综合评分热力图。
它们分别回答收益、风险、稳定性、泛化能力和综合表现的问题。
风险提示
本文内容仅用于 Python 编程、量化研究和数据分析学习,不构成任何投资建议。
历史回测结果不代表未来收益。
任何交易策略都可能在未来失效,强化学习模型也可能出现过拟合、样本外失效、市场环境变化后表现下降等问题。
参数搜索和滚动验证可以降低一部分过拟合风险,但不能消除风险。
股票市场有风险,投资需谨慎。实盘交易前,请务必结合更长周期数据、多市场环境验证、模拟盘测试和自身风险承受能力进行综合判断。
小白必看!通达信“牛线马线买点”指标:趋势、低吸与风险,一篇看懂
真正的主力不是神秘人,而是一套资金组织方式
“榜上大佬”的魔力:散户为何总是盲目跟风?
为什么你深信不疑的“涨停回调”买点,可能是亏损的陷阱?

最新文章

随机文章