
Strategi ini menggabungkan penggunaan purata indeks bergerak ((ADX) dan indeks pergerakan ke arah atas ((DI +) untuk menentukan arah dan trend pasaran, sambil menggunakan purata bergerak cepat dan perlahan untuk menentukan arah perdagangan dan masa memegang, termasuk dalam strategi perdagangan jenis trend. Strategi ini dapat menangkap titik balik garis pendek dengan berkesan dan berfungsi dengan baik di pasaran dengan kadar turun naik yang rendah dan trend yang jelas.
Logik teras strategi ini adalah bahawa ia menghasilkan isyarat beli apabila +DI garis menembusi ADX dari arah bawah, dan menghasilkan isyarat jual apabila +DI garis jatuh dari arah atas ke arah ADX. Oleh itu, strategi ini bergantung kepada persilangan antara indikator DI dan ADX untuk menentukan trend pasaran dan titik balik. Pada masa yang sama, hubungan garis laju dan rata digunakan untuk menentukan trend pasaran keseluruhan, dan hanya mempertimbangkan untuk menghasilkan isyarat perdagangan apabila EMA cepat lebih tinggi daripada EMA perlahan.
Secara khusus, isyarat beli akan dihantar apabila syarat-syarat berikut dipenuhi: 1 , EMA pantas lebih tinggi daripada EMA perlahan 2 , + DI line menembusi ADX line dari arah bawah 3. ADX di bawah 30
Sinyal jual beli berlaku apabila syarat berikut dipenuhi: 1 ADX melebihi 30 2 , + DI garis jatuh dari atas ke bawah ADX garis
Strategi ini juga menambah logik stop loss, yang akan keluar dari semua kedudukan apabila harga berada di bawah harga stop loss.
Strategi ini menggabungkan DI, ADX dan penunjuk garis rata-rata untuk menentukan titik perubahan trend pasaran. Ia mempunyai kelebihan berikut:
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Risiko ini boleh diperbaiki dengan mengoptimumkan parameter ADX dan garis rata-rata, menyesuaikan tahap stop loss, dan menggabungkan isyarat pengesahan indikator lain.
Strategi ini masih boleh dioptimumkan lagi:
Strategi trend silang ADX secara keseluruhan lebih stabil, mampu menangkap ruang reversal dengan berkesan pada awal turun naik, tetapi perlu berhati-hati untuk mengawal risiko. Dengan cara mengoptimumkan parameter yang lebih lanjut, peraturan masuk dan berhenti yang ketat, dan lain-lain, keuntungan yang disesuaikan dengan risiko yang lebih baik dapat diperoleh. Strategi ini sesuai untuk akaun perdagangan garis pendek yang memegang garis panjang.
/*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