
This is a trend-following trading strategy that combines the T3 Tilson moving average, Inverse Fisher Transform (IFT) of RSI, and ATR volatility indicator. The strategy creates a high-quality, low-noise trading system through the synergistic action of three powerful indicators. T3 Tilson serves as the main trend indicator, reacting smoothly to market direction changes while reducing noise; the Inverse Fisher Transform of RSI acts as a momentum filter, enhancing signal precision; and the ATR filter avoids entries during low volatility (sideways) periods, ensuring trades are only executed when market activity is sufficiently high.
The core logic of this strategy is based on the combination of three indicators:
T3 Tilson Moving Average: An improved moving average developed by Tim Tilson, combining six exponential moving averages (EMAs). The code calculates T3 Tilson through the following steps:
Inverse Fisher Transform of RSI:
ATR Filter:
Entry conditions are combined as follows: - Long Entry: T3 Tilson rising (current value greater than previous value) + IFT(RSI) greater than 0 (positive momentum) + ATR greater than threshold (sufficient volatility) - Short Entry: T3 Tilson falling (current value less than previous value) + IFT(RSI) less than 0 (negative momentum) + ATR greater than threshold (sufficient volatility)
Through deep analysis of the code, this strategy demonstrates the following significant advantages:
Noise Filtering: The T3 Tilson moving average significantly reduces price noise compared to ordinary moving averages, avoiding many false signals. It maintains smoothness while not being excessively lagging.
Multiple Confirmation Mechanism: The strategy requires the coordinated confirmation of three different indicators to trigger a trading signal, greatly improving signal quality. Trend direction (T3 Tilson), momentum state (IFT RSI), and volatility condition (ATR) must all be satisfied simultaneously.
Strong Adaptability: Multiple parameters in the code (such as t3Length, t3VFactor, rsiLength, etc.) can be adjusted according to different markets and timeframes, giving the strategy strong adaptability.
Clear Market State Identification: Through IFT(RSI) and ATR, the strategy can identify whether the market is in a clear trend or a low-volatility sideways phase, trading only under favorable conditions.
Risk Consistency: The strategy uses a fixed quantity of 1 unit, ensuring consistency in risk assessment and simplifying risk management.
High Profit Factor: According to the code comments, this strategy demonstrates a profit factor above 3 on index futures, which is an important indicator of trading strategy quality.
Despite being well-designed, this strategy still has the following potential risks:
Parameter Sensitivity: Multiple indicator parameters (such as T3 length, RSI length, ATR threshold, etc.) significantly impact strategy performance. Inappropriate parameter settings may lead to over-optimization or poor performance under different market conditions.
Trend Reversal Risk: Although T3 Tilson responds faster than simple moving averages, there may still be some lag during sudden market reversals, leading to losses during the initial phase of trend reversals.
Lack of Stop-Loss Mechanism: There are no explicit stop-loss or take-profit settings in the code, which may lead to expanded losses in adverse market conditions. The solution is to add appropriate stop-loss/take-profit logic.
Market Adaptation Issues: The code comments mention that the strategy may need modification for high-volatility markets like Bitcoin and Ethereum, indicating that the strategy is not a “one-size-fits-all” solution and needs adjustment according to market characteristics.
Low Win Rate Risk: The comments mention a win rate of only about 32% on XAUUSD, and while the risk-reward ratio is favorable, a low win rate may lead to consecutive losses, putting pressure on money management and trader psychology.
Volatility Dependence: Relying on the ATR threshold may miss opportunities in markets where volatility patterns suddenly change, or result in false entries during misleading volatility.
Based on deep analysis of the code, the strategy can be optimized in the following directions:
Dynamic Stop-Loss/Take-Profit: Add dynamic stop-loss and take-profit mechanisms based on ATR or other volatility indicators to adapt to different market conditions and protect profits. For example, set stop-loss at entry point minus N times ATR, and take-profit at entry point plus M times ATR.
Dynamic Position Management: Replace the fixed 1-unit trading quantity with dynamic position calculation based on account size, volatility, and risk parameters to optimize capital efficiency and risk control.
Multi-Timeframe Analysis: Introduce multi-timeframe confirmation, such as verifying the main trend direction in a larger timeframe and seeking entry points in a smaller timeframe, improving entry precision.
T3 Tilson Angle Filter: Calculate the angle or slope of T3 Tilson and only enter when the trend is strong enough (angle steep enough), further reducing false signals in weak trends.
Market-Specific Parameter Optimization: Create specific parameter sets for different trading instruments to adapt to the unique characteristics of various markets, as mentioned in the code comments about adjusting parameters for cryptocurrency markets.
Add Trading Time Filter: Add trading time filters to avoid low liquidity periods or known high-volatility but directionless market opening/closing periods.
Condition Weighting System: Implement a condition weighting system to adjust entry decisions based on the strength of various indicator signals, rather than simple boolean condition combinations, potentially improving strategy sensitivity.
This trading strategy combining T3 Tilson, Inverse Fisher Transform of RSI, and ATR represents a balanced and effective trend-following approach. The strategy significantly reduces noise through multiple filtering mechanisms and improves signal quality through coordinated confirmation of trend, momentum, and volatility. Its advantages lie in clear signals, fewer false signals, and strong adaptability, making it particularly suitable for markets such as index futures.
However, like any strategy, it has limitations and room for improvement in areas such as parameter sensitivity, trend reversal risk, and lack of stop-loss mechanisms. By adding dynamic stop-loss/take-profit, optimizing position management, implementing multi-timeframe analysis, and other enhancements, the strategy’s robustness and profitability can be further improved.
Overall, this is a well-designed “master version” strategy that, as stated in the code comments, provides a “clean, unoptimized, and stable core engine” that can serve as a foundation for building and testing enhanced versions. Whether professional traders or trading strategy researchers, anyone can start from this framework and make personalized adjustments and optimizations according to their own needs and market characteristics.
/*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))