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、布林带等工具结合使用,构建"趋势过滤+动量确认+价格验证"的完整交易系统,才是发挥其最大价值的正确方式。

相关推荐
zwenqiyu1 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
Data-Miner2 小时前
大模型赋能金融贷款评估,颠覆传统风控方案全解析
人工智能·金融
不知名的老吴2 小时前
预测分析JMP Pro 18.0详细安装步骤及下载流程指南
数据分析
无心水2 小时前
27、私有化部署|PaddleOCR-Server 本地OCR服务搭建
金融·pdf·ocr·pdf解析·pdf抽取·pdf提取·ocr服务
万事大吉CC2 小时前
Python 笔试输入模板总结
python·算法
lihao lihao2 小时前
Linux信号
开发语言·c++·算法
大白话_NOI2 小时前
【洛谷 P2249】查找(深基 13. 例 1)+ 详细分析
c++·算法
吠品2 小时前
C++实现m行n列带边框的长方形输出
算法
智者知已应修善业3 小时前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机