이 전략은 E-미니 S&P500 선물 (ES) 에 적용되는 트레일링 스톱 전략이다. 10일 ATR를 참조로 사용하며 장기 및 짧은 스톱 라인을 정의하기 위해 스톱 손실 범위를 3배로 설정합니다. 전략은 ATR 라인의 방향 변화로 트렌드를 판단하고 트렌드의 전환점에 엔트리 신호를 생성합니다. 입력 한 후에는 가격 움직임을 추적하고 이익을 보호하기 위해 실시간으로 스톱 손실 라인을 조정합니다.
이 전략은 가격 소스로 hl2를 사용합니다. 먼저 10일 ATR를 계산하고 사용자가 SMA 방법 또는 내장 ATR 기능을 사용하여 ATR을 계산하는 것을 선택할 수 있습니다. ATR을 얻은 후, 범위를 형성하기 위해 3 배의 ATR을 위아래로 더합니다. 두 범위 라인은 스톱 로스 라인입니다.
트렌드를 판단하는 방법은 가격이 상한을 초과하면 길고, 가격이 하한을 넘으면 짧다는 것이다. 가격이 범위에 다시 들어가면 트렌드 반전을 확인한다. 이 시점에서, 단위로 전환하면 긴 엔트리 신호를 생성하고, 긴 방향으로 전환하면 짧은 엔트리 신호를 생성한다.
입력 후, 긴 스톱 손실 라인은 상위 경계 마이너스 1 틱으로 설정되고, 짧은 스톱 손실 라인은 하위 경계 더하기 1 틱으로 설정되어 수익을 보호하기 위해 뒤따릅니다.
일반적으로, 이것은 견고한 트렌드 다음 전략이다. 그것은 스톱 손실 범위를 결정하는 문제를 해결하고 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)