Đây là một chiến lược theo xu hướng dựa trên đột phá và dừng biến động. Chiến lược xác định hướng xu hướng bằng cách phá vỡ giá của đường dừng lỗ động. Nó đi vào giao dịch khi giá xuyên qua đường dừng lỗ và sử dụng đường dừng lỗ để theo dõi xu hướng và khóa lợi nhuận. Chiến lược nhằm mục đích nắm bắt xu hướng trung dài trong khi kiểm soát rủi ro bằng các điểm dừng động.
Chiến lược này sử dụng chỉ số dừng biến động để xác định hướng xu hướng và theo dõi dừng lỗ.
Đường dừng lỗ dao động lên và xuống với giá, tạo thành một kênh năng động.
Khi giá vượt qua đường dừng lỗ, nó báo hiệu một sự đảo ngược xu hướng.
Sau khi mở vị trí, chiến lược theo dõi dừng lỗ với dòng:
Khi giá chạm vào đường dừng lỗ một lần nữa, vị trí sẽ được đóng.
Bằng cách này, chiến lược có thể theo dõi xu hướng kịp thời trong khi kiểm soát rủi ro bằng cách dừng.
Chiến lược có những lợi thế sau:
Ngoài ra còn có một số rủi ro cần xem xét:
Giải pháp:
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Nhìn chung, chiến lược đột phá đà với dừng biến động này là một hệ thống theo xu hướng rất thực tế. Nó có thể nắm bắt các cơ hội đảo ngược xu hướng và theo xu hướng trong khi kiểm soát rủi ro hiệu quả với các điểm dừng năng động. Với điều chỉnh tham số thích hợp, nó có thể đạt được lợi nhuận tốt trong các thị trường xu hướng. Nhưng một số vấn đề cần được giải quyết như điểm dừng quá nhạy cảm, tần suất giao dịch cao vv. Các tối ưu hóa thêm có thể biến nó thành một chiến lược giao dịch lượng hiệu quả và mạnh mẽ.
/*backtest start: 2023-11-11 00:00:00 end: 2023-11-12 00:00:00 period: 3m 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/ //@version=4 strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1) // Works better on 3h, 1h, 2h, 4h // Best time frame 2H //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" length = input(20, "Length", minval = 2) src = input(close, "Source") factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25) volStop(src, atrlen, atrfactor) => var max = src var min = src var uptrend = true var stop = 0.0 atrM = nz(atr(atrlen) * atrfactor, tr) max := max(max, src) min := min(min, src) stop := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src) uptrend := src - stop >= 0.0 if uptrend != nz(uptrend[1], true) max := src min := src stop := uptrend ? max - atrM : min + atrM [stop, uptrend] [vStop, uptrend] = volStop(src, length, factor) //Entry strategy.entry(id="long", long = true, when = crossover(close, vStop) and window()) //Exit strategy.close("long", when = crossunder(close, vStop)) plot(vStop,"Vstop", color.black, linewidth=2)