
이 전략은 변동률을 추적하는 양방향 거래 전략이다. 그것은 평균 실제 변동률 ATR 지표를 사용하여 중지 지점을 설정하고, 가격의 중단 지점을 돌파하는 방향에 따라 추세 방향을 판단한다. 추세 방향이 변하면 역으로 입장을 개설한다.
이 전략은 3일 ATR을 계산하는 변동률을 사용한다. ATR 값은 한 계수로 중지된다. 가격이 중지된 지점보다 높을 때 상승 추세로 판단하고, 가격이 중단된 지점을 넘어가는 경우 매매한다. 가격이 중지된 지점보다 낮을 때 공백 추세로 판단하고, 가격이 상승한 지점을 넘어가는 경우 매매한다.
위험을 고려하여 ATR 계수를 적절히 증가시키고, 스톱저브를 늘리고, 거래 주파수를 조절하고, 최소 스톱오피스를 설정할 수 있다.
이 전략은 전체적으로 안정적인 쌍방향 추적 스톱 손실 전략이다. ATR 지표를 통해 스톱 손실을 동적으로 설정하여 철회 위험을 제어합니다. 동시에 쌍방향 거래는 수익 기회를 증가시킵니다. 추가적인 최적화를 통해 전략은 더 안정적이고 신뢰할 수 있으며, 추세를 따라가는 능력이 더 강하다.
/*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