Strategi ini mengesan perubahan dinamik penunjuk ADX untuk menangkap perubahan awal dalam trend pasaran untuk trend yang tepat pada masanya. Apabila ADX meningkat dengan cepat dari tahap yang rendah, ia menandakan trend terbentuk yang memberikan peluang besar untuk memasuki. Dengan bantuan purata bergerak, ia dapat menapis isyarat palsu dengan berkesan.
Inti strategi ini terletak pada menilai perkembangan trend berdasarkan perubahan dinamik penunjuk ADX. ADX rendah menandakan turun naik kecil dalam trend. Apabila ADX meningkat dengan cepat dari tahap yang rendah, ia menandakan trend terbentuk. Strategi ini menangkap kemunculan trend dengan memantau peningkatan tajam ADX.
Khususnya, isyarat kemasukan terdiri daripada faktor berikut:
Apabila semua syarat di atas dipenuhi, ia memberi isyarat bahawa trend menaik sedang terbentuk untuk pergi lama. Apabila harga jatuh di bawah purata bergerak, tutup kedudukan. Dua purata bergerak digunakan untuk menilai trend dengan lebih tepat.
Logik stop loss adalah sama: pergi pendek apabila ADX jatuh dengan cepat, dan menutup kedudukan apabila harga meningkat di atas purata bergerak.
Kelebihan terbesar di sini adalah penangkapan trend yang muncul tepat pada masanya. Cara konvensional melihat nilai ADX mutlak sering memerlukan pengesahan di atas 20 atau 25 untuk memanggil trend, dengan itu kehilangan masa kemasukan yang optimum. Strategi ini menangkap perkembangan awal trend dengan mengesan kenaikan ADX yang cepat.
Di samping itu, purata bergerak membantu menapis isyarat palsu dengan berkesan, meningkatkan kestabilan strategi.
Risiko terbesar berasal dari sifat ADX sendiri. Walaupun menangkap kenaikan pesat untuk mengurangkan kelewatan, masih ada beberapa kelewatan. Ini menyebabkan kehilangan beberapa pasaran yang berbalik dengan cepat.
Selain itu, ADX tidak menilai trend dengan sempurna dan tidak dapat dielakkan mendiagnosis mereka dari semasa ke semasa. purata bergerak menapis beberapa bunyi tetapi memerlukan pengoptimuman lanjut.
Terdapat ruang yang besar untuk mengoptimumkan strategi ini, terutamanya meningkatkan ketepatan ADX dalam menangkap trend. Kaedah seperti pembelajaran mesin boleh diterokai, model latihan untuk meramalkan pengedaran kebarangkalian berdasarkan perubahan ADX. Aspek lain seperti penyesuaian parameter, penunjuk tambahan dan lain-lain juga boleh diuji.
Strategi berikut trend ADX yang dinamik ini menangkap pergeseran trend dengan cepat dengan mengenal pasti kenaikan ADX yang tajam, dengan itu mengikuti trend dengan tepat pada masanya. Kelebihan terbesarnya adalah ketangkasan dalam masa, dengan berkesan merebut perkembangan trend awal. Sementara itu, risiko salah menilai tertentu tetap diperlukan untuk pengoptimuman dan ujian berterusan.
/*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)