3. 技术指标基础:移动平均线、指数移动平均与布林带

做量化择时,说白了就是跟价格数据打交道。而技术指标,就是我们解读这些数据的「翻译官」。今天咱们聊聊三个最基础、也最实用的指标:MA、EMA 和布林带。

我个人习惯,在搭建任何择时系统之前,都会先把这几个指标吃透。为什么?因为它们构成了绝大多数策略的「地基」。地基不稳,楼盖得再高也白搭。

3.1 移动平均线(MA)

移动平均线,也叫简单移动平均。它的计算方式很直白:取过去 N 个周期的收盘价,算个平均值。

公式长这样:

MA(N) = (P₁ + P₂ + ... + Pₙ) / N

其中 P 是收盘价,N 是周期数。

举个例子

假设某股票最近 5 天的收盘价是:10, 11, 12, 13, 14。那么 5 日 MA 就是:

MA(5) = (10 + 11 + 12 + 13 + 14) / 5 = 12

嗯,就这么简单。

核心要点:MA 的本质是「平滑」价格波动。它滤掉了短期的噪音,让你看清趋势的方向。

我在项目中遇到过一个问题:用 MA 做信号,总是滞后。你想想看,价格都涨上去了,MA 才慢慢跟上。这就是 MA 的天然缺陷——它对所有数据一视同仁,不管是最新的价格还是 10 天前的价格,权重都一样。

实战技巧:我个人习惯用 5 日、20 日、60 日三条 MA。5 日看短期,20 日看中期,60 日看长期。三条线多头排列(短期在上、长期在下)时,趋势向上;空头排列时,趋势向下。

3.2 指数移动平均(EMA)

EMA 的出现,就是为了解决 MA 的滞后问题。它给最近的价格更高的权重,让指标对价格变化更敏感。

计算公式稍微复杂一点:

EMA(今日) = (今日收盘价 × 平滑系数) + (昨日 EMA × (1 - 平滑系数))

其中平滑系数 = 2 / (N + 1)

举个例子

还是上面那组数据,计算 5 日 EMA:

  1. 平滑系数 = 2 / (5 + 1) = 0.333
  2. 第一天没有昨日 EMA,所以用收盘价代替:EMA₁ = 10
  3. 第二天:EMA₂ = 11 × 0.333 + 10 × 0.667 = 10.333
  4. 第三天:EMA₃ = 12 × 0.333 + 10.333 × 0.667 = 10.889
  5. 以此类推...

你看,EMA 对最近的价格变化反应更快。这就是它的优势。

注意:EMA 虽然反应快,但也更容易被「假突破」欺骗。我曾经在震荡市中用 EMA 做信号,结果频繁被来回打脸。后来我加了一个「确认机制」——等价格突破 EMA 后,再等一根 K 线确认,才进场。

说白了,MA 和 EMA 没有绝对的好坏。MA 稳定,适合趋势明显的行情;EMA 灵敏,适合波动较大的品种。我一般会在趋势策略中用 MA,在短线策略中用 EMA。

3.3 布林带(Bollinger Bands)

布林带是约翰·布林格发明的。它由三条线组成:中轨(MA)、上轨和下轨。

计算公式:

中轨 = MA(N)
上轨 = 中轨 + K × 标准差
下轨 = 中轨 - K × 标准差

其中 N 通常取 20,K 通常取 2。

举个例子

假设某股票 20 日 MA 是 100,标准差是 5,K=2:

  • 中轨 = 100
  • 上轨 = 100 + 2 × 5 = 110
  • 下轨 = 100 - 2 × 5 = 90

布林带的核心理念是:价格有 95% 的概率落在上下轨之间。当价格触及上轨,说明超买;触及下轨,说明超卖。

关键认知:布林带不是「绝对」的买卖信号。它告诉你的是「当前价格处于什么位置」。真正有用的,是结合趋势来判断。

我记得有一次做回测,发现布林带在单边行情中经常「失效」——价格沿着上轨一直涨,你卖早了;或者沿着下轨一直跌,你抄底抄在半山腰。为什么会这样?因为布林带在趋势行情中会「开口」,上下轨被撑开,价格反而更容易「出轨」。

避坑指南:我曾经犯过一个错误——看到价格突破上轨就做空,结果被趋势行情狠狠教训了。后来我总结:布林带更适合震荡行情,在趋势行情中要配合其他指标使用。

3.4 三个指标的对比

指标 核心作用 优点 缺点 适用场景
MA 识别趋势方向 稳定、不易被欺骗 滞后严重 趋势跟踪策略
EMA 捕捉短期变化 反应灵敏 容易产生假信号 短线交易、高频策略
布林带 判断价格位置 直观显示超买超卖 趋势行情中易失效 震荡行情、均值回归策略

3.5 知识体系总览

下面这张图,帮你理清这三个指标的关系:

技术指标基础:MA · EMA · 布林带 移动平均线 (MA) 指数移动平均 (EMA) 布林带 (Bollinger) 平滑价格波动 识别趋势方向 近期权重更高 反应更灵敏 中轨 + 上下轨 判断超买超卖 核心逻辑 MA 看方向 · EMA 抓拐点 · 布林带定位置 三者结合使用,效果远胜单一指标

3.6 代码实现

下面是用 Python 实现这三个指标的代码。我习惯用 Pandas,处理时间序列数据很方便。

import pandas as pd
import numpy as np

def calculate_ma(data, window=20):
    """计算移动平均线"""
    return data['close'].rolling(window=window).mean()

def calculate_ema(data, window=20):
    """计算指数移动平均"""
    return data['close'].ewm(span=window, adjust=False).mean()

def calculate_bollinger(data, window=20, k=2):
    """计算布林带"""
    ma = calculate_ma(data, window)
    std = data['close'].rolling(window=window).std()
    
    upper_band = ma + k * std
    lower_band = ma - k * std
    
    return ma, upper_band, lower_band

# 使用示例
# df = pd.read_csv('stock_data.csv')
# df['MA20'] = calculate_ma(df, 20)
# df['EMA20'] = calculate_ema(df, 20)
# df['MA20'], df['Upper'], df['Lower'] = calculate_bollinger(df, 20, 2)

小建议:实际使用时,我一般会先计算 MA,再基于 MA 计算布林带。这样三个指标共用同一个「中轴」,逻辑更清晰。

嗯,以上就是三个基础指标的完整讲解。记住:指标是工具,不是圣杯。真正决定策略成败的,是你对市场的理解和对风险的把控。


公众号:蓝海资料掘金营,微信deep3321