📘 SMA 与 EMA 指标全解析:公式、计算、背离与实战策略
一. SMA与EMA 基础介绍
SMA(Simple Moving Average,简单移动平均线) 指过去 N 根 K 线收盘价的算术平均,代表价格的平滑趋势,适合趋势判断与支撑阻力分析。
EMA(Exponential Moving Average,指数加权移动平均线) 对近期价格赋予更高权重,反应更灵敏,适合捕捉短期动量与转折。
1、什么是 SMA(Simple Moving Average)
定义: SMA 是「简单移动平均线」,指过去 N 根K线的收盘价的算术平均。 常用于趋势判断,平滑价格波动。
公式:
SMA = (C1 + C2 + ... + Cn) / n
其中:
- Cn:表示第 n 根K线的收盘价
- n:周期长度,例如 5、20、60
2、什么是 EMA(Exponential Moving Average)
定义: EMA 是「指数加权移动平均线」,最近的数据权重更高。 比 SMA 更敏感、响应更快。
公式(递推公式):
EMA_today = α × Price_today + (1 - α) × EMA_yesterday
其中:
- α(平滑系数)= 2 / (n + 1)
- n 是周期长度
- EMA_yesterday 是上一周期的 EMA 值
3、用一组数据来模拟计算
我们用以下 5 天的收盘价进行模拟计算:
收盘价(Close): [10, 12, 13, 14, 15]
周期 n = 5
2
4、计算 SMA:
SMA_5 = (10 + 12 + 13 + 14 + 15) / 5 = 64
64 / 5 = 12.8
2
5、计算 EMA:
先算平滑系数 α:
α = 2 / (5 + 1) = 0.333...
假设第一个 EMA 值 = 第一个价格(初始化):
EMA_1 = 10
然后递推计算:
EMA_2 = 0.333 × 12 + 0.667 × 10 = 10.67
EMA_3 = 0.333 × 13 + 0.667 × 10.67 ≈ 11.45
EMA_4 = 0.333 × 14 + 0.667 × 11.45 ≈ 12.30
EMA_5 = 0.333 × 15 + 0.667 × 12.30 ≈ 13.20
2
3
4
最终结果:
SMA_5 = 12.8
EMA_5 ≈ 13.20
2
二、EMA 和 SMA 各自适合的周期与场景
类型 | 推荐周期 | 适用场景 | 特点 |
---|---|---|---|
SMA | 中长期(20/50/200) | 趋势判断、支撑阻力 | 更平滑,适合长期持仓 |
EMA | 短中期(5/10/20) | 短线进出场、快节奏市场 | 更灵敏,适合快进快出 |
三、SMA 与 EMA 优缺点及适用周期
特性 | SMA | EMA |
---|---|---|
响应速度 | 慢 | 快 |
平滑性 | 高,过滤噪音更好 | 低,信号更敏感 |
假信号概率 | 低 | 高 |
实盘鲁棒性 | 高,适合稳健趋势交易 | 低,易受滑点影响 |
推荐周期 | 中长期(20/50/200) | 短中期(5/10/20) |
适用策略类型 | 趋势跟随、中长持有 | 短线动量捕捉、高频交易 |
四、金叉/死叉 交易信号
- 金叉(买入):短期均线上穿长期均线(如 EMA5 > EMA20)
- 死叉(卖出):短期均线下穿长期均线(如 SMA10 < SMA60)
- 趋势判断:价格高于均线为上涨趋势,反之为下跌
✅ 趋势判断(价格 vs 均线)
条件 | 解读 |
---|---|
价格 > 均线 | 上升趋势 / 支撑区域 |
价格 < 均线 | 下跌趋势 / 压力区域 |
五、背离信号
背离是价格走势与技术指标(如均线)方向不一致的现象,通常意味着当前趋势动能减弱,可能预示趋势反转或调整即将到来。
背离主要有以下几种类型:
顶背离(Bearish Divergence) 价格创出新高,但指标未同步创新高,暗示上涨动能减弱,可能出现下跌反转。
底背离(Bullish Divergence) 价格创出新低,但指标未同步创新低,表明下跌动能减弱,可能出现反弹或趋势反转向上。
隐藏背离(Hidden Divergence) 价格高点或低点未创新高/低,但指标出现相反趋势,常用于判断趋势的延续。
这几种背离帮助交易者识别潜在的趋势转折或延续信号。
价格与均线的背离(Price-MA Divergence)
公式:
div = (Price - MA) / MA × 100%
表示价格偏离某条均线的百分比。 若为正,说明价格高于均线;为负,表示价格低于均线。
🔢 计算 SMA 和 EMA 背离
收盘价(close)过去 10 天:
[100, 102, 101, 103, 105, 104, 106, 107, 108, 110]
周期 n = 5,计算 EMA5:
平滑系数:
假设第1天 EMA5 初始化等于第1天收盘价,即 EMA_1 = 100。
1. 计算 EMA5 序列
递推计算 EMA5:
天数 | 收盘价 (Price) | 计算过程 | EMA5 值 |
---|---|---|---|
1 | 100 | 初始化 | 100.00 |
2 | 102 | 0.333×102 + 0.667×100 = 34+66.7 | 100.67 |
3 | 101 | 0.333×101 + 0.667×100.67 ≈ 33.67+67.12 | 100.79 |
4 | 103 | 0.333×103 + 0.667×100.79 ≈ 34.33+67.19 | 101.52 |
5 | 105 | 0.333×105 + 0.667×101.52 ≈ 35+67.68 | 102.68 |
6 | 104 | 0.333×104 + 0.667×102.68 ≈ 34.67+68.43 | 103.10 |
7 | 106 | 0.333×106 + 0.667×103.10 ≈ 35.33+68.75 | 104.08 |
8 | 107 | 0.333×107 + 0.667×104.08 ≈ 35.67+69.44 | 105.11 |
9 | 108 | 0.333×108 + 0.667×105.11 ≈ 36+70.07 | 106.07 |
10 | 110 | 0.333×110 + 0.667×106.07 ≈ 36.67+70.71 | 107.38 |
2. 三种背离案例模拟
- 顶背离:下跌趋势信号
- 底背离:上涨趋势信号
- 隐藏背离:趋势延伸信号
2.1 顶背离(Bearish Divergence)示例
条件:
- 价格创新高,但 EMA5 未创新高或走弱。
观察第 9 天和第 10 天:
- 价格第9天是 108,第10天涨到 110(新高)
- EMA5 第9天是 106.07,第10天涨到 107.38(新高,但涨幅较小)
如果我们用更宽松的判断,可以假设 EMA5 第10天实际低于第9天,或涨幅非常有限,表示 EMA 动能减弱。
比如 如果第10天 EMA5 计算出 106.5(比第9天低),则是明显顶背离。
背离计算(假设 EMA10天 = 106.5):
价格高点差 = 110 - 108 = +2 (新高)
EMA5高点差 = 106.5 - 106.07 = +0.43 (涨幅极小,可能走弱)
2
顶背离信号暗示上涨动能减弱,警惕
价格可能回调下跌
。
2.2 底背离(Bullish Divergence)示例
条件:
- 价格创新低,但 EMA5 未创新低或走强。
看第 2 天和第 3 天数据:
- 价格第2天是 102,第3天回落到 101(新低)
- EMA5 第2天是 100.67,第3天是 100.79(上涨)
计算背离:
价格低点差 = 101 - 102 = -1 (新低)
EMA5低点差 = 100.79 - 100.67 = + 0.12 (EMA上涨,动能回升)
2
说明价格在创新低,但 EMA5 在走高,出现底背离,预示
下跌动能减弱,可能反弹
。
2.3 隐藏背离(Hidden Divergence)示例
隐藏背离(Hidden Divergence)的本质
- 隐藏背离 = 趋势延续信号
- 它不是用来判断
转折点
,而是判断回调后的延续
2.3.1 隐藏看多案例
条件:
- 价格高点未创新高,但 EMA5 高点创新高。
看第 7 天和第 8 天:
- 价格第7天是 106,第8天是 107(不是新高,可能稍有回调)
- EMA5 第7天是 104.08,第8天是 105.11(创新高)
判断:
价格高点差 = 107 - 106 = +1 (不是明显新高,可以认为是小回调)
EMA5高点差 = 105.11 - 104.08 = +1.03 (EMA创新高)
2
🔍 解释:
是的,107 确实高于 106,是绝对的新高
—— 这是从数字大小来说没错的。 但这里说“不是明显新高”,背后的意思是:
- 虽然价格略微创了新高,但幅度只有 +1(从 106 到 107),
涨幅非常小
; - 相比于之前的走势,这种涨幅可能不足以代表“趋势持续向上”,反而可能是
冲高乏力的信号
。
🧠 通俗理解:
如果你连续几天价格是:100 → 105 → 106 → 107,涨得越来越慢, 即使 107 是新高,但涨幅只有 +1,可能代表“上涨动能变弱”。
这说明虽然价格未创新高
,但动能指标(EMA5)走强
,趋势可能继续上涨
,称为隐藏看多背离
。
2.3.2 隐藏看空案例(类似)
价格低点未创新低
,但 EMA 低点创新低
,暗示下跌趋势延续
。
3. 计算背离百分比示例
以第 10 天顶背离为例(假设 EMA10 天 = 106.5):
- 价格 vs EMA10 背离计算公式:
- 具体数值代入:
- 解释:
价格(110)相较于 EMA10(106.5)高出约 3.29%。这意味着价格已经远远跑赢了均线,短期涨势强劲。
背离含义和风险:
如果价格创出新高(110),但 EMA10 没有相应创新高(仍是 106.5 或更低),说明价格涨速远超均线反映的趋势动能。
这种“价格与均线背离”通常意味着价格短期上涨过快,可能进入超买区。
背离越大,代表价格偏离趋势基础越严重,潜在的调整或反转风险也越大。
特别是在顶背离场景中,如果均线未创新高且背离明显,往往是市场上涨动力不足、可能出现价格回调或下跌的重要信号。
背离百分比 总结:
背离百分比 | 含义 | 操作建议 |
---|---|---|
小于1% | 价格与均线走势同步 | 继续持有或观望 |
1%~3% | 价格开始偏离均线 | 注意风险,观察信号 |
大于3% | 价格远超均线,背离明显 | 谨慎减仓,防范反转 |
提示: 背离只是风险预警信号,结合成交量、其他指标和形态判断,才能提高准确性。
背离信号 总结
背离类型 | 价格表现 | EMA表现 | 含义 |
---|---|---|---|
顶背离 | 价格创新高 | EMA不创新高或走弱 | 上涨动能减弱,风险 |
底背离 | 价格创新低 | EMA不创新低或走强 | 下跌动能减弱,反弹 |
隐藏背离 | 价格未创新高/低 | EMA创新高或创新低 | 趋势延续信号 |
六、信号陷阱与应对策略
在趋势策略中,EMA / SMA(指数 / 简单移动平均线)交叉信号广泛用于判断买卖点,但它们也常出现“信号陷阱”,尤其在震荡市或极端行情下,容易导致误判开仓和平仓,甚至连续亏损。下面我们详细解析这些陷阱类型,并提供对应的解决方案:
1. ❌ 震荡市频繁金叉死叉("抖动陷阱")
表现:价格在短周期内上下波动,导致均线频繁交叉,但趋势并未真正形成。 问题:连续开仓和平仓,积小亏为大亏。
示意图:
价格: ─╮╰─╮╰─╮╰──(震荡)
SMA10:╭──╯╭──╯╭──(频繁交叉 SMA30)
2
解决方案:
- 增加趋势确认条件,如 ADX > 20 或 MACD 柱线放大。
- 设置时间过滤器(信号出现后等待N根K线确认)避免立即入场。
- 引入波动率过滤器(如 ATR / Bollinger Band)。
2. ❌ 假金叉 / 死叉陷阱("伪信号陷阱")
表现:金叉信号出现,但没有价格放量或上涨持续性,结果价格很快反转下跌。 常见于:重要均线附近(如SMA200)、支撑阻力位、消息面扰动。
解决方案:
- 配合 成交量放大作为辅助信号(如金叉时 volume > 平均量 * 1.2)。
- 结合 K线结构,如金叉当日为大阳线、吞没形态。
- 对信号滞后,设置 入场缓冲带,如收盘价高于交叉点一定幅度。
3. ❌ 延迟陷阱("落后信号陷阱")
表现:价格已上涨很大一段后才出现金叉信号,此时入场已经是尾部,回调风险高。 尤其是:SMA信号较慢,EMA稍快但仍有滞后。
解决方案:
- 结合价格与均线乖离(divergence)过滤过迟信号,如 EMA10 与 EMA50 距离超阈值时不入场。
- 引入提前指标如 RSI / Momentum 先行判断,金叉仅作确认。
- 尝试短期 EMA(如 EMA5/EMA13)配合更快判断。
4. ❌ 死叉时割肉陷阱("止盈提前陷阱")
表现:死叉刚出现就平仓,但价格并未真正下跌,反而继续上涨,导致踏空利润。 原因:死叉并不总意味着趋势结束。
解决方案:
- 死叉后 设置延迟平仓机制,例如3根K线确认价格下跌后再退出。
- 或采用趋势判断类止盈机制,如价格跌破EMA30 + RSI<50 才平仓。
- 使用自定义 ROI 曲线或动态止盈而非一刀切死叉退出。
✅ 总结与应对建议表格
陷阱类型 | 典型表现 | 原因分析 | 应对策略 |
---|---|---|---|
震荡交叉频繁 | 快速多次开平仓 | 市场无趋势 | 加趋势确认(ADX/MACD)、等待确认、多因子过滤 |
假金叉 / 死叉 | 信号后反向走 | 缺乏放量 / 势能 | 成交量判断、K线形态验证、价格确认 |
延迟信号 | 入场太晚 | 均线滞后 | 结合快线乖离、价格突破确认、快周期EMA |
死叉误平仓 | 止盈点过早 | 趋势仍在延续 | 死叉后延迟退出、动态止盈、趋势过滤 |
七、策略示例(Freqtrade)
申明:本策略旨在学习交流,实际操作请严格风险控制,造成的损失由本人承担。
- MA 金叉死叉信号(短期均线和长期均线交叉)
- 连续3个背离信号(价格与短期MA的背离连续出现3次触发)
from freqtrade.strategy import IStrategy
import talib
class MAStrategy(IStrategy):
timeframe = '15m'
stoploss = -0.10
minimal_roi = {"0": 0.05}
# 背离检测窗口长度
divergence_window = 1
def populate_indicators(self, dataframe, metadata):
# 计算短期和长期SMA
dataframe['sem_10'] = talib.SMA(dataframe['close'], timeperiod=10)
dataframe['sma_50'] = talib.SMA(dataframe['close'], timeperiod=50)
# 价格与短期均线的背离百分比
dataframe['divergence'] = (dataframe['close'] - dataframe['sem_10']) / dataframe['sem_10'] * 100
return dataframe
def _check_divergence(self, dataframe, idx):
"""
判断在 idx 位置,是否出现了连续3根背离信号,
这里简单定义:背离绝对值大于阈值 1%,连续3根
"""
if idx < self.divergence_window - 1:
return False
recent_divs = dataframe['divergence'].iloc[idx - (self.divergence_window - 1): idx + 1]
# 绝对值均大于 1%
if all(abs(d) > 1.0 for d in recent_divs):
return True
return False
def populate_entry_trend(self, dataframe, metadata):
dataframe['enter_long'] = 0
for i in range(len(dataframe)):
# 金叉买入条件:短期均线从下穿越长期均线
if i == 0:
continue
prev_short = dataframe.at[i - 1, 'sem_10']
prev_long = dataframe.at[i - 1, 'sma_50']
curr_short = dataframe.at[i, 'sem_10']
curr_long = dataframe.at[i, 'sma_50']
golden_cross = prev_short < prev_long and curr_short > curr_long
# 连续3个背离信号
divergence_signal = self._check_divergence(dataframe, i)
if golden_cross and divergence_signal:
dataframe.at[i, 'enter_long'] = 1
return dataframe
def populate_exit_trend(self, dataframe, metadata):
dataframe['exit_long'] = 0
for i in range(len(dataframe)):
if i == 0:
continue
prev_short = dataframe.at[i - 1, 'sem_10']
prev_long = dataframe.at[i - 1, 'sma_50']
curr_short = dataframe.at[i, 'sem_10']
curr_long = dataframe.at[i, 'sma_50']
# 死叉卖出条件:短期均线从上穿越长期均线
death_cross = prev_short > prev_long and curr_short < curr_long
if death_cross:
dataframe.at[i, 'exit_long'] = 1
return dataframe
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
策略运行命令请查看Freqtrade篇
回测结果 MAStrategy
- 交易次数:11
- 平均收益率:1.47%
- 总收益:53.76 USDT(5.38%)
- 平均持仓时间:9 小时 10 分钟
- 胜 / 平 / 负:7 / 0 / 4
- 胜率:63.6%
- 最大回撤:22.30 USDT(2.12%)
八、结语与实用建议
- SMA 与 EMA 是最基础且重要的趋势指标,但必须结合市场结构和其他指标使用,避免机械操作。
- 背离指标是领先预警信号,合理设定阈值并结合多因素确认,能有效降低假信号风险。
- 建议多周期、多品种回测验证策略参数,结合趋势过滤与量能确认提升实盘稳定性。