Trend ADX Meningkat Dinamis Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-11 17:18:32
Tag:

img

Ringkasan

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.

Logika Strategi

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:

  1. ADX melebihi ambang (contohnya 10)
  2. ADX meningkat dengan cepat ke atas
  3. Harga melintasi di atas purata bergerak mudah atau eksponen

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.

Analisis Kelebihan

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.

Analisis Risiko dan Pengoptimuman

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.

Kesimpulan

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)

Lebih lanjut