ADX Disaring Chande Kroll Stop Loss Trend Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-06 14:52:27
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk stop loss Chande Kroll dan penunjuk Indeks Pergerakan Arah Purata (ADX) untuk melaksanakan strategi trend berikut yang agak mudah.

Logika Strategi

Strategi ini mula-mula mengira long stop long dan short stop short line dari Chande Kroll stop loss. Baris panjang dikira berdasarkan harga tertinggi dalam tempoh p yang lalu. Baris pendek dikira berdasarkan harga terendah dalam tempoh p yang lalu. Titik tertinggi garis panjang dan pendek dalam tempoh q yang lalu kemudian digunakan sebagai garis stop loss panjang dan pendek semasa. Ini menapis turun naik harga jangka pendek dan hanya mencetuskan stop loss pada titik pembalikan trend.

Apabila harga penutupan melintasi di atas stop_short baris pendek, isyarat panjang dihasilkan. Apabila harga penutupan melintasi di bawah stop_long baris panjang, isyarat pendek dihasilkan.

Selain itu, penunjuk ADX digunakan untuk menilai kekuatan trend. Hanya apabila ADX lebih besar daripada ambang, isyarat stop loss akan mencetuskan kemasukan. Ini menapis whipsaw bukan arah dalam penyatuan.

Kelebihan

Strategi ini menggabungkan kelebihan penunjuk trend dan penunjuk stop loss. Ia boleh menangkap pembalikan trend tepat pada masanya sambil mengelakkan whipsaws di pasaran bukan arah. Pengoptimuman parameter stop loss Chande Kroll dapat memudahkan penapisan dan memastikan stop loss hanya pada titik pembalikan trend. Indikator ADX memastikan kemasukan hanya apabila trend itu penting, mengelakkan whipsaws stop loss semasa penyatuan pasaran.

Risiko

Tetapan parameter ADX yang tidak betul mungkin terlepas peluang pada awal trend. Jika ambang ADX ditetapkan terlalu tinggi, peluang masuk mungkin terlepas pada awal trend apabila nilai ADX masih rendah.

Titik stop loss yang terlalu dekat juga boleh menyebabkan kerap membuka dan menutup kedudukan strategi. Ini akan meningkatkan kos perdagangan dan seluncur. Titik stop loss perlu ditetapkan dengan munasabah untuk membolehkan beberapa ruang untuk trend.

Pengoptimuman

Pertimbangkan untuk membenarkan isyarat stop loss untuk mencetuskan hanya apabila ADX memecahkan di atas ambang. Ini boleh meningkatkan kebolehpercayaan masa kemasukan. Penunjuk trend lain juga boleh digabungkan untuk keadaan konjungtif, seperti menggabungkan nilai ADX dengan kemiringan EMA.

Garis stop loss juga boleh diselaraskan secara dinamik berdasarkan ATR, yang membolehkan berhenti yang lebih luas apabila turun naik pasaran meningkat untuk mengelakkan sensitiviti yang berlebihan.

Ringkasan

Strategi ini mengintegrasikan kekuatan stop loss Chande Kroll dan penunjuk ADX untuk membina strategi trend yang agak mudah dan praktikal. Melalui pengoptimuman parameter, kestabilan dan keuntungan strategi dapat ditingkatkan lagi. Tetapi risiko sensitiviti stop loss yang berlebihan dan penapisan ADX yang tidak mencukupi perlu diperhatikan.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.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 = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

Lebih lanjut