Strategi ini melacak perubahan dinamis dari indikator ADX untuk menangkap pergeseran awal dalam tren pasar untuk mengikuti tren tepat waktu. Ketika ADX naik dengan cepat dari tingkat rendah, itu menandakan tren terbentuk yang menyajikan peluang besar untuk masuk. Dengan bantuan moving average, itu dapat menyaring sinyal palsu secara efektif.
Inti dari strategi ini terletak pada menilai perkembangan tren berdasarkan perubahan dinamis dari indikator ADX. ADX rendah menandakan fluktuasi kecil dalam tren. Ketika ADX naik dengan cepat dari tingkat rendah, itu menandakan tren sedang terbentuk. Strategi menangkap munculnya tren dengan memantau kenaikan tajam ADX.
Secara khusus, sinyal masuk terdiri dari faktor-faktor berikut:
Ketika semua kondisi di atas terpenuhi, itu menandakan tren naik terbentuk untuk pergi panjang. Ketika harga turun di bawah moving average, posisi ditutup. Dua moving average digunakan untuk menilai tren lebih tepat.
Logika stop loss mirip. pergi pendek ketika ADX turun dengan cepat, dan menutup posisi ketika harga naik di atas moving average.
Keuntungan terbesar di sini adalah penangkapan tepat waktu tren yang muncul. Cara konvensional untuk melihat nilai ADX absolut sering membutuhkan konfirmasi di atas 20 atau 25 untuk memanggil tren, sehingga kehilangan waktu masuk yang optimal. Strategi ini menangkap perkembangan awal tren dengan melacak kenaikan ADX yang cepat.
Selain itu, rata-rata bergerak membantu menyaring sinyal palsu secara efektif, meningkatkan stabilitas strategi.
Risiko terbesar berasal dari sifat yang tertinggal dari ADX itu sendiri. Meskipun menangkap kenaikan yang cepat untuk mengurangi keterlambatan, masih ada beberapa penundaan. Ini menyebabkan kehilangan beberapa pasar yang berbalik dengan cepat.
Selain itu, ADX tidak menilai tren dengan sempurna dan pasti salah mendiagnosa mereka dari waktu ke waktu.
Ada banyak ruang untuk mengoptimalkan strategi ini, terutama meningkatkan akurasi ADX dalam menangkap tren. Metode seperti pembelajaran mesin dapat dieksplorasi, model pelatihan untuk memprediksi distribusi probabilitas berdasarkan perubahan ADX. Aspek lain seperti penyesuaian parameter, indikator tambahan dll juga dapat diuji.
Strategi berikut tren ADX yang dinamis ini menangkap pergeseran tren dengan cepat dengan mengidentifikasi kenaikan ADX yang tajam, sehingga mengikuti tren secara tepat waktu. Keuntungan terbesarnya adalah kelincahan dalam waktu, secara efektif merebut perkembangan tren awal. Sementara itu, risiko salah penilaian tertentu tetap ada yang membutuhkan optimasi dan pengujian terus-menerus.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m 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/ // © dhilipthegreat //@version=4 //Rising ADX strategy strategy(title="Rising ADX strategy", overlay=false) adxlen = input(14, title="ADX Length", minval=1) threshold = input(10, title="threshold", minval=5) hline(threshold, color=color.black, linestyle=hline.style_dashed) atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen=input(20, title="Moving average 1 ",minval=1, maxval=50) avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen2=input(20, title="Moving average 2",minval=1, maxval=200) avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na //ADX&DI dilen = 14 dirmov(len,_high,_low,_tr) => up = change(_high) down = -change(_low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(_tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen,_high,_low,_tr) => [plus, minus] = dirmov(dilen,_high,_low,_tr) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [plus, minus] = dirmov(dilen,high,low,tr) sig = adx(dilen, adxlen,high,low,tr) prev_sig = adx(dilen, adxlen,high[1],low[1],tr) plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2) ////// longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2 barcolor(longCondition ? color.yellow: na) Long_side = input(true, "Long side") if Long_side strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1) exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2 strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2 barcolor(shortCondition ? color.gray: na) Short_side = input(true, "Short side") if Short_side strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1) sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2 strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all barcolor(strategy.position_size>1 ? color.lime: na) bgcolor(strategy.position_size>1 ? color.lime: na) barcolor(strategy.position_size<0 ? color.orange: na) bgcolor(strategy.position_size<0 ? color.orange: na)