Chiến lược này dựa trên các khu vực biến động lịch sử của giá để xác định tín hiệu giao dịch. Nó tính toán chênh lệch giữa giá cao nhất và giá thấp nhất trong một chu kỳ nhất định và tạo khu vực biến động bằng đường trung bình di chuyển.
Chỉ số cốt lõi của chiến lược này là tỷ lệ biến động lịch sử của giá.
Tính chênh lệch giữa giá cao nhất và giá thấp nhất trong quá khứ của N gốc Bar, được ghi là HL
Tính trung bình của giá cao nhất và giá thấp nhất trong quá khứ N gốc Bar (avg ((H, L))
Tỷ lệ dao động = HL / avg (H, L)
Trong đó, N là tham số “Volatility Length”.
Sau đó, tính toán theo đường ray:
Đường lên = hiện tại gần + hiện tại gần * tỷ lệ biến động
Đường đi xuống = hiện tại gần - hiện tại gần * tỷ lệ biến động
Các đường ray trên và dưới được xử lý bằng phẳng thông qua đường thẳng WMA, tham số là “Average Length”.
Khi giá phá vỡ đường mòn, hãy làm nhiều hơn; khi giá phá vỡ đường mòn, hãy làm trống.
Tín hiệu của nhà kho được đưa ra dựa trên tham số “Exit Type”:
Khi Exit Type là Volatility MA, giá sẽ quay trở lại mức phẳng trung bình của WMA;
Khi Exit Type là Range Crossover, giá sẽ quay trở lại và giảm xuống.
Các biện pháp sau có thể làm giảm nguy cơ:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Kiểm tra các tham số khác nhau của Length để tìm ra sự kết hợp tốt nhất.
Ví dụ, khi giá phá vỡ đường ray, nếu MACD cũng đồng thời Gold Forks, chỉ cần nhập vào làm nhiều hơn.
Có thể được tối ưu hóa cho tracking stop loss với tính linh hoạt, thay vì chỉ đơn giản là break-through stop loss
Sau khi dừng lỗ, nếu xu hướng tiếp tục, bạn có thể đặt điều kiện nhập lại và theo dõi lại xu hướng.
Các vị trí giao dịch có thể được điều chỉnh động theo biến động của thị trường.
Chiến lược này nói chung là phù hợp với hành vi theo xu hướng, định hướng và cường độ của xu hướng thông qua đường ray và đường ray xuống của tỷ lệ biến động, và kết hợp với đường trung bình WMA để tạo ra một khu vực giao dịch đáng tin cậy hơn, do đó tạo ra điểm mua và bán đột phá. Tuy nhiên, cũng có một số vấn đề, chẳng hạn như định xu hướng bị tụt hậu, có thể cải thiện phương pháp dừng lỗ, v.v..
/*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))