ATR 기반 ES 트레일링 스톱 전략


생성 날짜: 2024-01-12 14:52:23 마지막으로 수정됨: 2024-01-12 14:52:23
복사: 3 클릭수: 673
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

ATR 기반 ES 트레일링 스톱 전략

개요

이 전략은 E-미니 S&P500 선물 ((ES)) 에 적용된 추적 중지 전략이다. 10일 ATR을 참고하여 3배의 ATR을 중단 범위로 사용하여 다중 및 공백의 중지 라인을 설정한다. 전략은 ATR 라인의 방향 변화를 통해 트렌드를 판단하고 트렌드 전환점을 생성하는 입시 신호이다. 입시 후, 그것은 실시간으로 중지 라인을 조정하여 중지 라인이 가격과 함께 작동하도록 하여 수익을 보호한다.

전략 원칙

이 전략은 hl2을 가격 소스로 사용한다. 먼저 10일 ATR을 계산하고, 사용자에게 SMA 방식으로 ATR을 계산하거나 내장된 ATR 함수를 선택하도록 한다. ATR을 계산한 후, 상향 아래로 각각 3배의 ATR을 범위로 추가한다. 이 두 범위선은 스톱로스 라인이다.

트렌드를 판단하는 방법은, 가격이 상한을 넘으면, 다단; 가격이 하한을 넘어지면, 공중이다. 가격이 범위에 재조정되면, 트렌드 회전이 확인된다. 이 때 공중으로 회전하면 더 많은, generate 다단 입구 신호; 공중으로 회전하면 더 많은, generate 공중 입구 신호.

진입 후, 다중 헤드 스톱 라인은 상단 경계 아래로 1 점 이동, 공중 헤드 스톱 라인은 하단 경계 위로 1 점 이동, 날카로운 후속 보호를 수행한다.

전략적 이점

  1. ATR을 사용하면 시장의 변동성에 자동으로 적응할 수 있으며, 스톱 손실이 유발되는 확률을 낮출 수 있습니다.
  2. 트렌드를 추적하는 방법은 간단하고 효과적이며, 상위와 하위 추이를 피할 수 있습니다.
  3. 이윤을 보호하고, 이윤을 얻은 후에 다시 손실을 피하기 위해 손실을 막는 것을 보장합니다.

위험 분석

  1. ATR 파라미터를 잘못 설정하면 너무 큰 또는 너무 작은 정지 범위가 발생할 수 있습니다.
  2. 지표의 변동성 변동이 있을 때, 비정상적인 정지 손실이 발생할 수 있습니다.
  3. TAILING는 너무 보수적이어서 지속적인 트렌드를 추적하지 못할 수도 있습니다.

최적화 방향

  1. ATR 파라미터를 변동률 지표와 결합하여 최적화 할 수 있습니다.
  2. 다른 TAILING 중지 알고리즘을 테스트할 수 있습니다. 예를 들어, 잔액 퍼센트 중지
  3. 트렌드 지표 필터링 입력 신호와 결합하여 비 주류 트렌드 입력을 피할 수 있습니다.

요약하다

이 전략은 전체적으로 보편적인 트렌드 추적 전략이다. 이 전략은 스톱 레인지의 결정이 어려운 문제를 해결하고, ATR의 동적 조정으로 위험을 감소시킨다. 동시에 스톱 손실을 따라 수익 보호한다. 그러나 ATR 파라미터, 스톱 알고리즘 등은 여전히 최적화 할 여지가 있다.

전략 소스 코드
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)

// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1

// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1

strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)