Quant认知(三)–移动平均线策略
📑 目录
- 1️⃣ 趋势 vs 噪声 —— 你每天看到的是什么?
- 2️⃣ 为什么需要“移动平均”
- 3️⃣ 移动平均线的两个关键参数
- 4️⃣ 金叉与死叉 —— 趋势转折的“信号灯”
- 5️⃣ 第一个量化策略(规则)
- 6️⃣ 专业可视化 —— 一张图看懂一切
1️⃣ 趋势 vs 噪声
直观比喻
- 趋势:像海浪的大方向(涨潮或退潮),持续几天甚至几周。
- 噪声:像水面的小波纹,一天内上蹿下跳,不代表方向变了。
三种市场状态
| 上涨趋势 | 价格整体向上,低点越来越高 | 赚钱效应,偏乐观 |
| 下跌趋势 | 价格整体向下,高点越来越低 | 亏损风险,偏悲观 |
| 噪声/横盘 | 价格来回震荡,没有明确方向 | 容易反复被“骗线” |
趋势描述价格变化的较长期方向;噪声则是短期、难以解释或预测的价格波动。横盘是一种市场状态,而不是噪声本身
2️⃣ 为什么需要“移动平均”
问题
每天收盘价受消息、大单、情绪影响,太“毛刺”,直接看会头晕。
解决方案
对最近 N 个价格进行平滑处理,降低短期价格波动对观察结果的影响。
生活类比
- 看天气不能只看今天温度(波动大),要看最近一周平均温度(更稳)。
- 移动平均就是“温度的7天滑动均值”。
代码实现(pandas)
df['MA5'] = df['Close'].rolling(5).mean() # 5日均线
df['MA20'] = df['Close'].rolling(20).mean() # 20日均线
- rolling(n):取最近 n 天窗口
- .mean():计算算术平均
3️⃣ 移动平均线的两个关键参数
| MA5(短期) | 最近5天收盘价平均 | 敏感,紧跟价格,但容易有假信号 |
| MA20(中期) | 最近20天收盘价平均 | 平滑,更稳定,但反应慢(滞后) |
4️⃣ 金叉与死叉 —— 趋势转折的“信号灯”
当短期均线(MA5)和长期均线(MA20)相遇交叉时,产生经典信号:
| MA5 从下往上穿过 MA20 | 金叉(Golden Cross) | 短期力量转强,可能进入上涨 | 买入参考 📈 |
| MA5 从上往下穿过 MA20 | 死叉(Death Cross) | 短期力量转弱,可能进入下跌 | 卖出参考 📉 |
如何用代码检测金叉/死叉
df['spread'] = df['MA5'] – df['MA20'] # 差值
df['cross'] = np.sign(df['spread']).diff() # 符号变化
# cross > 0 → 金叉(由负转正)
# cross < 0 → 死叉(由正转负)
金叉≠必然赚钱,死叉≠必然亏钱。后面章节会用回测验证真实效果。
spread = MA5 − MA20。spread 从负变正,表示发生金叉;从正变负,表示发生死叉。
5️⃣ 第一个量化策略(规则)
把上面的直觉写成 if 规则(伪代码):
如果 MA5 > MA20:
持仓(买入)
否则:
空仓(卖出)
在代码里变成 signal 列
df['signal'] = (df['MA5'] > df['MA20']).astype(int)
# signal = 1 → 持仓;signal = 0 → 空仓
交易记录
df['trade'] = 0
df.loc[df['cross'] > 0, 'trade'] = 1 # 金叉日 → 买入
df.loc[df['cross'] < 0, 'trade'] = –1 # 死叉日 → 卖出
6️⃣ 专业可视化 —— 一张图看懂一切
一张好的策略图应包含:
- 价格(灰色细线)
- 两条均线(橙色 MA5,蓝色 MA20)
- 金叉 ▲(绿色向上三角)
- 死叉 ▼(红色向下三角)
- 下方色带:蓝色表示持仓,白色表示空仓
这样一眼就能看出:
- 什么时候买(金叉 + 持仓开始)
- 什么时候卖(死叉 + 持仓结束)
- 中间持有过程是否赚钱(看价格涨跌)




