4. 均线交叉信号:金叉死叉的定义、单均线策略、双均线策略、三均线策略
均线交叉,这玩意儿在量化圈里被聊得最多,也最容易被误解。
很多人一上来就搞双均线金叉买入、死叉卖出,结果回测曲线漂亮得像假的一样,实盘一跑就崩。为什么?因为没搞懂均线交叉背后的逻辑。
我个人习惯把均线交叉分成三个层次来理解:定义、单均线、多均线。今天咱们一层层剥开。
4.1 金叉与死叉:最基础的定义
先说定义,简单到不能再简单:
- 金叉:短期均线上穿长期均线。比如5日均线上穿20日均线。市场短期趋势转强,是买入信号。
- 死叉:短期均线下穿长期均线。比如5日均线下穿20日均线。市场短期趋势转弱,是卖出信号。
但这里有个坑——均线参数怎么选?
我在项目中遇到过不少新手,上来就用(5, 20)或者(10, 30),觉得这是标准答案。其实不是。参数选择取决于你的持仓周期和品种波动率。
核心原则:参数越小,信号越灵敏,但假信号越多;参数越大,信号越滞后,但胜率相对更高。
我的经验:做日线级别的轮动策略,我常用(5, 20)作为基础组合。但如果是做小时线或者15分钟线,我会把参数调小,比如(3, 12)。
4.2 单均线策略:最简单的趋势跟踪
单均线策略,说白了就是一根均线走天下。
规则:
- 价格上穿均线 → 买入
- 价格下穿均线 → 卖出
听起来是不是比双均线还简单?但实际用起来,你会发现一个问题——震荡行情里被反复打脸。
我记得有一次做股指期货的日内策略,用20周期均线做单均线跟踪。行情单边上涨时赚得盆满钵满,但一到横盘震荡,连续被左右打耳光,一周亏掉之前两周的利润。
为什么会这样?因为单均线策略本质上是一个滞后指标。它只能告诉你趋势已经发生了,不能预测趋势什么时候开始。
避坑指南:单均线策略只适合趋势明显的品种,比如股指、商品期货中的趋势性品种。震荡市里,千万别用单均线做主要信号。
代码实现也很简单:
# 单均线策略示例
import pandas as pd
import numpy as np
def single_ma_strategy(df, ma_period=20):
df['MA'] = df['close'].rolling(window=ma_period).mean()
df['signal'] = 0
df.loc[df['close'] > df['MA'], 'signal'] = 1 # 买入信号
df.loc[df['close'] < df['MA'], 'signal'] = -1 # 卖出信号
return df
4.3 双均线策略:金叉死叉的经典应用
双均线策略,就是咱们开头说的金叉死叉。它比单均线多了一层过滤,能减少一部分假信号。
规则:
- 短期均线上穿长期均线 → 金叉,买入
- 短期均线下穿长期均线 → 死叉,卖出
但这里有个细节很多人忽略——金叉死叉的确认时机。
我见过有人用收盘价确认,有人用盘中实时确认。我个人习惯用收盘价确认。为什么?因为盘中波动太大,很容易被瞬间的假突破骗进去。
实战技巧:金叉死叉信号出现后,不要立即下单。等下一根K线收盘确认,或者加一个百分比过滤(比如短期均线超过长期均线0.5%才算有效金叉)。
双均线策略的代码:
# 双均线策略示例
def dual_ma_strategy(df, short_period=5, long_period=20):
df['MA_short'] = df['close'].rolling(window=short_period).mean()
df['MA_long'] = df['close'].rolling(window=long_period).mean()
df['signal'] = 0
# 金叉信号
df.loc[(df['MA_short'] > df['MA_long']) &
(df['MA_short'].shift(1) <= df['MA_long'].shift(1)), 'signal'] = 1
# 死叉信号
df.loc[(df['MA_short'] < df['MA_long']) &
(df['MA_short'].shift(1) >= df['MA_long'].shift(1)), 'signal'] = -1
return df
4.4 三均线策略:更精细的趋势判断
三均线策略,说白了就是在双均线的基础上再加一根中期均线,用来判断趋势的强度。
常见的三均线组合:
- 短期:5日或10日
- 中期:20日或30日
- 长期:60日或120日
三均线策略的核心逻辑:
- 多头排列:短期 > 中期 > 长期 → 强势上涨趋势
- 空头排列:短期 < 中期 < 长期 → 弱势下跌趋势
- 交叉信号:短期上穿中期,且中期在长期之上 → 更可靠的金叉
我曾经用三均线策略做过一个ETF轮动组合。当时选了5只行业ETF,用(5, 20, 60)三均线判断趋势强度,只做多头排列的品种。效果比单纯的双均线好不少,尤其是在震荡市里,能过滤掉很多假突破。
我的建议:三均线策略更适合做趋势强度过滤,而不是直接作为买卖信号。你可以先用三均线判断大方向,再用双均线或单均线找具体入场点。
三均线策略的代码实现:
# 三均线策略示例
def triple_ma_strategy(df, short=5, mid=20, long=60):
df['MA_short'] = df['close'].rolling(window=short).mean()
df['MA_mid'] = df['close'].rolling(window=mid).mean()
df['MA_long'] = df['close'].rolling(window=long).mean()
# 判断排列状态
df['bullish'] = (df['MA_short'] > df['MA_mid']) & (df['MA_mid'] > df['MA_long'])
df['bearish'] = (df['MA_short'] < df['MA_mid']) & (df['MA_mid'] < df['MA_long'])
# 只在多头排列时做多
df['signal'] = 0
df.loc[df['bullish'], 'signal'] = 1
df.loc[df['bearish'], 'signal'] = -1
return df
4.5 三种策略的对比与选择
说了这么多,到底该用哪种?
我整理了一个对比表,方便你快速决策:
| 策略类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 单均线 | 简单直观,参数少 | 震荡市假信号多 | 强趋势行情 |
| 双均线 | 过滤部分假信号 | 滞后性依然存在 | 中等趋势行情 |
| 三均线 | 趋势判断更精细 | 参数多,过拟合风险大 | 震荡市+趋势市混合 |
重要提醒:均线交叉策略最大的问题不是参数选择,而是滞后性。你永远无法在最低点买入、最高点卖出。接受这个事实,你才能用好均线。
4.6 均线交叉策略的核心逻辑图
下面这张图,是我自己总结的均线交叉策略决策流程。你想想看,从原始价格数据到最终买卖信号,中间经历了哪些步骤:
这张图的核心逻辑其实就一句话:从价格到均线,从均线到交叉,从交叉到信号。每一步都在做信息过滤和趋势确认。
嗯,关于均线交叉的内容,今天就聊到这儿。记住一点:均线是工具,不是圣杯。再好的策略,也要结合仓位管理和风险控制才能长期赚钱。
最后一句:我见过太多人把均线交叉当成万能钥匙,结果亏得怀疑人生。别犯同样的错误。把均线当成趋势判断的辅助工具,而不是唯一的决策依据。