양방향 변동성 포용 전략


생성 날짜: 2023-11-21 12:04:19 마지막으로 수정됨: 2023-11-21 12:04:19
복사: 0 클릭수: 608
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

양방향 변동성 포용 전략

개요

이 전략은 변동률을 추적하는 양방향 거래 전략이다. 그것은 평균 실제 변동률 ATR 지표를 사용하여 중지 지점을 설정하고, 가격의 중단 지점을 돌파하는 방향에 따라 추세 방향을 판단한다. 추세 방향이 변하면 역으로 입장을 개설한다.

전략 원칙

이 전략은 3일 ATR을 계산하는 변동률을 사용한다. ATR 값은 한 계수로 중지된다. 가격이 중지된 지점보다 높을 때 상승 추세로 판단하고, 가격이 중단된 지점을 넘어가는 경우 매매한다. 가격이 중지된 지점보다 낮을 때 공백 추세로 판단하고, 가격이 상승한 지점을 넘어가는 경우 매매한다.

우위 분석

  • ATR을 사용하여 동적으로 시장의 변동성을 추적하여 스톱포드 침범 가능성을 낮춘다.
  • 양방향 거래, 시장의 양방향 변동에서 수익을 얻을 수 있습니다.
  • 트렌드 전환 초기에 리버스 포지션 포인트를 선택하여 수익률을 높여줍니다.

위험 분석

  • 시장의 급격한 변동이 발생할 수 있으며, ATR은 실제 변동성을 충분히 반영하지 못하여 중지 손실이 발생합니다.
  • GAP 위험도 있는 다수점 포지션
  • 소액의 손실이 발생할 수 있습니다.

위험을 고려하여 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