ADXクロスオーバー取引戦略


作成日: 2023-12-08 15:49:12 最終変更日: 2023-12-08 15:49:12
コピー: 0 クリック数: 961
1
フォロー
1621
フォロワー

ADXクロスオーバー取引戦略

概要

この戦略は,移動指数平均 ((ADX) の指標と上向き運動指数 ((DI+) の使用を組み合わせて,市場の方向とトレンドを判断するための根拠を提供し,同時に,取引の方向と持久時間を決定するために,高速と遅い移動平均を使用する.これは,トレンドフォロー型の取引戦略に属します.この戦略は,中短線の逆転点を効果的に捕捉し,低波動率と傾向が顕著な市場で優れたパフォーマンスを発揮します.

原則

この戦略の核心的な論理は,+DI線が下方からADXを突破すると買入信号が生み出され,+DI線が上方から下方からADXを突破すると売出信号が生み出されることである.したがって,この戦略は,DIとADXの指標の間の交差点を頼りにして市場トレンドと逆転点を判断する.一方,快速・均等線の関係は,全体的な市場トレンドを判断するために用いられ,快速EMAが遅いEMAより高い場合にのみ取引信号を生成することを考慮する.

特定の条件を満たす場合,購入シグナルが発信されます. 1 速いEMAは遅いEMAよりも高い 2 ,+DI線は下からADX線を突破する 3 ADX値が30未満の値レベル

販売信号は,以下の条件を満たす場合に発信されます. 1,ADX値が30以上の値レベル 2 ,+DI線は上から下へと落ち ADX線

この戦略には,ストップ・ロジックが加えられ,ストップ・価格を下回るとすべてのポジションを退出する.

利点

この戦略はDI,ADX,平均線指標を組み合わせて,市場トレンドの転換点を効果的に判断できます.以下の利点があります.

  1. DIとADXの指標を使ってトレンドの逆転信号を判断し,入場と出場の位置を正確に位置付け
  2. EMAのフィルタリングシステムにより,大きなトレンドを判断し,誤った取引を回避できます.
  3. ADX値でトレンドを判断し,トレンドが弱かったときにのみ取引し,偽の突破リスクを回避する
  4. ダウンリスクのコントロールに Stop Loss メカニズムの加入
  5. アギリで,入場条件が厳格で,買い上げや売り上げのリスクを避ける.
  6. 出場条件は明快で,止損と停止は間に合った.

リスク

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

  1. ADXは遅滞しており,価格の逆転の最適なタイミングを逃している可能性がある
  2. ADXとDIの指標は,市場の揺れが大きいときに,より多くの誤信号を生成します.
  3. 遅い平均線が正しく設定されていない場合,取引の機会を逃したり,誤ったフィルタリング信号を引き起こす可能性があります.
  4. ストップ・ロスの設定は過度に緩やかであり,リスクを効果的にコントロールできない.

これらのリスクに対して,ADXと平均線パラメータを最適化し,ストップローズレベルを調整し,他の指標との組み合わせで確認信号などの方法によって改善することができます.

最適化の方向

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

  1. ADXの長さの周期をテストし,最適なパラメータの組み合わせを探します.
  2. RSI,ブリン帯など,他の指標を追加して取引シグナルを確認できます.
  3. 機械学習アルゴリズムに基づく最適化パラメータの組み合わせと取引ルールを自動化できます.
  4. ストップレベルを動的に調整することで,ストップオフのリスクを調整できます.
  5. 多要素のスコアモデルが作られ,入場と出場のルールがより堅牢になります.

要約する

ADXのクロストレンド戦略は,全体的に比較して安定しており,波動の前期に反転スペースを効果的に捕捉することができるが,リスク管理に注意する必要がある.さらに最適化パラメータ設定,厳格な入場・止損ルールなどの方法によって,リスク調整後のより良い収益を得ることができる.この戦略は,長線を保有する中短線取引口座に適用される.

ストラテジーソースコード
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00


strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1)   //


TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
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


SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange

SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)

fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)




//long condition
longCondition=  ADX < threshold  and crossover(DIPlus,ADX)  and fastEmaVal > slowEmaVal


barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ADXLE", long=true,  when= longCondition  and strategy.position_size<1) 

barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)



//Add
strategy.entry(id="ADXLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ADXLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss


//exit condition
exitCondition=  ADX > threshold  and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll",    qty=strategy.position_size ,   when= exitCondition)   //close all