Strategi Dagangan Trend Crossover ADX

Penulis:ChaoZhang, Tarikh: 2023-12-08 15:49:12
Tag:

img

Ringkasan

Strategi ini menggabungkan Indeks Pergerakan Arah (ADX), Plus Indikator Arah (DI +) dan purata bergerak cepat dan perlahan untuk menentukan arah pasaran dan tempoh pegangan.

Prinsip-prinsip

Logik teras strategi ini adalah untuk menjana isyarat beli apabila garis +DI melintasi di atas garis ADX dari bawah ke atas, dan menjana isyarat jual apabila garis +DI melintasi di bawah garis ADX dari atas ke bawah. Oleh itu, strategi ini bergantung pada persilangan antara DI dan ADX untuk menentukan trend pasaran dan titik pembalikan. Pada masa yang sama, hubungan antara purata bergerak cepat dan perlahan digunakan untuk menentukan trend pasaran secara keseluruhan. Isyarat perdagangan hanya akan dipertimbangkan apabila EMA cepat di atas EMA perlahan.

Khususnya, isyarat beli akan dicetuskan apabila syarat-syarat berikut dipenuhi:

  1. EMA pantas di atas EMA perlahan
  2. Garis +DI melintasi garis ADX ke atas
  3. Nilai ADX di bawah 30 ambang

Isyarat jual akan diaktifkan apabila syarat-syarat berikut dipenuhi:

  1. Nilai ADX melebihi 30 ambang
  2. Garis +DI melintasi garis ADX ke bawah

Strategi ini juga menggabungkan logik stop loss untuk keluar dari semua kedudukan apabila harga jatuh di bawah tahap stop loss.

Kelebihan

Strategi ini menggabungkan indikator DI, ADX dan purata bergerak untuk menentukan perubahan dalam trend pasaran dengan berkesan.

  1. Menggunakan persimpangan DI dan ADX untuk menentukan dengan tepat titik masuk dan keluar
  2. Sistem penapis EMA yang cepat dan perlahan untuk menentukan trend pasaran secara keseluruhan, mengelakkan perdagangan buruk
  3. Gunakan nilai ADX untuk menentukan kekuatan trend, hanya berdagang apabila trend lemah, mengelakkan pecah palsu
  4. Memasukkan mekanisme stop loss untuk mengawal risiko penurunan
  5. Syarat kemasukan yang ketat mengelakkan membeli bahagian atas dan menjual bahagian bawah
  6. Peraturan keluar yang jelas membolehkan menghentikan kerugian tepat pada masanya dan mengambil keuntungan

Risiko

Terdapat beberapa risiko yang perlu diperhatikan dengan strategi ini:

  1. Indikator ADX mempunyai kesan kelewatan, boleh terlepas masa terbaik untuk pembalikan harga
  2. Lebih banyak isyarat palsu boleh berlaku apabila turun naik pasaran tinggi
  3. Tetapan EMA pantas dan perlahan yang tidak betul boleh menyebabkan perdagangan hilang atau menapis isyarat yang sah
  4. Tahap Stop Loss yang ditetapkan terlalu luas gagal mengawal risiko dengan berkesan

Risiko ini boleh ditangani dengan mengoptimumkan ADX dan parameter purata bergerak, menyesuaikan tahap stop loss, menambah penapis untuk pengesahan dll.

Peluang Peningkatan

Terdapat ruang untuk penambahbaikan lanjut:

  1. Uji ADX tempoh panjang yang berbeza untuk mencari kombinasi yang optimum
  2. Tambah penunjuk lain seperti RSI, Bollinger Bands untuk pengesahan isyarat
  3. Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter dan peraturan secara automatik
  4. Mengatur secara dinamik paras stop loss untuk mengurangkan risiko peringkat akhir
  5. Membina model penilaian pelbagai faktor untuk menjadikan kriteria kemasukan dan keluar lebih kukuh

Kesimpulan

Secara amnya, strategi trend silang ADX ini agak stabil, mampu menangkap pembalikan dengan berkesan pada peringkat awal, tetapi kawalan risiko adalah penting. Mengoptimumkan parameter lebih lanjut, mematuhi peraturan kemasukan dengan ketat dan menghentikan kerugian boleh membawa kepada pulangan yang disesuaikan dengan risiko yang baik. Strategi ini sesuai untuk akaun jangka panjang yang memegang kedudukan jangka menengah hingga pendek.


/*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     

Lebih lanjut