ADXは,ブレイクアウト信号をフィルタリングするためにADXインジケーターを使用する短期間の取引戦略である.価格が上ボリンジャーバンドを超えて ADXが下がり,価格が下ボリンジャーバンドを超えて ADXが上昇するときに短く,価格が下ボリンジャーバンドを超えて ADXが上昇するときに長くなります.この戦略は,完全に自動化された取引のためにストップロスを設定し,自動的に利益を取ります.
この戦略の核心はブレイクアウト信号のためにボリンジャーバンドを使用している.ボリンジャーバンドの上下帯は価格の2つの標準偏差を表しているため,ブレイクアウトは通常,価格が強いトレンドに入っていることを意味する.さらに,ADXインジケーターは,偽ブレイクアウトを避けるためのフィルターとしてここに導入されている.ショート信号はADXが落ちているときにのみ考慮され,ロング信号はADXが上昇しているときにのみ考慮される.これは範囲期間中にいくつかのウィップソウをフィルタリングするのに役立ちます.
この戦略は,閉盤価格の33期を使用してボリンジャーバンドを計算する. 中間帯は33期間の単純な移動平均線であり,上部/下部帯は中部帯の上/下部で2つの標準偏差に置かれています. 価格が上部帯を下に閉盤時,8期 ADXが15期 ADXを下に閉盤時,戦略はショートシグナルを表示します. 価格が下部帯上から閉盤時,8期 ADXが15期 ADXの上に閉盤時,ロングシグナルを表示します. 出口は800ポイントの利益と400ポイントのストップ損失で設定されています.
トレンドとインパントフィルターを組み込んだブレークアウト戦略として,いくつかの利点があります:
この戦略にはいくつかのリスクもあります:
これらのリスクを軽減するために,BBパラメータを細かく調整して帯を狭め,ADX期間を調整して過濾を避け,シングルトレード損失を制御するためにストップ損失を減らすことができます. もちろん,これらの最適化は過適性を防ぐために前向きにテストする必要があります.
さらに最適化できる余地があります.
結論として,これはフィルターによるシンプルで実用的なブレークアウト戦略である.BBでトレンドを特定し,ADXでシグナルをフィルタリングすることで,範囲限定期間のノイズを回避し,トレンドの機会を一定程度把握することができる.さらなるテストと改善のための余地はまだ大きい.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Hizbullah XAUUSD Sniper", overlay=true) Price = close Length = input(33) Mult = input(2) Basis = sma(Price, Length) StdDev = Mult * stdev(Price, Length) Upper = Basis + StdDev Lower = Basis - StdDev ADX_Length = input(4) TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) SmoothedTrueRange = sma(TrueRange, ADX_Length) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length) SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length) DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100 SmoothedADX1 = ema(DX, input(8)) SmoothedADX2 = ema(DX, input(15)) Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2 Take_Profit = input(800) Stop_Loss = input(400) strategy.entry("ShortEntry", true, when = Condition1) strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)