トレンド追跡最適化ダブルT3インジケーター戦略

T3 TOTT EMA OTT RSI
作成日: 2025-01-17 14:29:51 最終変更日: 2025-01-17 14:29:51
コピー: 2 クリック数: 368
1
フォロー
1617
フォロワー

トレンド追跡最適化ダブルT3インジケーター戦略

概要

この戦略は、Tillson T3 インジケーターと Twin Optimized Trend Follower (TOTT) に基づいたトレンド フォロー システムです。モメンタムオシレーターのウィリアムズ%Rと組み合わせることで、取引シグナルの生成を最適化します。この戦略では、購入と販売のパラメータ設定を別々に使用することで、さまざまな市場状況に応じて感度を柔軟に調整し、戦略の適応性を向上させることができます。

戦略原則

この戦略は、次の 3 つの中核要素で構成されています。

  1. Tillson T3 インジケーター - これは、複数の EMA に重み付けすることでより滑らかなトレンド ラインを生成する最適化された指数移動平均 (EMA) バリアントです。
  2. ダブル最適化トレンドトラッカー (TOTT) - 価格アクションとボラティリティ係数を適応的に調整し、それぞれ買い条件と売り条件の上限と下限を計算するトレンド追跡ツール。
  3. ウィリアムズ %R インジケーター - 買われすぎと売られすぎの状態を識別するために使用されるモメンタム オシレーター。

取引シグナル生成ロジック:

  • 購入条件: T3 ラインが TOTT トラックの上部を突破し、ウィリアムズ %R が -20 (売られすぎ) を超える場合
  • 売り条件: T3ラインがTOTTの下限を下回り、ウィリアムズ%Rが-70より大きい場合

戦略的優位性

  1. 強力な信号安定性 - T3指標の複数の平滑化処理により、誤ったブレイクスルーのリスクが効果的に低減されます。
  2. 優れた適応性 - 買いパラメータと売りパラメータを分離することで、さまざまな市場状況に合わせて個別に最適化できます。
  3. リスク管理の改善 - トランザクションの信頼性を向上させるために、Williams %R を二次確認として統合します。
  4. 明確な視覚化 - この戦略は、分析と判断を容易にするための包括的なチャート視覚化サポートを提供します。

戦略リスク

  1. トレンド反転の遅れ - T3インジケーターの複数の平滑化により遅延信号が発生する可能性があります
  2. 不安定な市場には適していません - 横ばい取引中に取引シグナルが多すぎる可能性があります
  3. 高いパラメータ感度 - さまざまな市場環境に合わせてパラメータを頻繁に調整する必要がある

リスク管理の提案:

  • ストップロスメカニズムの導入
  • 取引量の制限を設定する
  • トレンド確認フィルターを追加しました

戦略最適化の方向性

  1. 動的パラメータ最適化 - 適応型パラメータ調整メカニズムの開発
  2. 市場コンテキスト認識の向上 - トレンド強度指標の導入
  3. リスク管理の改善 - 動的なストップロスとテイクプロフィットの追加
  4. 強化されたシグナルフィルタリング - 確認のためにより多くのテクニカル指標を統合

要約する

これは、完全な構造と明確なロジックを備えたトレンド追従戦略です。 T3 インジケーターと TOTT を組み合わせ、Williams %R でフィルタリングすることで、トレンド市場で優れたパフォーマンスを発揮します。ある程度の遅れはあるものの、この戦略はパラメータの最適化とリスク管理の改善を通じて、優れた実用価値と拡張の余地を持っています。

ストラテジーソースコード
/*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")