
Chiến lược này là chiến lược theo dõi xu hướng đường dài trung bình được thiết kế dựa trên các chỉ số phá vỡ và dừng động. Chiến lược sử dụng giá phá vỡ đường dừng động để xác định hướng xu hướng, vào sân khi giá phá vỡ đường dừng, sau đó sử dụng đường dừng để theo dõi xu hướng và khóa lợi nhuận. Chiến lược này nhằm mục đích nắm bắt xu hướng đường dài trung bình, đồng thời sử dụng dừng động để kiểm soát rủi ro.
Chiến lược này sử dụng chỉ số dừng động Volatility Stop để xác định hướng xu hướng và theo dõi dừng. Variability Stop tính một đường dừng động dựa trên phạm vi biến động của giá.
Do đó, đường dừng sẽ biến động lên và xuống theo biến động của giá, tạo thành một kênh động.
Khi giá phá vỡ đường dừng lỗ, biểu thị xu hướng đảo ngược, chiến lược sẽ mở vị trí:
Sau khi mở vị trí, chiến lược sẽ sử dụng đường dừng để theo dõi dừng:
Khi giá chạm lại đường dừng lỗ, chiến lược sẽ dừng lỗ.
Bằng cách này, chiến lược có thể được thực hiện một cách trật tự, theo dõi xu hướng để đảo ngược, đồng thời sử dụng lệnh dừng để kiểm soát rủi ro.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Phản ứng:
Chiến lược này có thể được tối ưu hóa thêm bằng cách:
Chiến lược phá vỡ xu hướng - dừng động lực là một chiến lược theo dõi xu hướng rất thực tế. Nó có thể nắm bắt cơ hội đảo ngược xu hướng, theo xu hướng, đồng thời sử dụng khả năng dừng động để kiểm soát rủi ro hiệu quả. Nếu các tham số được tối ưu hóa đúng cách, có thể thu được lợi nhuận tốt hơn trong tình huống xu hướng.
/*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)