第四章 技术指标实战:移动平均线、RSI、布林带与MACD
各位同学,欢迎来到技术指标实战这一章。说实话,我刚入行那会儿,面对满屏的指标也是一头雾水。什么金叉死叉、超买超卖,看着都像玄学。但做了这么多年交易,我慢慢发现——指标不是用来预测未来的,而是用来描述当前市场状态的。这个认知转变,让我少亏了很多钱。
今天咱们就把四个最经典的指标讲透:移动平均线、RSI、布林带、MACD。我会结合自己的实战经验,告诉你每个指标到底怎么用,以及——更重要的是——什么时候别用。
4.1 移动平均线:趋势的骨架
移动平均线,说白了就是把过去N根K线的价格拉个平均值,然后连成一条线。它帮你滤掉短期的噪音,看清真正的趋势方向。
我个人习惯把均线分成两类:
- 简单移动平均线(SMA):所有数据权重一样。计算简单,但反应慢半拍。
- 指数移动平均线(EMA):越近的数据权重越大。反应快,但容易假信号。
实战经验:我在做EUR/USD的日内策略时,通常用EMA12和EMA26的组合。EMA12代表短期趋势,EMA26代表中期趋势。当EMA12上穿EMA26,就是所谓的「金叉」,做多信号;下穿就是「死叉」,做空信号。
但注意——震荡行情里金叉死叉频繁出现,这时候信它就输了。我吃过这个亏,后来加了一条过滤:金叉出现时,价格必须在EMA26上方至少3根K线,才算有效。
来看一段Python代码,计算EMA并生成交易信号:
import pandas as pd
import numpy as np
def calculate_ema(data, period):
"""计算指数移动平均线"""
return data['close'].ewm(span=period, adjust=False).mean()
def generate_ma_signals(data, fast=12, slow=26):
"""生成均线交叉信号"""
data['ema_fast'] = calculate_ema(data, fast)
data['ema_slow'] = calculate_ema(data, slow)
# 计算交叉信号
data['signal'] = 0
data.loc[data['ema_fast'] > data['ema_slow'], 'signal'] = 1
data['position'] = data['signal'].diff()
# 过滤:只在趋势确认时交易
data['trend_confirmed'] = data['close'] > data['ema_slow']
data['final_signal'] = 0
data.loc[(data['position'] == 1) & (data['trend_confirmed']), 'final_signal'] = 1
data.loc[(data['position'] == -1) & (~data['trend_confirmed']), 'final_signal'] = -1
return data
小技巧:EMA的参数不是固定的。波动大的品种(比如GBP/JPY),我习惯把周期调短一点,比如EMA8和EMA21。波动小的(比如USD/CHF),用EMA20和EMA50更合适。
4.2 相对强弱指数(RSI):动量的温度计
RSI衡量的是价格变动的速度和幅度。取值范围0到100,一般认为70以上超买,30以下超卖。
但这里有个坑——很多人以为RSI到70就该做空,到30就该做多。你想想看,如果真这么简单,交易员早都发财了。
避坑指南:我曾经在2019年做USD/JPY,RSI连续3天在80以上,我不断做空,结果被连续止损。后来才明白——强趋势行情里,RSI可以在超买区待很久。这时候做空就是接飞刀。
正确的做法是:RSI超买/超卖只在震荡行情里有效。趋势行情里,RSI的背离信号更有价值。
RSI背离,说白了就是价格创新高,但RSI没创新高。这说明上涨动能衰竭,反转概率大。反过来也一样。
def calculate_rsi(data, period=14):
"""计算RSI指标"""
delta = data['close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window=period).mean()
avg_loss = loss.rolling(window=period).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
def detect_rsi_divergence(data, rsi_col='rsi'):
"""检测RSI顶背离"""
# 简化版:价格创新高但RSI没创新高
price_high = data['high'].rolling(5).max()
rsi_high = data[rsi_col].rolling(5).max()
divergence = (data['high'] == price_high) & (data[rsi_col] < rsi_high.shift(1))
return divergence
4.3 布林带:波动率的可视化
布林带由三条线组成:中轨(通常是20日均线)、上轨(中轨+2倍标准差)、下轨(中轨-2倍标准差)。
它的核心思想是:价格大多数时间会在上下轨之间波动。当价格突破上轨或下轨,说明波动率在放大,可能开启新的趋势。
我个人最喜欢的是布林带的「带宽收缩」形态。当上下轨收得很窄时,说明市场在蓄力,很快会有大行情。这个信号在2015年瑞郎黑天鹅事件前出现过,可惜我当时没重视。
实战用法:
- 带宽扩张:价格突破上轨且带宽在扩大,做多;突破下轨且带宽扩大,做空。
- 带宽收缩:等待突破方向,不提前押注。
- 中轨回测:价格回踩中轨不破,是加仓机会。
def calculate_bollinger(data, period=20, std_dev=2):
"""计算布林带"""
data['middle'] = data['close'].rolling(window=period).mean()
data['std'] = data['close'].rolling(window=period).std()
data['upper'] = data['middle'] + std_dev * data['std']
data['lower'] = data['middle'] - std_dev * data['std']
# 带宽指标
data['bandwidth'] = (data['upper'] - data['lower']) / data['middle']
# 带宽收缩信号(带宽小于历史20%分位)
threshold = data['bandwidth'].rolling(100).quantile(0.2)
data['squeeze'] = data['bandwidth'] < threshold
return data
注意:布林带的参数不是死的。我见过有人用1.5倍标准差做短线,3倍标准差做长线。关键是要回测,找到适合你交易周期的参数。
4.4 MACD:趋势与动量的合体
MACD = 快线(EMA12) - 慢线(EMA26),再加上一条信号线(DEA9),以及柱状图(MACD - 信号线)。
嗯,听起来复杂,但用起来其实就三件事:
- 快慢线交叉:和均线交叉一个道理,金叉做多,死叉做空。
- 柱状图变化:柱状图由负转正,动量由空转多;由正转负,动量由多转空。
- 背离:价格和MACD走势不一致,往往是趋势反转的前兆。
我记得有一次做AUD/USD,价格在底部盘整,MACD柱状图却开始收窄,出现了底背离。我当时果断做多,后面涨了200多点。背离信号在MACD上比RSI更可靠,因为MACD包含了趋势信息。
def calculate_macd(data, fast=12, slow=26, signal=9):
"""计算MACD指标"""
data['ema_fast'] = data['close'].ewm(span=fast, adjust=False).mean()
data['ema_slow'] = data['close'].ewm(span=slow, adjust=False).mean()
data['macd'] = data['ema_fast'] - data['ema_slow']
data['signal_line'] = data['macd'].ewm(span=signal, adjust=False).mean()
data['histogram'] = data['macd'] - data['signal_line']
# 交叉信号
data['cross'] = 0
data.loc[data['macd'] > data['signal_line'], 'cross'] = 1
data['cross_signal'] = data['cross'].diff()
return data
4.5 组合策略:让指标互相验证
单一指标容易出假信号。我建议至少用两个不同维度的指标互相验证。比如:
| 组合方式 | 适用场景 | 信号确认逻辑 |
|---|---|---|
| MA + RSI | 趋势中的回调交易 | 价格回踩MA且RSI未超卖 → 做多 |
| 布林带 + MACD | 突破交易 | 价格突破布林带上轨 + MACD金叉 → 做多 |
| RSI + MACD背离 | 反转交易 | 两者同时出现背离 → 反转概率极高 |
重要提醒:指标组合不是越多越好。我见过有人把5个指标叠在一起,结果信号互相矛盾,根本没法交易。我的原则是——最多用3个指标,每个指标只取一个核心信号。
好了,技术指标这块就讲到这里。记住一句话:指标是工具,不是圣杯。它们帮你描述市场状态,但最终决策还是要靠你的交易系统和风险管理。下一章我们会讲如何把这些指标组装成一个完整的交易策略,到时候再细聊。
公众号:蓝海资料掘金营,微信deep3321