📈 移动平均线 MA · 趋势跟踪

CTA 策略开发 · 第4课
🔍 原理 · 平滑价格噪音

🧠 核心思想

移动平均线 (Moving Average) 通过计算过去 N 个周期 的平均价格,消除随机波动,突出趋势方向。

  • 滞后性:周期越大,曲线越平滑,对价格反应越慢。
  • 趋势过滤器:价格在均线上方 → 上升趋势;下方 → 下降趋势。
  • 支撑/阻力:在趋势中常扮演动态支撑或阻力角色。

📌 趋势跟踪的核心假设:趋势一旦形成,将持续一段时间。

⚙️ 计算方法

简单移动平均线 (SMA)

SMA = (P₁ + P₂ + … + Pₙ) / N

指数移动平均线 (EMA) — 赋予近期更高权重

EMA今日 = (P今日 × α) + (EMA昨日 × (1−α))
α = 2 / (N+1)

常用周期:20, 50, 100, 200 (日线/小时线)

📊 SMA vs EMA 对比
特性简单移动平均 (SMA)指数移动平均 (EMA)
权重所有周期等权近期价格权重更高
反应速度较慢,更平滑较快,更贴近价格
适用场景长期趋势、支撑阻力短期交易、快速信号
滞后性高低
计算复杂度低 (累加平均)中 (递归)
📉 趋势跟踪应用 · 双均线策略
金叉 死叉 📈 价格 · 快线(MA20) · 慢线(MA50) 价格 MA20 MA50
🚀 在趋势跟踪中的应用

📋 典型规则

  • 单均线系统:收盘价上穿MA → 做多;下穿 → 做空。
  • 双均线交叉:快线上穿慢线 (金叉) 开多;死叉开空。
  • 三均线组合:MA20, MA50, MA200 过滤趋势强度。
  • 均线斜率:均线向上倾斜确认上升趋势。
  • 价格与均线距离:乖离率过滤超买/超卖。

💡 CTA实战中常用 EMA12/EMA26 或 SMA20/SMA60 组合。

🧾 Python 示例 (SMA)

# 计算简单移动平均线 (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
🧩 CTA 策略流程 · 均线模块
行情数据 计算 MA 交叉 / 位置 信号判断 开/平仓 执行 📌 均线模块是趋势跟踪策略的核心过滤器

✏️ 学生笔记 · 关键参数

  • 🔹 周期 N:越短越灵敏,越长越平滑
  • 🔹 价格类型:收盘价 (默认) / 典型价 (H+L+C)/3
  • 🔹 时间框架:日线、1小时、15分钟
  • 🔹 过滤器:结合ATR或波动率避免假信号