Chiến lược giao dịch thoát khỏi phạm vi biến động

Tác giả:ChaoZhang, Ngày: 2023-09-21 20:38:29
Tags:

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch dựa trên phạm vi biến động lịch sử của giá. Nó tính toán sự khác biệt giữa giá cao nhất và thấp nhất trong một khoảng thời gian nhất định, và tạo thành một phạm vi biến động bằng cách sử dụng đường trung bình động.

Chiến lược logic

Chỉ số cốt lõi là sự biến động lịch sử của giá.

  1. Tính toán sự khác biệt giữa giá cao nhất và giá thấp nhất trong N thanh trước đây, được gọi là HL

  2. Tính toán trung bình của giá cao nhất và thấp nhất trên N thanh, trung bình (H, L)

  3. Độ biến động = HL / trung bình ((H, L)

N là tham số Dài độ biến động.

Sau khi lấy biến động, các dải được tính như sau:

Dải trên = Khóa hiện tại + Khóa hiện tại * Sự biến động

Phạm vi dưới = Khóa hiện tại - Khóa hiện tại * Sự biến động

Các dải sau đó được làm mịn bởi WMA với khoảng thời gian được đặt là Độ dài trung bình .

Khi giá phá vỡ trên dải trên, đi dài. Khi giá phá vỡ dưới dải dưới, đi ngắn.

Các tín hiệu thoát được xác định bằng Loại thoát:

  1. Nếu loại thoát là MA biến động, thoát khi giá vượt xuống dưới WMA.

  2. Nếu loại Exit là Range Crossover, thoát khi giá vượt xuống dưới các dải.

Ưu điểm

  • Sự biến động bắt kịp xu hướng di chuyển tốt
  • WMA làm cho các băng tần ổn định và đáng tin cậy hơn
  • Breakout tín hiệu bắt kịp thời biến đổi xu hướng
  • Các bước ra dựa trên WMA/band cắt giảm lỗ nhanh chóng
  • Rất nhiều chỗ cho các tham số điều chỉnh cho các thị trường khác nhau

Rủi ro

  • Breakouts có thể whipsaw với giá đảo ngược
  • Rủi ro mất mát lớn khi thay đổi xu hướng
  • WMA đôi khi chậm trong việc phát hiện sự thay đổi xu hướng
  • Parameter tối ưu hóa không dễ dàng, cần nhiều thử nghiệm và lỗi
  • Việc rút tiền lớn hơn, cần quản lý rủi ro tốt

Các rủi ro có thể được giảm bằng cách:

  • Tối ưu hóa các thông số cho các băng tần đáng tin cậy hơn
  • Thêm các chỉ số khác để tránh các whipsaws
  • Kích thước nhỏ hơn và quản lý rủi ro tốt hơn
  • Xem xét nhập cảnh trở lại

Hướng dẫn tối ưu hóa

Chiến lược có thể được cải thiện bằng cách:

  1. Chế độ điều chỉnh tham số

Kiểm tra các giá trị Length khác nhau để tìm kết hợp tối ưu.

  1. Thêm các chỉ số khác

Ví dụ, khi giá phá vỡ trên dải trên, hãy kiểm tra xem MACD cũng có chéo vàng không.

  1. Tốt hơn là dừng lỗ

Tối ưu hóa để dừng lại sau thay vì dừng lại đơn giản.

  1. Nhập lại

Thiết lập các quy tắc nhập lại để bắt lại xu hướng sau khi dừng lại.

  1. Kích thước vị trí

Điều chỉnh động kích thước dựa trên biến động thị trường.

Tóm lại

Chiến lược này hoạt động tốt cho các thị trường xu hướng nói chung bằng cách sử dụng các băng tần dựa trên biến động để đánh giá sức mạnh xu hướng và WMA để tạo ra các phạm vi giao dịch đáng tin cậy cho các tín hiệu đột phá.


/*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))

Thêm nữa