Strategi mengikut arah aliran berdasarkan stop loss Chande Kroll dan penapis ADX


Tarikh penciptaan: 2023-11-06 14:52:27 Akhirnya diubah suai: 2023-11-06 14:52:27
Salin: 0 Bilangan klik: 981
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berdasarkan stop loss Chande Kroll dan penapis ADX

Gambaran keseluruhan

Strategi ini menggabungkan indikator Stop Loss Chande Kroll dan Indeks Trend Rata-rata (ADX) untuk mewujudkan strategi trend yang agak mudah. Stop Loss Chande Kroll digunakan untuk menghasilkan isyarat masuk untuk kedudukan panjang dan pendek, dan ADX digunakan untuk menyaring keadaan pasaran yang tidak mempunyai trend yang jelas, untuk mengelakkan kejutan pasaran yang tidak berorientasikan yang menyebabkan stop loss berulang kali.

Prinsip Strategi

Strategi ini pertama-tama mengira garis panjang stop_long dan garis pendek stop_short dari Chande Kroll stop. Garis panjang dihitung dari harga tertinggi dalam tempoh p yang lalu, dan garis pendek dari harga terendah dalam tempoh p yang lalu. Kemudian menggunakan titik tertinggi dan terendah dari garis pendek panjang dalam tempoh q yang lalu sebagai garis berhenti pendek semasa.

Apabila harga penutupan melewati garis pendek stop_short, menghasilkan signal buat banyak; apabila harga penutupan melewati garis panjang stop_long, menghasilkan signal buat kosong.

Selain itu, strategi untuk memasukkan indikator ADX untuk menilai trend kuat atau lemah. Isyarat hentian hanya akan dicetuskan apabila ADX lebih besar daripada nilai terendah. Ini dapat menyaring laporan hentian yang salah ketika berputar.

Kelebihan Strategik

Strategi ini menggabungkan kelebihan indikator trend dan indikator stop loss untuk menangkap perubahan trend tepat pada masanya dan mengelakkan whip saw di pasaran tanpa arah. Pengoptimuman parameter untuk stop loss Chande Kroll dapat meratakan gelombang filter dan memastikan stop loss hanya berlaku apabila trend berubah.

Risiko Strategik

Tetapan parameter ADX yang tidak betul mungkin kehilangan peluang permulaan trend. Jika ADX terhad ditetapkan terlalu tinggi, peluang masuk mungkin hilang kerana nilai ADX terlalu rendah pada peringkat permulaan trend.

Terlalu dekat dengan titik berhenti juga boleh menyebabkan kedudukan strategi dibuka dan ditutup dengan kerap. Ini akan meningkatkan kos perdagangan dan kos slip.

Pengoptimuman Strategi

Anda boleh mempertimbangkan untuk membenarkan isyarat hentian hanya apabila ADX melepasi nilai terendah tertentu, yang dapat meningkatkan kebolehpercayaan masa masuk. Anda juga boleh membuat penilaian gabungan dengan penunjuk trend lain, seperti menggabungkan nilai ADX dengan kemerosotan EMA.

Barisan hentian juga boleh dipertimbangkan untuk disesuaikan secara dinamik mengikut ATR, meluaskan ruang hentian apabila turun naik pasaran meningkat, untuk mengelakkan terlalu sensitif. Atau ia boleh digabungkan dengan penunjuk bantuan untuk menilai kecenderungan kuat atau lemah, menyesuaikan barisan hentian secara dinamik.

ringkaskan

Strategi ini mengintegrasikan kelebihan Stop Loss Chande Kroll dan indikator ADX, untuk mewujudkan strategi trend-following yang agak mudah dan praktikal. Dengan pengoptimuman parameter, anda boleh meningkatkan lagi kestabilan dan keuntungan strategi. Tetapi perlu berhati-hati untuk mengelakkan risiko yang disebabkan oleh terlalu sensitif dan penapis ADX terlalu longgar.

Kod sumber strategi
/*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)