真实强度指数(True Strength Index):揭示趋势转折的动量信号
一、什么是 True Strength Index(TSI)?
True Strength Index(简称 TSI),中文可称为 真实强度指数,是一种兼具短期波动识别与中长期趋势捕捉能力的动量类技术指标。由 William Blau 提出,TSI 的设计初衷是解决传统动量指标(如 RSI、MACD)在震荡市场中容易出现“假信号”的问题。
通过双重指数平滑处理,TSI 能更有效识别趋势转向,并结合**过热(overbought)与超卖(oversold)**区间判断交易时机。
二、TSI 指标的计算原理
TSI 的核心思想是衡量价格变动速度(即动量)的强弱,并进行两次平滑处理以提高信噪比。其计算过程如下:
-
计算动量(Momentum) 价格变化 = 当前收盘价 - 前一日收盘价
-
计算绝对动量 用于衡量价格波动强度
-
分别对动量和绝对动量进行两次 EMA 平滑
- 第一次 EMA 使用
fast
参数(默认 13) - 第二次 EMA 使用
slow
参数(默认 25)
- 第一次 EMA 使用
-
构建 TSI 指标本体
TSI = 100 × (双重平滑后的动量) ÷ (双重平滑后的绝对动量)
-
再对 TSI 主线进行一次 EMA 平滑生成信号线(Signal Line) 使用
signal
参数(默认 13)
三、pandas_ta 中的 tsi()
函数使用详解
在 Python 的 pandas_ta
技术分析库中,我们可以使用 tsi()
函数轻松调用 TSI 指标,并将其作为量化策略的重要组成部分。
函数调用方式示例:
import pandas_ta as ta
df[['TSI_13_25_13', 'TSIs_13_25_13']] = ta.tsi(df['Close'], fast=13, slow=25, signal=13)
参数含义:
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
close | Series | 收盘价序列 | 必填 |
fast | int | 动量第一次平滑期 | 13 |
slow | int | 动量第二次平滑期 | 25 |
signal | int | 信号线平滑期 | 13 |
scalar | float | 缩放因子(百分比系数) | 100 |
mamode | str | 平滑模式,如 "ema"、"sma" | "ema" |
drift | int | 差值周期 | 1 |
offset | int | 偏移周期 | 0 |
四、pandas_ta 输出字段解释
调用 tsi()
函数后,返回一个 2 列的 DataFrame:
字段名 | 中文含义 | 说明 |
---|---|---|
TSI_13_25_13 |
TSI 主线 | 表示价格动量的平滑比值 |
TSIs_13_25_13 |
信号线 | 对 TSI 主线再平滑后的值,用于判断交叉信号 |
五、如何解读 TSI 信号?
✅ 1. 趋势判断
- TSI 为正值:上涨趋势占主导
- TSI 为负值:下跌趋势主导市场
- TSI 趋势上升:动量增强,可能上涨加速
- TSI 趋势下降:动量衰减,可能转为下跌
✅ 2. 买卖信号(交叉判断)
- 金叉:TSI 上穿信号线 → 视为买入信号
- 死叉:TSI 下穿信号线 → 视为卖出信号
✅ 3. 超买与超卖区域(自定义区间)
- 超过 +25 时 → 市场可能超买
- 低于 -25 时 → 市场可能超卖
需要结合其他指标(如布林带、MACD)共同判断信号有效性。
六、TSI 实战案例演示(以比特币为例)
import yfinance as yf
import pandas_ta as ta
import matplotlib.pyplot as plt
# 下载数据
btc = yf.download("BTC-USD", start="2023-01-01", end="2023-12-31")
# 计算 TSI
tsi = ta.tsi(btc['Close'], fast=13, slow=25, signal=13)
btc = btc.join(tsi)
# 可视化
plt.figure(figsize=(14, 6))
plt.plot(btc.index, btc['TSI_13_25_13'], label='TSI 主线', color='blue')
plt.plot(btc.index, btc['TSIs_13_25_13'], label='TSI 信号线', color='orange')
plt.axhline(0, linestyle='--', color='gray', linewidth=1)
plt.title('比特币真实强度指数(TSI)')
plt.legend()
plt.grid(True)
plt.show()
通过图形,可以直观看到交叉点、趋势加速区域和震荡状态。
七、总结:TSI 是趋势交易与震荡识别的“双面刃”
真实强度指数(True Strength Index) 在实际应用中兼具:
- ✦ 较强的趋势识别能力(尤其适用于中周期交易);
- ✦ 有效的动量判断(利用平滑避免虚假突破);
- ✦ 明确的交叉买卖信号;
- ✦ 可灵活自定义阈值作为超买超卖指标。
无论是在股票、外汇还是加密资产交易中,TSI 都是构建稳健交易系统的利器之一,尤其适合与 RSI、MACD、DMI 等经典指标搭配使用。