에스 (ES) 를 위한 ATR 기반의 트레일링 스톱 전략

저자:차오장, 날짜: 2024-01-12 14:52:23
태그:

img

전반적인 설명

이 전략은 E-미니 S&P500 선물 (ES) 에 적용되는 트레일링 스톱 전략이다. 10일 ATR를 참조로 사용하며 장기 및 짧은 스톱 라인을 정의하기 위해 스톱 손실 범위를 3배로 설정합니다. 전략은 ATR 라인의 방향 변화로 트렌드를 판단하고 트렌드의 전환점에 엔트리 신호를 생성합니다. 입력 한 후에는 가격 움직임을 추적하고 이익을 보호하기 위해 실시간으로 스톱 손실 라인을 조정합니다.

전략 논리

이 전략은 가격 소스로 hl2를 사용합니다. 먼저 10일 ATR를 계산하고 사용자가 SMA 방법 또는 내장 ATR 기능을 사용하여 ATR을 계산하는 것을 선택할 수 있습니다. ATR을 얻은 후, 범위를 형성하기 위해 3 배의 ATR을 위아래로 더합니다. 두 범위 라인은 스톱 로스 라인입니다.

트렌드를 판단하는 방법은 가격이 상한을 초과하면 길고, 가격이 하한을 넘으면 짧다는 것이다. 가격이 범위에 다시 들어가면 트렌드 반전을 확인한다. 이 시점에서, 단위로 전환하면 긴 엔트리 신호를 생성하고, 긴 방향으로 전환하면 짧은 엔트리 신호를 생성한다.

입력 후, 긴 스톱 손실 라인은 상위 경계 마이너스 1 틱으로 설정되고, 짧은 스톱 손실 라인은 하위 경계 더하기 1 틱으로 설정되어 수익을 보호하기 위해 뒤따릅니다.

장점

  1. ATR을 사용하면 시장 변동성의 변화에 자동으로 적응할 수 있으며 스톱 로스가 발생할 확률을 줄일 수 있습니다.
  2. 트렌드 추적 방법은 간단하고 효과적입니다. 정상과 바닥을 쫓는 위험을 피하기 위해.
  3. 트레이닝 스톱은 수익을 차단하고 수익성있는 거래를 반환하는 것을 피합니다.

위험 분석

  1. 부적절한 ATR 매개 변수 설정으로 인해 중지 손실 범위가 너무 크거나 너무 작을 수 있습니다.
  2. 기본 변동성의 급격한 변화는 비정상적인 스톱 로스 트리거를 일으킬 수 있습니다.
  3. 트레일 스톱 은 추세를 계속 추적 하기 위해 너무 보수적 일 수 있다.

최적화 방향

  1. ATR 매개 변수와 변동성 매개 변수를 최적화하는 것을 고려해야 합니다.
  2. 다른 트레일링 스톱 알고리즘을 테스트합니다.
  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)


더 많은