모멘텀 스윙 거래 전략

저자:차오장, 날짜: 2024-02-05 10:44:19
태그:

img

전반적인 설명

이것은 ATR 스톱을 사용하는 모멘텀 기술을 기반으로 한 일간 인터벌 스윙 트레이딩 전략입니다. 이것은 Stably의 코리 호랑이 만들었습니다.

이 전략은 동력 지표를 사용하여 트렌드 방향을 파악하고 ATR에 기반한 스톱 로스 라인을 설정하여 낮은 구매-높은 판매 스윙 거래를 구현합니다.

전략 논리

코드는 먼저 백테스팅 시간대를 설정합니다.

그 다음, 지표 섹션에서는 다음 지표들을 계산합니다.

  • atr ((): 스톱 손실에 대한 ATR를 계산합니다.
  • max_/min_: 이전 바의 최고/최저 가격
  • is_uptrend: 상승 추세인지 판단합니다.
  • vstop: 스톱 손실 라인;

트렌드를 판단하는 주된 논리는 다음과 같습니다.

만약 클로저가 이전 상향 스톱 로스 라인 입점보다 높다면, 그것은 상승 추세로 판단됩니다. 만약 클로저가 이전 상향 스톱 로스 라인 입점보다 낮다면, 그것은 하락 추세로 판단됩니다.

트렌드가 바뀌면, 스톱 로스 라인 위치를 조정하세요.

특히, 상승세에서는 스톱 로스 라인을 이전 바의 가장 높은 가격과 ATR 값을 빼고, 하락세에서는 스톱 로스 라인을 이전 바의 가장 낮은 가격과 ATR 값을 더하여 설정합니다.

이것은 스톱 로스를 따르는 트렌드를 실현합니다.

거래 규칙 섹션에서는 가격이 스톱 로스 라인을 넘으면 긴/단기 포지션을 개척합니다.

이점 분석

이 전략의 장점:

  1. 동력 기법을 이용해서 트렌드 방향을 판단하고, 전환점을 적시에 파악하고, 잘못된 브레이크를 피하세요.
  2. ATR는 최대/최저 가격을 추적하여 위험을 잘 조절할 수 있습니다.
  3. 간단하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉽습니다.
  4. 저값에 구매하고 높은 가격에 판매할 수 있습니다.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 부적절한 ATR 매개 변수는 스톱 손실이 너무 느슨하거나 너무 단단해질 수 있습니다.
  2. 격렬한 휘프사우가 트렌드 범위에서 발생할 수 있으며, 연속적인 스톱 손실을 유발할 수 있습니다.
  3. 높은 거래 빈도, 높은 수수료

몇 가지 최적화:

  1. 다양한 ATR 매개 변수를 테스트하여 최적을 찾습니다.
  2. ATR 위에 변동성 메트릭을 결합하여 스톱 로스를 최적화합니다.
  3. 트렌드 필터를 추가하여 불안한 시장에서 불필요한 거래를 피합니다.

최적화 방향

이 전략을 최적화하는 몇 가지 방향:

  1. 다양한 ATR 매개 변수를 테스트하여 최적을 찾습니다. 여러 매개 변수 세트를 테스트하고 수익/위험 비율을 평가합니다.

  2. ATR 위에 변동성 메트릭을 결합하여 스톱 로스를 최적화합니다. 변동성 메트릭을 추가하고, 변동성이 증가하는 기간 동안 스톱 로스를 적절히 완화하십시오.

  3. 트렌드 필터를 추가하여 불안한 시장에서 거래를 피합니다. 트렌드 판단 지표를 추가하여 트렌드가 명확한 경우에만 거래하십시오.

  4. 포지션 사이즈 메커니즘을 추가합니다. 계정 활용률, 연속 스톱 로스 시간 등에 따라 포지션 크기를 조정합니다.

  5. 오버나이트 게프 리스크 통제를 추가합니다. 오버나이트 게프 리스크를 피하기 위해 시장 폐쇄 전에 손실을 적극적으로 절감하십시오.

결론

기본적인 일일 스윙 트레이딩 전략으로서, 전체적인 논리는 명확합니다. 이 운동 기법으로 트렌드를 판단하고 ATR을 트레일링 스톱 로스로 활용하여 위험을 효과적으로 제어합니다.

여전히 최적화 할 수있는 넓은 공간, 트렌드 판단, 중지 손실 방법, 위치 사이징 등과 같은 측면에서 전략을 더 실용적으로 만들기 위해 개선 할 수 있습니다. 전체적으로이 전략은 양적 거래에 대한 견고한 틀을 제공합니다.


/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BTC Swinger", 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 = 2010, title = "From Year")
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, 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

더 많은