Cette stratégie est un système de suivi des tendances basé sur l'indicateur Tillson T3 et le Twin Optimized Trend Tracker (TOTT). Elle optimise la génération de signaux commerciaux en incorporant l'oscillateur de momentum Williams %R. La stratégie utilise des paramètres d'achat et de vente séparés, permettant un ajustement flexible de la sensibilité pour différentes conditions du marché.
La stratégie est composée de trois éléments essentiels: Indicateur Tillson T3 - Une variante optimisée de la moyenne mobile exponentielle (EMA) qui produit une ligne de tendance plus lisse grâce à plusieurs calculs pondérés de l'EMA. Twin Optimized Trend Tracker (TOTT) - Un outil de suivi de tendance adaptatif qui s'ajuste en fonction de l'action des prix et du coefficient de volatilité, calculant les bandes supérieures et inférieures pour les conditions d'achat et de vente. Indicateur Williams %R - Oscillateur de dynamique utilisé pour identifier les conditions de surachat et de survente.
La logique de génération du signal: - Condition d'achat: lorsque la ligne T3 dépasse la bande supérieure de TOTT et que Williams % R est supérieure à -20 (survente) - Condition de vente: lorsque la ligne T3 traverse la bande inférieure de TOTT et que le Williams % R est supérieur à -70
Suggestions de contrôle des risques: - Mettre en œuvre des mécanismes de stop-loss - Définir des limites de volume de négociation - Ajouter des filtres de confirmation de tendance
Il s'agit d'une tendance bien structurée qui suit une stratégie avec une logique claire. Grâce à la combinaison de l'indicateur T3 et du TOTT, couplée au filtrage Williams %R, il se débrouille excellemment sur les marchés en tendance.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("FON60DK by leventsah", overlay=true) // Girdi AL t3_length = input.int(5, title="Tillson Per AL", minval=1) t3_opt = input.float(0.1, title="Tillson Opt AL", step=0.1, minval=0) tott_length = input.int(5, title="TOTT Per AL", minval=1) tott_opt = input.float(0.1, title="TOTT Opt AL", step=0.1, minval=0) tott_coeff = input.float(0.006, title="TOTT Coeff AL", step=0.001, minval=0) //GİRDİ SAT t3_lengthSAT = input.int(5, title="Tillson Per SAT", minval=1) t3_optSAT = input.float(0.1, title="Tillson Opt SAT", step=0.1, minval=0) tott_lengthSAT = input.int(5, title="TOTT Per SAT", minval=1) tott_opt_SAT = input.float(0.1, title="TOTT Opt SAT", step=0.1, minval=0) tott_coeff_SAT = input.float(0.006, title="TOTT Coeff SAT", step=0.001, minval=0) william_length = input.int(3, title="William %R Periyodu", minval=1) // Tillson T3 AL t3(src, length, opt) => k = 2 / (length + 1) ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) ema4 = ta.ema(ema3, length) c1 = -opt * opt * opt c2 = 3 * opt * opt + 3 * opt * opt * opt c3 = -6 * opt * opt - 3 * opt - 3 * opt * opt * opt c4 = 1 + 3 * opt + opt * opt * opt + 3 * opt * opt t3_val = c1 * ema4 + c2 * ema3 + c3 * ema2 + c4 * ema1 t3_val t3_value = t3(close, t3_length, t3_opt) t3_valueSAT = t3(close, t3_lengthSAT, t3_optSAT) // TOTT hesaplaması (Twin Optimized Trend Tracker) Var_Func(src, length) => valpha = 2 / (length + 1) vud1 = math.max(src - src[1], 0) vdd1 = math.max(src[1] - src, 0) vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = (vUD - vDD) / (vUD + vDD) var float VAR = na VAR := valpha * math.abs(vCMO) * src + (1 - valpha * math.abs(vCMO)) * nz(VAR[1], src) VAR VAR = Var_Func(close, tott_length) VAR_SAT = Var_Func(close, tott_lengthSAT) //LONG MAvg = VAR fark = MAvg * tott_opt * 0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir MT = dir == 1 ? longStop : shortStop OTT = MAvg > MT ? MT * (200 + tott_opt) / 200 : MT * (200 - tott_opt) / 200 OTTup = OTT * (1 + tott_coeff) OTTdn = OTT * (1 - tott_coeff) //CLOSE MAvgS = VAR_SAT farkS = MAvgS * tott_opt_SAT * 0.01 longStopS = MAvgS - farkS longStopPrevS = nz(longStopS[1], longStopS) longStopS := MAvgS > longStopPrevS ? math.max(longStopS, longStopPrevS) : longStopS shortStopS = MAvgS + farkS shortStopPrevS = nz(shortStopS[1], shortStopS) shortStopS := MAvgS < shortStopPrevS ? math.min(shortStopS, shortStopPrevS) : shortStopS dirS = 1 dirS := nz(dirS[1], dirS) dirS := dirS == -1 and MAvgS > shortStopPrevS ? 1 : dirS == 1 and MAvgS < longStopPrevS ? -1 : dirS MTS = dirS == 1 ? longStopS : shortStopS OTTS = MAvgS > MTS ? MTS * (200 + tott_opt_SAT) / 200 : MTS * (200 - tott_opt_SAT) / 200 OTTupS = OTTS * (1 + tott_coeff_SAT) OTTdnS = OTTS * (1 - tott_coeff_SAT) // Calculation of Williams %R williamsR = -100 * (ta.highest(high, william_length) - close) / (ta.highest(high, william_length) - ta.lowest(low, william_length)) // Alım koşulu longCondition = (t3_value > OTTup) and (williamsR > -20) // Short koşulu (long pozisyonunu kapatmak için) shortCondition = (t3_valueSAT < OTTdnS) and (williamsR > -70) // Alım pozisyonu açma if (longCondition) strategy.entry("Long", strategy.long) // Short koşulu sağlandığında long pozisyonunu kapama if (shortCondition) strategy.close("Long") // Alım pozisyonu boyunca barları yeşil yapma barcolor(strategy.position_size > 0 ? color.green : na) // Grafikte göstergeleri çizme plot(t3_value, color=color.blue, linewidth=1, title="Tillson AL") plot(OTTup, color=color.green, linewidth=1, title="TOTT Up AL") plot(OTTdn, color=color.red, linewidth=1, title="TOTT Down AL") // Grafikte göstergeleri çizme plot(t3_valueSAT, color=color.blue, linewidth=1, title="Tillson SAT") plot(OTTupS, color=color.green, linewidth=1, title="TOTT Up SAT") plot(OTTdnS, color=color.red, linewidth=1, title="TOTT Down SAT")