
Chiến lược này là một chiến lược giao dịch hai chiều theo dõi biến động. Nó sử dụng chỉ số ATR biến động thực trung bình để thiết lập điểm dừng để đánh giá hướng xu hướng dựa trên hướng giá phá vỡ điểm dừng.
Chiến lược này sử dụng tỷ lệ biến động ATR 3 ngày. Ưu điểm ATR được nhân bởi một hệ số làm điểm dừng. Khi giá cao hơn điểm dừng, đánh giá là xu hướng tăng và đóng cửa khi giá giảm vượt mức dừng. Khi giá thấp hơn điểm dừng, đánh giá là xu hướng không và đóng cửa khi giá tăng vượt mức dừng.
Đối với rủi ro, có thể tăng ATR phù hợp, tăng vùng đệm dừng, kiểm soát tần suất giao dịch, thiết lập điểm dừng tối thiểu.
Chiến lược này nói chung là một chiến lược dừng chân theo dõi hai chiều ổn định. Với các chỉ số ATR, các vị trí dừng lỗ được thiết lập động, kiểm soát rủi ro rút lui. Trong khi đó, giao dịch hai chiều tăng cơ hội kiếm lợi nhuận. Bằng cách tối ưu hóa hơn nữa, chiến lược có thể trở nên ổn định, đáng tin cậy và có khả năng theo dõi xu hướng hơn.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("BCH Swinger v1", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
/////////////////////////////////////////////////////////////
//START - SET DATE RANGE
// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay = input(defval = 1, title = "From Day", minval = 1)
FromYear = input(defval = 2017, title = "From Year")
ToMonth = input(defval = 10, title = "To Month", minval = 1)
ToDay = input(defval = 01, title = "To Day", minval = 1)
ToYear = input(defval = 2020, title = "To Year")
startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true
/////////////////////////////////////////////////////////////
//END - SET DATE RANGE
/////////////////////////////////////////////////////////////
//START - INDICATORS
length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)
/////////////////////////////////////////////////////////////
//END - INDICATORS
/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange
strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)
/////////////////////////////////////////////////////////////
//END - TRADING RULES