Tren ADX yang Dinamis Meningkat Mengikuti Strategi

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

img

Gambaran umum

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.

Logika Strategi

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:

  1. ADX melintasi batas (misalnya 10)
  2. ADX naik dengan cepat ke atas
  3. Harga melintasi di atas rata-rata bergerak sederhana atau eksponensial

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.

Analisis Keuntungan

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.

Analisis Risiko dan Optimalisasi

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.

Kesimpulan

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)

Lebih banyak