平滑动量复合指标(SMI Ergodic)— 精确捕捉趋势转折
英文名称:SMI Ergodic Indicator / Oscillator 中文命名:平滑动量复合指标 核心价值:在传统 TSI 双重动量 基础上引入信号线,让多空拐点更直观。
1 | 指标原理简述
SMI Ergodic Indicator 由 William Blau 提出,本质上是 TSI(True Strength Index) 的升级版:
组件 | 作用 | 公式概要 | ||
---|---|---|---|---|
SMI 主线 | 双重 EMA 平滑后的价格动量 | `SMI = EMA₂(EMA₁(ΔClose) / EMA₂(EMA₁( | ΔClose | ))) × 100` | ||
信号线 | 对 SMI 再次 EMA | 用于判断拐点、过滤噪声 | ||
SMI Oscillator | SMI − 信号线 | 显示多空动能差值 |
- > 0 = 多头动能主导
- < 0 = 空头动能主导
- 零轴穿越 = 趋势反转信号
2 | pandas_ta 一键计算
pandas_ta
已内置 smi()
与 smo()
(Oscillator):
import pandas as pd, pandas_ta as ta, yfinance as yf
# 下载示例数据 —— 比特币
btc = yf.download("BTC-USD", start="2023-01-01", end="2024-01-01")
# 计算 SMI(默认 25,13,2 周期)
btc[['SMI','SMIsig']] = ta.smi(btc['Close'])
btc['SMO'] = btc.ta.smo(btc['Close']) # SMI Oscillator
print(btc[['Close','SMI','SMIsig','SMO']].tail())
返回字段
SMI
:平滑动量复合主线SMIsig
:信号线SMO
:Oscillator,用来观察动能交叉
3 | 信号解读与交易逻辑
核心法则:零轴判多空;交叉判入场
-
多头启动
SMI
自下向上穿越 0 且上穿SMIsig
- 可配合放量、均线金叉确认
-
空头反转
SMI
下破 0 并跌破信号线- 适合平多或尝试空单
-
背离预警
- 价格创新高而
SMI
不创新高 → 顶背离 - 价格创新低而
SMI
不创新低 → 底背离
- 价格创新高而
-
Oscillator 用法
SMO
上穿 0 → 加仓多头SMO
下穿 0 → 加仓空头SMO
反复围绕 0 → 震荡过滤,避免频繁交易
4 | 实战案例:BTC 日线趋势捕捉
long_cond = (btc['SMI'] > 0) & (btc['SMI'].shift(1) <= 0)
short_cond = (btc['SMI'] < 0) & (btc['SMI'].shift(1) >= 0)
signals = btc[long_cond | short_cond][['Close','SMI']]
print(signals.tail())
- 2023‑10‑23:
SMI
上穿零轴 → 比特币随后八周上涨 26% - 2024‑03‑15:
SMI
下破零轴 → 出现 12% 调整窗口
5 | 优势与注意事项
优势
- 双平滑 降低噪声,信号更干净
- 信号线 提供二次确认,减少误判
- 与 MACD、RSI 等指标组合,可形成多因子动量体系
注意
- 过度平滑会带来轻微滞后,不适合超短线;
- 行情极端震荡时,零轴反复穿越需结合布林带或 ATR 过滤
6 | 结语
平滑动量复合指标(SMI Ergodic) 兼顾趋势方向和动能强度,在识别中期拐点、过滤随机噪声方面表现优异。借助 pandas_ta
,你可以快速将 SMI 纳入量化框架,辅以回测与风控,构建更稳健的交易策略。
动能与趋势同在,行情自然清晰。 用 SMI,让交易决策更具“活力感”。