Strategi ini menentukan isyarat perdagangan berdasarkan julat pergerakan sejarah harga. Ia mengira perbezaan antara harga tertinggi dan terendah dalam tempoh tertentu, dan membentuk julat pergerakan melalui purata bergerak. Isyarat perdagangan dihasilkan apabila harga menembusi ke atas dan ke bawah julat tersebut.
Indikator utama strategi ini adalah kadar turun naik harga bersejarah.
HAL adalah perbezaan antara harga tertinggi dan terendah pada masa lalu N root Bar.
Mengira purata harga tertinggi dan terendah pada N akar Bar yang lalu (avg ((H, L))
Kadar turun naik = HL / avg (H, L)
N ialah parameter “Volatility Length”.
Setelah mendapat kadar turun naik, kiralah:
Uptrend = kini dekat + kini dekat * kadar turun naik
Laluan bawah = kini dekat - kini dekat * kadar turun naik
Laluan atas dan bawah kemudian dihaluskan melalui garis rata WMA, dengan parameter “Average Length”.
Apabila harga menembusi garisan atas, lakukan lebih banyak; apabila harga menembusi garisan bawah, lakukan lebih sedikit.
Isyarat simpanan terhad diberikan berdasarkan parameter “Exit Type”:
Apabila Exit Type adalah Volatility MA, harga kembali menembusi kedudukan rata-rata rata-rata WMA;
Exit Type adalah Range Crossover, apabila harga kembali menembusi kedudukan rata di atas dan di bawah.
Anda boleh mengurangkan risiko dengan mengambil langkah-langkah berikut:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Mencari kombinasi parameter terbaik dengan menguji pelbagai parameter Length.
Sebagai contoh, apabila harga menembusi landasan, masuk lebih banyak jika MACD juga bergolek pada masa yang sama.
Boleh dioptimumkan untuk tracking stop loss yang elastis, dan bukan hanya untuk break-through stop loss.
Selepas berhenti keluar, jika trend berterusan, anda boleh menetapkan syarat masuk semula dan menjejaki trend sekali lagi.
Anda boleh mengubah kedudukan dagangan anda secara dinamik mengikut turun naik dan turun naik pasaran.
Strategi ini secara keseluruhan lebih sesuai untuk keadaan trend, menilai arah dan kekuatan trend melalui lintasan dan lintasan turun naik pada kadar turun naik, dan bekerjasama dengan garis rata-rata WMA untuk membentuk kawasan perdagangan yang lebih dipercayai, sehingga menghasilkan titik jual beli yang pecah. Tetapi ada juga beberapa masalah, seperti penilaian trend yang terlewat, cara menghentikan kerugian dapat diperbaiki, dan lain-lain.
/*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))