三角形移动平均线:兼顾平滑与灵敏的价格中枢
——Triangular Moving Average(TMA)
一、指标缘起
三角形移动平均线(下称 TMA)与常见的简单移动平均线(SMA)或指数移动平均线(EMA)不同,它采用对称三角权重:窗口中心的数据权重最大,两端权重逐级递减,如同等腰三角形。这种设计在削弱价格噪声的同时,仍能保持对趋势变化的敏感度,被视为“进阶版 SMA”。
二、核心算法
当周期 n 为偶数时,将价格序列先做一次 n/2 期 SMA,再对结果再做一次 (n/2+1) 期 SMA;若 n 为奇数,则两次取同样的 (n+1)/2。
TradingView 公式:
TMA = SMA(SMA(src, ceil(n/2)), floor(n/2)+1)
这种“两次平滑、居中加权”的递归,使得曲线在波动性大的市场中依然流畅,且相较 EMA 滞后更低。
三、用 pandas_ta 计算 TMA
import pandas as pd, pandas_ta as ta
df = pd.read_csv("OHLC.csv") # 包含 close 列
df["TMA_10"] = ta.tma(df["close"], length=10)
length
预设值 10,可根据品种波动性调整。- 返回结果为 Series,列名如
TMA_10
。 - 可用
offset
将曲线前移或后移,避免“未来数据泄露”误判。
四、TMA 与其他均线对照
均线 | 权重分布 | 延迟 | 平滑度 | 典型用途 |
---|---|---|---|---|
SMA | 等权 | 高 | 中 | 长周期支撑 |
EMA | 递减 | 低 | 中 | 快速拐点 |
TMA | 对称三角 | 中 | 高 | 震荡过滤 |
TMA 在震荡格局下优于 EMA,避免频繁假信号;在单边趋势中又比 SMA 反应更快,成为短中周期交易的黄金折中方案。
五、实战示例:BTC 日线
import matplotlib.pyplot as plt
plt.plot(df["close"], label="收盘价", alpha=.6)
plt.plot(df["TMA_10"], label="TMA(10)", color="orange")
plt.title("Bitcoin 与三角形均线")
plt.legend(); plt.grid(); plt.show()
图中可见:
- 价格上穿 TMA 并持续在其上方→多头延续;
- 价格跌破 TMA→预示回调;
- 当烛线紧贴 TMA、波幅收窄,则为蓄势阶段。
六、策略要点
- 趋势过滤:仅在价格位于 TMA 上方时做多,下方时做空。
- 多均线交叉:用 TMA(10) 与 TMA(30) 交叉判断中线拐点。
- 动态止损:将 TMA 作为跟踪止盈/止损线,跟随趋势保护利润。
七、结语
三角形移动平均线凭借独特的对称权重,在平滑与灵敏之间找到理想平衡。配合 pandas_ta.tma()
的Python实现,交易者可高效将其融入量化策略,用更干净的趋势线洞悉市场脉搏,提升决策质量与回测稳健度。