トレンドブレイクアウトADXフィルター取引戦略


作成日: 2024-01-04 17:12:30 最終変更日: 2024-01-04 17:12:30
コピー: 0 クリック数: 924
1
フォロー
1621
フォロワー

トレンドブレイクアウトADXフィルター取引戦略

概要

この戦略は,ADX指標を使用して突破信号をフィルターするショートライン取引戦略である. ADXが下がっていると,Bollinger ブリンが軌道上を突破すると空き; Bollinger ブリンが軌道下を突破し,ADXが上昇しているときに,多めに. この戦略は,ストップとストップを同時に設定し,完全に自動取引する.

戦略原則

この戦略は,ボリンジャー・ブリン帯を主要な突破シグナルとして使用している.ブリン帯の下落は,価格の標準差の2倍を表しており,ブリン帯の破綻は,通常,価格が強いトレンドの段階に入ることを意味する.また,偽の突破を避けるために,この戦略は,ADX指標をフィルタリング条件として新たに追加している.ブリン帯の上落は,ADXが下がったときにのみ考慮され,ブリン帯の下落は,ADXが上がったときにのみ考慮される.

具体的には,この戦略は, 33 サイクルの長さの閉盘価格をブリン帯で計算する. ブリン帯の中央軌道線は閉盘価格の 33 サイクルのシンプル移動平均であり,上下軌道は中軌道上の下2 スタンダード差である.指標パラメータは,閉盘価格が上軌道に転落し, 8 サイクルの ADX が 15 サイクルの ADX よりも小さいときに空白に設定され,閉盘価格が下軌道に突破し, 8 サイクルの ADX が 15 サイクルの ADX よりも大きいときに空白に設定されます.平仓設定は800 ストップポイント,400 ストップポイントです.

優位分析

これは,トレンドと周波数指標のフィルタリング信号を組み合わせた突破策で,以下の利点があります.

  1. ブリン・バンドを使ってトレンドの突破点を判断することは,ほとんどのトレーダーの習慣と一致する.
  2. ADX条件のフィルターを追加することで,トレンドの揺れの間における偽突破による損失を減らすことができます.
  3. 戦略操作はシンプルで,理解しやすく,最適化できます.
  4. 自動設定のストップ・ロスト・ストップ,人工の介入を必要とせず,アルゴリズム取引に適しています.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. ブリン帯のパラメータを正しく設定しない場合,信号が頻度が高くなり,取引コストが増加する可能性があります.
  2. ADXの設定を間違えた場合,有効な信号の一部をフィルターする可能性があります.
  3. ストップダメージの距離が大きすぎると,単一の損失が拡大する.

これらのリスクを低減するために,ブリン帯のパラメータを調整してブリン帯の範囲を縮小し,ADX周期パラメータを調整して過度な回信号を回避し,止損距離を適切に縮小して単一損失を制御することができます.もちろん,これらの最適化は,過度な適合を避けるために,反テストで検証する必要があります.

最適化の方向

この戦略は,さらに改善できる余地があります.

  1. 異なる市場のデータをテストし,最適なパラメータの組み合わせを探します.
  2. 取引量,移動平均など,他の指標と組み合わせて信号をさらにフィルターすることができます.
  3. 機械学習の手法でパラメータを自動的に最適化できる.
  4. ダイナミック・ストップ・ダメージとストップ・ストップを考慮することができる.

要約する

この戦略は,全体として,シンプルで実用的な突破フィルタリング戦略である. ブリン帯によってトレンドを判断し,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)