Momentum:TSI(真实强度指数)技术指标详解

Momentum:TSI(真实强度指数)技术指标详解

一、TSI的定义

TSI(True Strength Index,真实强度指数) 是由William Blau于20世纪90年代初在其著作《Momentum, Direction, and Divergence》中提出的一种先进动量震荡指标。该指标通过双重指数平滑技术处理价格动量,旨在过滤市场噪音,更准确地反映趋势的强度。

核心设计理念

TSI的设计哲学是:价格动量先于价格变化------在价格方向发生改变之前,动量往往已经先行变化。

传统动量指标容易受到单日价格尖峰的干扰,产生虚假信号。TSI通过对价格变化进行双重平滑,显著降低了"噪音"干扰,使交易者能够更清晰地识别真正的趋势动能。

TSI的核心特征

特征 说明
理论基础 双重指数平滑 + 动量归一化
指标类型 动量震荡指标(Oscillator)
数值范围 通常以百分比形式呈现,常见为-100到+100区间
开发者 William Blau(1990年代)
默认参数 fast=13, slow=25, signal=13
核心优势 双重平滑有效过滤噪音,适合趋势确认

TSI的技术定位

TSI在技术指标家族中属于双重平滑动量指标,其核心价值在于:

  • 平滑性:通过双重EMA显著减少市场噪音
  • 归一化:通过分子分母结构将数值标准化,便于跨品种比较
  • 多功能性:适用于趋势市场和震荡市场的分析

二、TSI的计算方法

1. 核心公式框架

TSI的计算建立在双重指数平滑的基础上,整体框架可分为三个层次:价格变化计算、双重平滑、归一化处理。

2. 详细计算步骤

第一步:计算价格变化(Price Change)

PCt=Closet−Closet−1 \mathrm{PC}{t} = \mathrm{Close}{t} - \mathrm{Close}_{t-1} PCt=Closet−Closet−1

其中 Closet\mathrm{Close}_{t}Closet 为第 ttt 周期的收盘价。这个价格变化构成了 TSI 计算的基础动量数据。

第二步:计算价格变化的双重平滑(第一层)

首先对价格变化应用第一次指数移动平均(EMA):

EMAslow,t=EMA(PC,slow)t \mathrm{EMA}_{\mathrm{slow}, t} = \mathrm{EMA}(\mathrm{PC}, \mathrm{slow})_t EMAslow,t=EMA(PC,slow)t

slow 为慢速 EMA 周期(默认25)。

然后对第一次平滑结果再次应用 EMA,得到平滑后的动量值:

SmoothMomentumt=EMA(EMAslow,fast)t \mathrm{SmoothMomentum}t = \mathrm{EMA}(\mathrm{EMA}{\mathrm{slow}}, \mathrm{fast})_t SmoothMomentumt=EMA(EMAslow,fast)t

其中 fast 为快速 EMA 周期(默认13)。

第三步:计算绝对价格变化的双重平滑(分母)

对价格变化的绝对值进行同样的双重平滑处理:

AbsSmoothMomentumt=EMA(EMA(∣PC∣,slow),fast)t \mathrm{AbsSmoothMomentum}_t = \mathrm{EMA}(\mathrm{EMA}(|\mathrm{PC}|, \mathrm{slow}), \mathrm{fast})_t AbsSmoothMomentumt=EMA(EMA(∣PC∣,slow),fast)t

第四步:计算TSI值

TSIt=100×SmoothMomentumtAbsSmoothMomentumt \mathrm{TSI}_t = 100 \times \frac{\mathrm{SmoothMomentum}_t}{\mathrm{AbsSmoothMomentum}_t} TSIt=100×AbsSmoothMomentumtSmoothMomentumt

这个比值介于 -100 和 +100 之间,表示动量在总动能中的占比。

第五步:计算信号线(Signal Line)

Signalt=EMA(TSI,signal)t \mathrm{Signal}_t = \mathrm{EMA}(\mathrm{TSI}, \mathrm{signal})_t Signalt=EMA(TSI,signal)t

其中 signal 为信号线平滑周期(默认13)。

3. 完整公式汇总

将上述步骤合并,TSI的完整计算公式可表达为:

TSI=100×EMA(EMA(PC,slow),fast)EMA(EMA(∣PC∣,slow),fast) \mathrm{TSI} = 100 \times \frac{\mathrm{EMA}(\mathrm{EMA}(\mathrm{PC}, \mathrm{slow}), \mathrm{fast})}{\mathrm{EMA}(\mathrm{EMA}(|\mathrm{PC}|, \mathrm{slow}), \mathrm{fast})} TSI=100×EMA(EMA(∣PC∣,slow),fast)EMA(EMA(PC,slow),fast)

Signal=EMA(TSI,signal) \mathrm{Signal} = \mathrm{EMA}(\mathrm{TSI}, \mathrm{signal}) Signal=EMA(TSI,signal)

其中:

  • PCt=Closet−Closet−1\mathrm{PC}_t = \mathrm{Close}t - \mathrm{Close}{t-1}PCt=Closet−Closet−1
  • EMA\mathrm{EMA}EMA:指数移动平均线

4. 参数说明

参数 默认值 名称 说明
fast 13 快速EMA周期 对第一次平滑结果进行再平滑,数值越小反应越灵敏
slow 25 慢速EMA周期 对原始价格变化进行第一次平滑,数值越大越平滑
signal 13 信号线周期 对TSI值进行平滑的周期,产生交叉信号
scalar 100 放大倍数 将比值转换为百分比形式

参数选择说明:13和25的双周期组合实现了灵敏度与可靠性的平衡。13周期EMA捕捉即时价格波动,25周期EMA提供趋势背景并过滤噪音。

5. 计算示例

假设使用标准参数(fast=13, slow=25),某股票连续两日收盘价如下:

日期 收盘价 PC EMA₁(PC,25) EMA₂(EMA₁,13) TSI计算
第1天 100.00 --- --- --- --- --- ---
... 中间数据逐步累积,EMA逐渐稳定
第25天 进入稳定计算期
当日 115.00 +0.50 +0.45 +0.47

逐步计算:

第一步:计算价格变化

  • PC = 115.00 - 114.50 = +0.50

第二步:第一次平滑(以slow=25为例,简化为线性近似)

  • EMA₁ = 前一日EMA₁ × (24/25) + PC × (1/25)
  • 假设前一日EMA₁ = 0.45,则EMA₁ ≈ 0.45 × 0.96 + 0.50 × 0.04 = 0.452

第三步:第二次平滑(fast=13)

  • 对EMA₁应用13周期EMA,计算得到SmoothMomentum

第四步:同时计算分母部分(使用|PC|)

  • 对|PC| = 0.50进行相同双重平滑,得到AbsSmoothMomentum

第五步:计算TSI

  • TSI = 100 × SmoothMomentum / AbsSmoothMomentum

TSI为正数 表示上升动量占主导,为负数表示下降动量占主导。

三、TSI的使用方法

1. 零轴穿越------趋势方向信号

TSI围绕0轴波动,零轴是最基础的趋势分界线:

TSI状态 市场含义 操作倾向
TSI > 0 上升动量占优,买盘力量主导 偏多思维,寻找买入机会
TSI < 0 下降动量占优,卖盘力量主导 偏空思维,寻找做空机会
上穿零轴 动量由负转正,上涨动能开始形成 买入信号
下穿零轴 动量由正转负,下跌动能开始形成 卖出信号

信号确认:零轴穿越信号在价格行为和成交量配合时更为有效。穿越同时有成交量放大和价格突破关键位置,信号可靠性显著提升。

2. 信号线交叉------精准入场信号

TSI线与信号线(Signal Line)的交叉是产生具体买卖指令的最常用方法:

信号类型 触发条件 含义 操作建议
金叉(买入) TSI线从下方上穿信号线 动量正在加速增强 买入入场
死叉(卖出) TSI线从上方下穿信号线 动量正在减速减弱 卖出离场

信号参考:

交叉位置 信号可靠性 说明
零轴上方金叉 强 上升趋势中的最佳加仓点
零轴下方金叉 中等 空头反弹,谨慎参与
零轴上方死叉 中等 多头回调,可波段减仓
零轴下方死叉 强 空头延续,应及时离场

3. 阈值突破------趋势强度确认

许多资深交易者使用**±25**作为额外阈值,用于确认趋势强度并过滤弱势信号:

TSI状态 趋势含义 操作策略
TSI > +25 强劲多头趋势,上行动能充沛 趋势强劲,顺势持仓
TSI < -25 强劲空头趋势,下行动力显著 空头主导,顺势做空
TSI在±25之间 正常震荡范围 谨慎操作,关注突破

4. 背离信号------最强反转预警

TSI与价格走势的背离是最可靠的反转预警信号:

背离类型 价格表现 TSI表现 信号含义
顶背离 价格创出新高 TSI未能创出新高(形成更低高点) 上涨动能衰竭,卖出信号
底背离 价格创出新低 TSI未能创出新低(形成更高低点) 下跌动能减弱,买入信号

背离信号的形成逻辑:

  • 多头背离:价格创新低但TSI形成更高低点,表明下行动能减弱,空头力量衰退,可能出现反转上涨
  • 空头背离:价格创新高但TSI形成更低高点,表明上行动能减弱,多头力量下降,趋势可能见顶

5. 趋势追踪------顺势持仓策略

TSI在趋势行情中可作为持仓依据:

TSI特征 市场含义 操作策略
TSI > 0 且持续在信号线上方 多头动量持续增强 坚定持股,不宜轻易离场
TSI < 0 且持续在信号线下方 空头动量持续增强 持币观望,不宜抄底
TSI长时间在0上方/下方稳定 趋势行情而非震荡 顺势交易,避免逆势操作

实用框架:若TSI长期在0上方,多头方向的交易想法通常更符合动量;若TSI长期在0下方,空头方向的交易想法通常更符合动量。

6. 多指标配合策略

TSI在单一使用时可能产生假信号,强烈建议与其他指标配合:

配合指标 策略逻辑 效果
RSI 验证超买超卖状态 两个指标信号共振时可靠性更高
MACD 趋势方向双重确认 MACD确认大方向,TSI捕捉动量变化
布林带 价格位置确认 价格触及边界时用TSI验证突破有效性
成交量 验证资金流向 TSI信号伴随放量时可信度更高

7. 注意事项与局限性

使用TSI前需了解以下要点:

局限性 说明
滞后客观存在 双重平滑虽能降低噪音,但会延后拐点。TSI往往在行情已经启动后才给出确认
震荡市假信号 当价格横盘时,TSI可能频繁与信号线、零轴发生交叉,但缺乏后续延续
无统一超买超卖阈值 不像RSI有固定的70/30,TSI的"极值"需与该品种自身历史对比来判断
不能单独使用 TSI是趋势确认工具,而非完整的交易系统
背离并非精确择时工具 背离通常是提前预警,即使TSI走弱,价格仍可能继续延续趋势

适用场景总结:

适用场景 适用性 说明
趋势确认 最佳适用 验证当前趋势是否具备足够强度
超买超卖识别 适用 需结合历史数据自行设定阈值
背离交易 适用 平滑特性使背离更易识别
震荡市场 慎用 假信号较多,宜结合其他指标
短线交易 需调参 默认参数偏中长线,需优化

四、使用pandas_ta计算TSI(附示例代码)

1. pandas_ta中的TSI函数

pandas_ta库内置了TSI指标的完整实现,函数位于momentum模块中。

2. 函数完整参数

python 复制代码
pandas_ta.momentum.tsi(close, fast=None, slow=None, signal=None, scalar=None, mamode=None, drift=None, offset=None, **kwargs)

参数详解:

参数 类型 默认值 说明
close pd.Series 必需 收盘价序列
fast int 13 快速EMA周期(对第一次平滑结果再平滑)
slow int 25 慢速EMA周期(对价格变化第一次平滑)
signal int 13 信号线EMA周期
scalar float 100 放大倍数(转换为百分比)
mamode str "ema" 移动平均类型
drift int 1 价格变化步长
offset int 0 结果偏移周期数

返回值 :pd.DataFrame------包含两列:

  • TSI_{fast}_{slow}_{signal}_{scalar}:TSI主线
  • TSIs_{fast}_{slow}_{signal}_{scalar}:信号线

3. 示例代码

python 复制代码
import pandas as pd
import pandas_ta as ta
import numpy as np
import matplotlib.pyplot as plt

# ========== 第一步:准备数据 ==========
np.random.seed(42)
dates = pd.date_range(start='2022-01-01', end='2024-12-31', freq='D')
n = len(dates)

# 生成带趋势和周期波动的价格序列
trend = np.linspace(0, 45, n)
cycle = np.sin(np.linspace(0, 6 * np.pi, n)) * 15
noise = np.random.randn(n) * 3
price_series = 100 + trend + cycle + noise

# 添加趋势变化区间
price_series = price_series.astype(float)
for i in range(300, 450):
    price_series[i] = price_series[300] + (i-300) * 0.2
for i in range(450, 600):
    price_series[i] = price_series[450] - (i-450) * 0.15

df = pd.DataFrame(index=dates[:n])
df['close'] = price_series[:n]
df['high'] = df['close'] + np.abs(np.random.randn(n)) * 2 + 1
df['low'] = df['close'] - np.abs(np.random.randn(n)) * 2 - 1
df['volume'] = np.random.randint(1000000, 25000000, n)

print("=" * 60)
print("数据预览:")
print(df.head())
print("\n" + "=" * 60 + "\n")

# ========== 第二步:计算TSI(基础用法) ==========
# 使用默认参数 fast=13, slow=25, signal=13
tsi_df = ta.tsi(df['close'])

# 查看返回的DataFrame结构
print("TSI返回列名称:")
print(tsi_df.columns.tolist())
print("\n" + "=" * 60 + "\n")

# 将计算结果添加到原DataFrame
df['TSI'] = tsi_df.iloc[:, 0]      # TSI主线
df['TSIs'] = tsi_df.iloc[:, 1]    # 信号线

print("TSI计算结果(最近10行):")
print(df[['close', 'TSI', 'TSIs']].tail(10))
print("\n" + "=" * 60 + "\n")

# ========== 第三步:手动验证TSI计算 ==========
def manual_tsi(close, fast=13, slow=25, signal=13, scalar=100):
    """手动计算TSI验证pandas_ta结果"""
    # 计算价格变化
    pc = close.diff()
    
    # 计算绝对价格变化
    abs_pc = pc.abs()
    
    # 双重EMA计算
    ema_slow_pc = pc.ewm(span=slow, adjust=False).mean()
    ema_slow_abs = abs_pc.ewm(span=slow, adjust=False).mean()
    
    smooth_momentum = ema_slow_pc.ewm(span=fast, adjust=False).mean()
    smooth_abs_momentum = ema_slow_abs.ewm(span=fast, adjust=False).mean()
    
    # 计算TSI
    tsi = scalar * smooth_momentum / smooth_abs_momentum
    tsi = tsi.fillna(0)
    
    # 计算信号线
    signal_line = tsi.ewm(span=signal, adjust=False).mean()
    
    return tsi, signal_line

df['TSI_manual'], df['TSIs_manual'] = manual_tsi(df['close'])

# 验证一致性
diff_tsi = (df['TSI'] - df['TSI_manual']).abs().max()
diff_signal = (df['TSIs'] - df['TSIs_manual']).abs().max()
print(f"TSI主线手动验证最大差异:{diff_tsi:.10f}")
print(f"信号线手动验证最大差异:{diff_signal:.10f}")
print("\n" + "=" * 60 + "\n")

# ========== 第四步:不同参数的TSI对比 ==========
# 标准参数 (13,25,13)
tsi_std = ta.tsi(df['close'])
df['TSI_std'] = tsi_std.iloc[:, 0]

# 短线参数 (9,21,9) - 更灵敏
tsi_fast = ta.tsi(df['close'], fast=9, slow=21, signal=9)
df['TSI_fast'] = tsi_fast.iloc[:, 0]

# 长线参数 (16,30,16) - 更平滑
tsi_slow = ta.tsi(df['close'], fast=16, slow=30, signal=16)
df['TSI_slow'] = tsi_slow.iloc[:, 0]

print("不同参数TSI对比(最近5行):")
print(df[['close', 'TSI_std', 'TSI_fast', 'TSI_slow']].tail())
print("\n" + "=" * 60 + "\n")

# ========== 第五步:零轴穿越信号 ==========
df['TSI_above_zero'] = df['TSI'] > 0
df['cross_above_zero'] = (df['TSI_above_zero'] == True) & (df['TSI_above_zero'].shift(1) == False)
df['cross_below_zero'] = (df['TSI_above_zero'] == False) & (df['TSI_above_zero'].shift(1) == True)

df['zero_signal'] = ''
df.loc[df['cross_above_zero'], 'zero_signal'] = '上穿零轴(买入信号)'
df.loc[df['cross_below_zero'], 'zero_signal'] = '下穿零轴(卖出信号)'

print("零轴穿越信号统计:")
print(f"上穿零轴数量:{df['cross_above_zero'].sum()}")
print(f"下穿零轴数量:{df['cross_below_zero'].sum()}")
print("\n" + "=" * 60 + "\n")

# ========== 第六步:信号线交叉信号 ==========
# 金叉:TSI上穿信号线
df['golden_cross'] = (df['TSI'] > df['TSIs']) & (df['TSI'].shift(1) <= df['TSIs'].shift(1))
# 死叉:TSI下穿信号线
df['death_cross'] = (df['TSI'] < df['TSIs']) & (df['TSI'].shift(1) >= df['TSIs'].shift(1))

# 区分交叉位置
df['golden_strong'] = df['golden_cross'] & (df['TSI'] > 0)
df['golden_weak'] = df['golden_cross'] & (df['TSI'] <= 0)
df['death_strong'] = df['death_cross'] & (df['TSI'] < 0)
df['death_weak'] = df['death_cross'] & (df['TSI'] >= 0)

df['trade_signal'] = ''
df.loc[df['golden_strong'], 'trade_signal'] = '强势金叉(买入信号)'
df.loc[df['golden_weak'], 'trade_signal'] = '弱势金叉(参考)'
df.loc[df['death_strong'], 'trade_signal'] = '强势死叉(卖出信号)'
df.loc[df['death_weak'], 'trade_signal'] = '弱势死叉(参考)'

print("信号线交叉信号统计:")
print(f"金叉(买入)数量:{df['golden_cross'].sum()}")
print(f"  其中强势金叉(TSI>0):{df['golden_strong'].sum()}")
print(f"死叉(卖出)数量:{df['death_cross'].sum()}")
print(f"  其中强势死叉(TSI<0):{df['death_strong'].sum()}")

print("\n最近15个交易信号:")
signals = df[df['trade_signal'] != ''].tail(15)
if not signals.empty:
    print(signals[['close', 'TSI', 'TSIs', 'trade_signal']])
print("\n" + "=" * 60 + "\n")

# ========== 第七步:阈值突破信号 ==========
THRESHOLD_HIGH = 25
THRESHOLD_LOW = -25

df['trend_signal'] = ''
df.loc[df['TSI'] > THRESHOLD_HIGH, 'trend_signal'] = '强势多头(动能充沛)'
df.loc[df['TSI'] < THRESHOLD_LOW, 'trend_signal'] = '强势空头(下行显著)'
df.loc[(df['TSI'] > 0) & (df['TSI'] <= THRESHOLD_HIGH), 'trend_signal'] = '正常多头区域'
df.loc[(df['TSI'] < 0) & (df['TSI'] >= THRESHOLD_LOW), 'trend_signal'] = '正常空头区域'

print("趋势强度分布统计:")
print(df['trend_signal'].value_counts())
print("\n" + "=" * 60 + "\n")

# ========== 第八步:背离检测(简化版) ==========
# 计算20日价格变化和TSI变化
df['price_change_20d'] = df['close'].diff(20)
df['tsi_change_20d'] = df['TSI'].diff(20)

# 检测潜在背离
df['potential_bearish_div'] = (df['price_change_20d'] > 0) & (df['tsi_change_20d'] < 0)
df['potential_bullish_div'] = (df['price_change_20d'] < 0) & (df['tsi_change_20d'] > 0)

print("潜在背离信号统计(20日尺度):")
print(f"潜在顶背离(价格涨TSI跌)数量:{df['potential_bearish_div'].sum()}")
print(f"潜在底背离(价格跌TSI涨)数量:{df['potential_bullish_div'].sum()}")
print("注:完整背离需结合局部高/低点分析,此处为方向对比")
print("\n" + "=" * 60 + "\n")

# ========== 第九步:策略回测(信号线交叉策略) ==========
# 策略:TSI上穿信号线买入,下穿信号线卖出
df['position'] = 0
in_position = False

for i in range(1, len(df)):
    if not in_position and df['golden_cross'].iloc[i]:
        df.loc[df.index[i], 'position'] = 1
        in_position = True
    elif in_position and df['death_cross'].iloc[i]:
        df.loc[df.index[i], 'position'] = 0
        in_position = False
    else:
        df.loc[df.index[i], 'position'] = df['position'].iloc[i-1]

# 计算收益
df['returns'] = df['close'].pct_change()
df['strategy_returns'] = df['position'].shift(1) * df['returns']

total_return_buyhold = (1 + df['returns']).prod() - 1
total_return_strategy = (1 + df['strategy_returns']).prod() - 1
win_rate = (df['strategy_returns'] > 0).sum() / (df['strategy_returns'] != 0).sum() if (df['strategy_returns'] != 0).sum() > 0 else 0

print("=" * 60)
print("策略绩效统计(TSI信号线交叉策略回测):")
print(f"买入持有策略总收益率:{total_return_buyhold:.2%}")
print(f"TSI交叉策略总收益率:{total_return_strategy:.2%}")
print(f"策略胜率:{win_rate:.2%}")
print("\n注意:此为简化回测,仅供参考")
print("=" * 60 + "\n")

# ========== 第十步:可视化 ==========
plt.figure(figsize=(14, 12))

# 子图1:价格走势
plt.subplot(2, 1, 1)
plt.plot(df.index[-200:], df['close'][-200:], label='Close Price', 
         linewidth=1.5, color='black')
plt.title('Price Chart (Last 200 days)', fontsize=14)
plt.ylabel('Price')
plt.legend()
plt.grid(True, alpha=0.3)

# 子图2:TSI指标
plt.subplot(2, 1, 2)
plt.plot(df.index[-200:], df['TSI'][-200:], label='TSI主线', 
         linewidth=1.5, color='blue')
plt.plot(df.index[-200:], df['TSIs'][-200:], label='信号线', 
         linewidth=1.5, color='orange', linestyle='--')
plt.axhline(y=0, color='red', linestyle='-', linewidth=1.5, label='零轴')
plt.axhline(y=25, color='purple', linestyle=':', linewidth=1, label='+25阈值')
plt.axhline(y=-25, color='purple', linestyle=':', linewidth=1, label='-25阈值')

# 填充零轴上下区域
plt.fill_between(df.index[-200:], 0, df['TSI'][-200:], 
                  alpha=0.1, color='green', where=(df['TSI'][-200:] > 0))
plt.fill_between(df.index[-200:], df['TSI'][-200:], 0, 
                  alpha=0.1, color='red', where=(df['TSI'][-200:] < 0))

# 标记交叉点
golden_signals = df[df['golden_cross']]
death_signals = df[df['death_cross']]
plt.scatter(golden_signals.index[-30:], golden_signals['TSI'][-30:], 
            color='green', marker='^', s=80, label='金叉(买入)', alpha=0.8)
plt.scatter(death_signals.index[-30:], death_signals['TSI'][-30:], 
            color='red', marker='v', s=80, label='死叉(卖出)', alpha=0.8)

plt.title('TSI(真实强度指数)- 双重平滑动量指标', fontsize=14)
plt.xlabel('Date')
plt.ylabel('TSI Value')
plt.legend(loc='upper left')
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

# ========== 第十一步:数据清洗提示 ==========
nan_count = df['TSI'].isna().sum()
print(f"\nTSI初始NaN数量:{nan_count}")
print("原因:TSI需要至少slow周期(默认25)个数据点才能完成双重平滑计算")
print("处理建议:df_clean = df.iloc[25:].copy()")
print("\n" + "=" * 60)
print("TSI使用提示:")
print("1. TSI值域通常为-100到+100,零轴是多空分界线")
print("2. 上穿零轴是买入信号,下穿零轴是卖出信号")
print("3. 金叉(TSI上穿信号线)是最常用的入场信号")
print("4. ±25阈值可用于确认强趋势、过滤弱势信号")
print("5. 背离是最可靠的趋势反转预警信号")
print("6. 建议与RSI、MACD等指标配合使用,提高信号可靠性")
print("7. TSI双重平滑有效过滤噪音,适合中长线趋势跟踪")
print("=" * 60)

五、总结

TSI(真实强度指数)是一种通过双重指数平滑技术处理价格动量的先进技术指标,其核心价值与定位如下:

维度 特点
核心创新 双重EMA平滑 + 动量归一化处理
核心公式 TSI = 100 × EMA(EMA(PC, slow), fast) / EMA(EMA( PC , slow), fast)
双线结构 TSI主线 + 信号线
三大核心信号 零轴穿越、信号线金叉死叉、顶底背离
阈值参考 ±25作为趋势强弱辅助判断
默认参数 fast=13, slow=25, signal=13
最佳应用场景 趋势确认、动量分析、中长线交易
主要局限 滞后性、震荡市假信号、无统一超买超卖阈值

实战使用三原则:

  1. 零轴定方向,信号线定时机:TSI在零轴上方时只考虑做多,等待TSI线上穿信号线的金叉时机入场;零轴下方只考虑做空,等待死叉信号
  2. 阈值确认强度:使用±25阈值区分强势趋势与普通波动,仅在TSI突破这些阈值时才确认趋势足够强劲,避免在弱势行情中过度交易
  3. 背离是最强预警:当价格与TSI出现背离时,往往是重要的趋势反转信号,应给予高度重视。但背离是预警而非精确入场指令,需等待价格确认

最后提醒 :TSI的最大价值在于其双重平滑特性------既保留了动量指标的灵敏度,又有效过滤了市场噪音。这使得TSI在趋势确认方面优于RSI,在信号平滑方面优于MACD。然而,这种平滑是以滞后为代价的。TSI的价值在于验证趋势、增强信心,而非预测价格。将TSI与RSI、布林带等工具结合使用,构建"趋势过滤+动量确认+价格验证"的完整交易系统,才是发挥其最大价值的正确方式。

相关推荐
Data analyse45612 分钟前
rrweb回放事件资源加载顺序重放校验
前端·人工智能·算法·机器学习·数据分析
昨夜见军贴061616 分钟前
原始采样记录数字化落地,IACheck AI 报告文档审核 Agent 实现监测文档校验自动化
人工智能·算法·自动化
微学AI30 分钟前
从历史曲线到提前预警:TimechoAI 的时序预测与业务落地实践
人工智能·算法
运维小文34 分钟前
apache nifi 2.90部署+运维手册
大数据·运维·数据分析·apache·nifi
言乐61 小时前
Python于LOLM针对伊泽瑞尔的数据分析
开发语言·python·机器学习·数据分析·pandas
不会就选b1 小时前
算法日常・每日刷题--<动态规划>26
算法·动态规划
CNSSIRD数据库1 小时前
中国省地县乡四级行政建制及区划代码-2025年版
大数据·数据库·数据分析·论文笔记
荆棘鸟智能1 小时前
虫情测报灯图像识别算法实践:小目标检测、粘连计数与飞虱细粒度分类
算法·目标检测·分类
Data analyse4561 小时前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
爱读书的小胖1 小时前
LeetCode 27. 移除元素(C)解题分析
数据结构·算法