
この戦略は,移動指数平均 ((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,平均線指標を組み合わせて,市場トレンドの転換点を効果的に判断できます.以下の利点があります.
この戦略にはいくつかのリスクがあります.
これらのリスクに対して,ADXと平均線パラメータを最適化し,ストップローズレベルを調整し,他の指標との組み合わせで確認信号などの方法によって改善することができます.
この戦略はさらに改善できる余地があります.
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