Strategi ini menghasilkan sinyal perdagangan berdasarkan rentang volatilitas historis harga. Ini menghitung perbedaan antara harga tertinggi dan terendah selama periode tertentu, dan membentuk rentang volatilitas menggunakan rata-rata bergerak. Sinyal perdagangan dipicu ketika harga menembus pita atas atau bawah rentang.
Indikator inti adalah volatilitas historis harga.
Menghitung perbedaan antara harga tertinggi dan terendah selama N bar terakhir, disebut HL
Menghitung rata-rata harga tertinggi dan terendah di N bar, avg ((H, L)
Volatilitas = HL/avg ((H, L)
Di mana N adalah parameter
Setelah mendapatkan volatilitas, band dihitung sebagai:
Band atas = Penutupan saat ini + Penutupan saat ini * Volatilitas
Band bawah = Penutupan saat ini - Penutupan saat ini * Volatilitas
Pita kemudian dihaluskan oleh WMA dengan periode yang ditetapkan sebagai
Ketika harga menembus band atas, pergi panjang. Ketika harga menembus band bawah, pergi pendek.
Sinyal keluar didefinisikan oleh
Jika Tipe Keluar adalah Volatility MA, keluar saat harga melintasi kembali di bawah WMA.
Jika Jenis Keluar adalah Range Crossover, keluar saat harga melintasi kembali di bawah band.
Risiko dapat dikurangi dengan:
Strategi dapat ditingkatkan dengan:
Uji nilai panjang yang berbeda untuk menemukan kombinasi yang optimal.
Misalnya, ketika harga menembus band atas, periksa apakah MACD juga melintasi emas.
Mengoptimalkan untuk berhenti di belakang alih-alih berhenti putus rentang sederhana.
Tetapkan aturan masuk kembali untuk menangkap tren lagi setelah berhenti.
Sesuaikan ukuran secara dinamis berdasarkan volatilitas pasar.
Strategi ini bekerja dengan baik untuk pasar tren secara umum dengan menggunakan band berbasis volatilitas untuk mengukur kekuatan tren dan WMA untuk membentuk rentang perdagangan yang dapat diandalkan untuk sinyal breakout. Namun ada beberapa masalah seperti deteksi tren tertinggal, berhenti yang dapat ditingkatkan, dll. Pengujian dan optimalisasi yang ekstensif diperlukan menggunakan data nyata untuk menyesuaikan parameter dan aturan, mengurangi sinyal palsu dan membuatnya kuat di berbagai kondisi pasar. Juga manajemen risiko yang ketat adalah kunci untuk profitabilitas jangka panjang.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 5m basePeriod: 1m 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/ // © wbburgin //@version=5 strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true, pyramiding=20,max_bars_back=2000,initial_capital=10000) wma(float priceType,int length,float weight) => norm = 0.0 sum = 0.0 for i = 0 to length - 1 norm := norm + weight sum := sum + priceType[i] * weight sum / norm // This definition of volatility uses the high-low range divided by the average of that range. volatility(source,length) => h = ta.highest(source,length) l = ta.lowest(source,length) vx = 2 * (h - l) / (h + l) vx vm1 = input.int(100,"Average Length") volLen = input.int(100,"Volatility Length") vsrc = input.source(close,"Volatility Source") cross_type = input.source(close,"Exit Source") exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type") volatility = volatility(vsrc,volLen) highband1 = close + (close * volatility) lowband1 = close - (close * volatility) hb1 = wma(highband1,vm1,volatility) lb1 = wma(lowband1,vm1,volatility) hlavg = math.avg(hb1,lb1) upcross = ta.crossover(high,hb1) //Crossing over the high band of historical volatility signifies a bullish breakout dncross = ta.crossunder(low,lb1) //Crossing under the low band of historical volatility signifies a bearish breakout vlong = upcross vshort = dncross vlong_exit = switch exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1) vshort_exit = switch exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossover(cross_type,lb1) if vlong strategy.entry("Long",strategy.long) if vlong_exit strategy.close("Long") if vshort strategy.entry("Short",strategy.short) if vshort_exit strategy.close("Short") plot(hlavg,color=color.white,title="Weighted Volatility Moving Average") t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top") b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom") alertcondition(vlong,"Volatility Long Entry Signal") alertcondition(vlong_exit,"Volatility Long Exit Signal") alertcondition(vshort,"Volatility Short Entry Signal") alertcondition(vshort_exit,"Volatility Short Exit Signal") fill(t,b,color=color.new(color.aqua,90))