移动平均线 (Moving Average) 通过计算过去 N 个周期 的平均价格,消除随机波动,突出趋势方向。
📌 趋势跟踪的核心假设:趋势一旦形成,将持续一段时间。
简单移动平均线 (SMA)
SMA = (P₁ + P₂ + … + Pₙ) / N
指数移动平均线 (EMA) — 赋予近期更高权重
EMA今日 = (P今日 × α) + (EMA昨日 × (1−α))
α = 2 / (N+1)
常用周期:20, 50, 100, 200 (日线/小时线)
| 特性 | 简单移动平均 (SMA) | 指数移动平均 (EMA) |
|---|---|---|
| 权重 | 所有周期等权 | 近期价格权重更高 |
| 反应速度 | 较慢,更平滑 | 较快,更贴近价格 |
| 适用场景 | 长期趋势、支撑阻力 | 短期交易、快速信号 |
| 滞后性 | 高 | 低 |
| 计算复杂度 | 低 (累加平均) | 中 (递归) |
💡 CTA实战中常用 EMA12/EMA26 或 SMA20/SMA60 组合。
# 计算简单移动平均线 (SMA) def sma(close, period=20): import numpy as np close = np.array(close) sma_vals = np.convolve(close, np.ones(period)/period, mode='valid') # 前 period-1 个为 NaN return np.concatenate([np.full(period-1, np.nan), sma_vals]) # 双均线交叉信号 def crossover(short_ma, long_ma): signals = [] for i in range(1, len(short_ma)): if short_ma[i-1] < long_ma[i-1] and short_ma[i] > long_ma[i]: signals.append('BUY') elif short_ma[i-1] > long_ma[i-1] and short_ma[i] < long_ma[i]: signals.append('SELL') else: signals.append('HOLD') return signals
✏️ 学生笔记 · 关键参数