多指标组合趋势跟踪与过滤交易策略

T3 Tilson IFT RSI ATR
创建日期: 2025-07-07 16:01:07 最后修改: 2025-07-07 16:01:07
复制: 2 点击次数: 249
avatar of ianzeng123 ianzeng123
2
关注
319
关注者

多指标组合趋势跟踪与过滤交易策略 多指标组合趋势跟踪与过滤交易策略

概述

这是一个结合了T3 Tilson移动平均线、RSI的逆Fisher变换(IFT)和ATR波动率指标的趋势跟踪交易策略。策略通过三个强大指标的协同作用,创建了一个高质量、低噪声的交易系统。T3 Tilson作为主要趋势指标,平滑地反应市场方向变化并减少噪声;RSI的逆Fisher变换作为动量过滤器,提高信号精度;ATR过滤器则避免在低波动率(横盘)期间入场,确保市场活跃度足够高时才执行交易。

策略原理

该策略核心逻辑基于三个指标的组合条件:

  1. T3 Tilson移动平均线:这是一种改进的移动平均线,由Tim Tilson开发,结合了六重指数移动平均线(EMA)的计算。代码中使用了以下步骤计算T3 Tilson:

    • 首先计算一系列嵌套的EMA:e1到e6
    • 然后应用特定的权重系数(c1到c4)来组合这些EMA
    • 最终得到的T3 Tilson曲线既平滑又对价格变化反应灵敏
  2. RSI的逆Fisher变换(IFT)

    • 首先计算标准RSI(相对强弱指标)
    • 然后对RSI-50进行归一化处理(乘以0.1)
    • 最后应用逆Fisher变换公式,将值范围压缩到-1和+1之间
    • 这种变换使动量信号更加清晰,减少假信号
  3. ATR过滤器

    • 计算平均真实范围(ATR),衡量市场波动性
    • 设置最小阈值,确保只在市场有足够活跃度时交易

入场条件组合如下: - 多头入场:T3 Tilson上升(当前值大于前一个值) + IFT(RSI)大于0(正动量) + ATR大于阈值(足够波动性) - 空头入场:T3 Tilson下降(当前值小于前一个值) + IFT(RSI)小于0(负动量) + ATR大于阈值(足够波动性)

策略优势

通过深入分析代码,该策略展现出以下显著优势:

  1. 噪声过滤:T3 Tilson移动平均线与普通移动平均线相比,大幅减少了价格噪声,避免了许多假信号。它既保持平滑特性,又不会过度滞后。

  2. 多重确认机制:策略要求三个不同指标的协同确认才会触发交易信号,这大大提高了信号质量。趋势方向(T3 Tilson)、动量状态(IFT RSI)和波动性条件(ATR)必须同时满足。

  3. 适应性强:代码中的多个参数(如t3Length、t3VFactor、rsiLength等)都可以根据不同市场和时间框架进行调整,使策略具有很强的适应性。

  4. 明确的市场状态识别:通过IFT(RSI)和ATR,策略能够识别市场是处于明确趋势中还是低波动横盘阶段,只在有利条件下交易。

  5. 风险一致性:策略使用固定的1单位交易量,确保风险评估的一致性,简化了风险管理。

  6. 高利润因子:据代码注释显示,该策略在指数期货上表现出高于3的利润因子,这是交易策略质量的重要指标。

策略风险

尽管该策略设计精良,但仍存在以下潜在风险:

  1. 参数敏感性:多个指标参数(如T3长度、RSI长度、ATR阈值等)的设置对策略性能有显著影响。不适当的参数设置可能导致过度优化或在不同市场条件下表现不佳。

  2. 趋势反转风险:尽管T3 Tilson比简单移动平均线反应更快,但在突然的市场反转时,仍可能存在一定滞后,导致在趋势初期反转时出现亏损。

  3. 缺乏止损机制:代码中没有明确的止损或止盈设置,这可能导致在不利行情中损失扩大。解决方法是添加适当的止损/止盈逻辑。

  4. 不同市场适应性问题:代码注释提到该策略在比特币和以太坊等高波动性市场可能需要修改,表明策略不是”一刀切”的解决方案,需要根据市场特性调整。

  5. 低胜率风险:注释中提到在XAUUSD上胜率仅约32%,虽然风险回报比有利,但低胜率可能会导致连续亏损,对资金管理和交易者心理造成压力。

  6. 波动性依赖:依赖ATR阈值可能在波动性模式突然变化的市场中错过机会,或在虚假波动中错误入场。

策略优化方向

基于对代码的深入分析,可以从以下几个方向优化该策略:

  1. 动态止损/止盈:添加基于ATR或其他波动率指标的动态止损和止盈机制,以适应不同市场条件并保护利润。例如,可以设置止损为入场点减去N倍ATR,止盈为入场点加上M倍ATR。

  2. 动态仓位管理:替换固定的1单位交易量,采用基于账户规模、波动率和风险参数的动态仓位计算,以优化资金利用效率和风险控制。

  3. 多时间框架分析:引入多时间框架确认,例如在较大时间框架验证主趋势方向,在较小时间框架寻找入场点,提高入场精度。

  4. T3 Tilson角度过滤:计算T3 Tilson的角度或斜率,只在趋势足够强(角度足够陡)时才入场,进一步减少弱趋势中的假信号。

  5. 市场特定参数优化:为不同的交易品种创建特定参数集,以适应各种市场的独特特性,如代码注释中提到的为加密货币市场调整参数。

  6. 增加交易时间过滤:添加交易时间过滤器,避开低流动性时段或已知的高波动但无方向性的市场开盘/收盘时段。

  7. 条件权重系统:实施条件权重系统,根据各指标信号强度调整入场决策,而不是简单的布尔条件组合,可能提高策略灵敏度。

总结

这个结合T3 Tilson、RSI的逆Fisher变换和ATR的交易策略代表了一种平衡而有效的趋势跟踪方法。策略通过多重过滤机制显著降低了噪声,通过趋势、动量和波动性的协同确认提高了信号质量。其优势在于信号清晰、假信号少、适应性强,尤其适合指数期货等市场。

然而,任何策略都存在局限性,该策略在参数敏感性、趋势反转风险和缺乏止损机制等方面仍有改进空间。通过添加动态止损/止盈、优化仓位管理、实施多时间框架分析等方式,可以进一步增强策略的稳健性和盈利能力。

总体而言,这是一个设计良好的”主版本”策略,如代码注释所述,它提供了一个”干净、未优化和稳定的核心引擎”,可以作为构建和测试增强版本的基础。无论是专业交易者还是交易策略研究者,都可以从这个框架出发,根据自己的需求和市场特点进行个性化调整和优化。

策略源码
/*backtest
start: 2024-07-06 00:00:00
end: 2025-07-05 10:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=5
strategy("VDN1 - T3 Tilson + IFT + ATR", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// === INPUTS ===
t3Length     = input.int(8, title="T3 Tilson Length")
t3VFactor    = input.float(0.7, title="T3 Volume Factor", step=0.1)
rsiLength    = input.int(14, title="RSI Length")
atrLength    = input.int(14, title="ATR Length")
atrThreshold = input.float(0.5, title="Min ATR Eşiği", step=0.1)

// === T3 Tilson Hesaplama ===
e1 = ta.ema(close, t3Length)
e2 = ta.ema(e1, t3Length)
e3 = ta.ema(e2, t3Length)
e4 = ta.ema(e3, t3Length)
e5 = ta.ema(e4, t3Length)
e6 = ta.ema(e5, t3Length)

c1 = -t3VFactor * t3VFactor * t3VFactor
c2 = 3 * t3VFactor * t3VFactor + 3 * t3VFactor * t3VFactor * t3VFactor
c3 = -6 * t3VFactor * t3VFactor - 3 * t3VFactor - 3 * t3VFactor * t3VFactor * t3VFactor
c4 = 1 + 3 * t3VFactor + t3VFactor * t3VFactor * t3VFactor + 3 * t3VFactor * t3VFactor

t3Tilson = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3

// === IFT RSI ===
rsi = ta.rsi(close, rsiLength)
value = 0.1 * (rsi - 50)
expValue = (math.exp(2 * value) - 1) / (math.exp(2 * value) + 1)
ift = expValue

// === ATR ===
atr = ta.atr(atrLength)

// === Koşullar ===
longCond = t3Tilson > t3Tilson[1] and ift > 0 and atr > atrThreshold
shortCond = t3Tilson < t3Tilson[1] and ift < 0 and atr > atrThreshold

// === Girişler ===
if (longCond)
    strategy.entry("Long", strategy.long, qty=1)

if (shortCond)
    strategy.entry("Short", strategy.short, qty=1)

// === Çizimler ===
plot(t3Tilson, title="T3 Tilson", color=color.orange)
hline(0, 'Zero Line', color=color.gray)
plot(ift, title="IFT RSI", color=color.new(color.blue, 0))
plot(atr, title="ATR", color=color.new(color.red, 0))
相关推荐