Strategi ini menghasilkan isyarat perdagangan berdasarkan julat turun naik sejarah harga. Ia mengira perbezaan antara harga tertinggi dan terendah dalam tempoh tertentu, dan membentuk julat turun naik menggunakan purata bergerak. Isyarat perdagangan dipicu apabila harga memecahkan jalur atas atau bawah julat. Ia tergolong dalam strategi pecah trend.
Penunjuk teras adalah turun naik harga sejarah.
Mengira perbezaan antara harga tertinggi dan terendah sepanjang N bar yang lalu, dipanggil HL
Mengira purata harga tertinggi dan terendah di atas N bar, avg ((H, L)
Volatiliti = HL / avg ((H, L)
Di mana N adalah parameter
Selepas mendapatkan turun naik, rentang dikira sebagai:
Band atas = Penutupan semasa + Penutupan semasa * Volatiliti
Band bawah = Penutupan semasa - Penutupan semasa * Volatiliti
Garis-garis itu kemudiannya dihaluskan oleh WMA dengan tempoh yang ditetapkan sebagai
Apabila harga melanggar band atas, pergi panjang. Apabila harga melanggar band bawah, pergi pendek.
Isyarat keluar ditakrifkan oleh
Jika Jenis Keluar adalah Volatiliti MA, keluar apabila harga melintasi semula di bawah WMA.
Jika Jenis Keluar adalah Range Crossover, keluar apabila harga melintasi kembali di bawah band.
Risiko boleh dikurangkan dengan:
Strategi ini boleh ditingkatkan dengan:
Uji nilai Length yang berbeza untuk mencari kombinasi yang optimum.
Sebagai contoh, apabila harga pecah di atas jalur atas, periksa sama ada MACD juga melintasi emas.
Mengoptimumkan untuk berhenti di belakang bukannya berhenti putus jarak yang mudah.
Tetapkan peraturan kemasukan semula untuk menangkap trend lagi selepas berhenti.
Sesuaikan saiz secara dinamik berdasarkan turun naik pasaran.
Strategi ini berfungsi dengan baik untuk pasaran trend secara amnya dengan menggunakan band berdasarkan turun naik untuk mengukur kekuatan trend dan WMA untuk membentuk julat perdagangan yang boleh dipercayai untuk isyarat pecah. Tetapi terdapat beberapa isu seperti pengesanan trend yang tertinggal, berhenti yang dapat diperbaiki, dll. Ujian balik dan pengoptimuman yang luas diperlukan menggunakan data sebenar untuk menyesuaikan parameter dan peraturan, mengurangkan isyarat palsu dan menjadikannya kukuh dalam keadaan pasaran yang berbeza. Juga pengurusan risiko yang ketat adalah kunci untuk keuntungan 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))