ATR 후속 정지 전략

저자:차오장, 날짜: 2023-09-26 20:23:13
태그:

개요: ATR 트레일링 스톱 전략은 평균 참 범위 (ATR) 지표에 기반하여 스톱 손실 수준을 동적으로 설정하는 거래 전략입니다. 유동적인 FOREX 쌍에 적합하며 주요 트렌드에 수익을 확보하고 동시에 시장 변동성을 동적으로 추적함으로써 위험을 제어합니다.

전략 논리

이 전략은 ATR 값을 기반으로 AVERAGE 지표 (가격 이동 평균) 및 상부/하부 대역 DIFF/DIFFLOW를 계산하여 거래 채널을 형성합니다. 가격이 DIFF를 넘을 때 길게 이동하고 가격이 DIFF를 넘을 때 짧게 이동하며 ATR를 기반으로 동적으로 정지됩니다.

특히, 그것은 먼저 간단한 이동 평균 AVERAGE 및 ATR 지표를 계산합니다. 상단 DIFF 및 하단 DIFFLOW는 ATR 값을 계수와 곱하여 계산됩니다. 이것은 DIFF 및 DIFFLOW로 한정된 거래 채널을 형성합니다. 가격이 상단보다 넘을 때 긴 포지션을 취합니다. 가격이 하단보다 넘을 때 짧은 포지션을 취합니다. 또한, 스톱 손실 수준은 ATR 값과 동적으로 움직입니다. 이것은 적응적 인 스톱을 허용합니다.

따라서 전략은 주요 트렌드에서 이익을 얻기 위해 지속적으로 길고 짧게 갈 수 있으며 위험을 제어하기 위해 ATR 트레일링 스톱을 사용할 수 있습니다. 이것은 휘발성 도구에 적합합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. ATR 기반의 동적 스톱은 시장의 변동성에 적응하여 너무 가깝거나 너무 멀리 있는 스톱을 피합니다.

  2. 트레이딩 채널은 트렌드 내에서 평균 반전을 포착하는 것을 목표로합니다. 채널 내에서 가격이 변동할 때 좋은 자본 활용.

  3. 브레이크오웃을 예측하지 않고 트렌드를 계속 거래합니다. 더 나은 수익성을 위해 트렌드를 따르죠.

  4. 간단한 매개 변수와 규칙, 이해하기 쉽고 자동화

  5. 높은 자본 활용, 지속적인 거래는 더 많은 수익 기회를 제공합니다.

위험 과 개선

고려해야 할 몇 가지 위험:

  1. 큰 ATR 계수는 너무 멀리서 멈추고 위험을 통제하지 못합니다. 하루 ATR의 1-3 배의 ATR 배수는 권장됩니다.

  2. 범위를 제한하는 시장에서 휘프사우는 빈번한 정지를 유발합니다. 원치 않는 정지를 줄이기 위해 ATR 계수를 조정합니다.

  3. 초기 브레이크 이후 가격이 역전될 때 발생할 수 있는 손실. 트레이드 채널에 트렌드 필터를 추가하면 트렌드 방향으로만 브레이크가 발생합니다.

  4. 큰 스파이크는 스톱을 비효율화 할 수 있습니다. 최대 스톱 손실 제한을 추가하는 것을 고려하십시오.

가능한 최적화:

  1. ATR 매개 변수를 최적화하여 변동성을 추적하고 과도한 정지를 방지하는 적절한 균형을 찾으십시오.

  2. 트렌드 지표를 추가하고, 트렌드 방향으로 트레이드 브레이크만 합니다.

  3. 최적값을 찾기 위해 각 기기에 대해 개별적으로 매개 변수를 테스트합니다.

  4. 진입을 최적화하고, 채널 중간에 진입을 고려해

  5. 전체 리스크/드라운드를 통제하면서 포지션 크기를 늘려라.

결론

ATR 트레일링 스톱 전략은 위험을 역동적으로 관리하면서 트렌드를 지속적으로 거래합니다. 변동성 있는 도구에 적합하며 자본 활용도 좋습니다. 매개 변수 최적화 및 필터를 추가하면 성능을 더욱 정화 할 수 있습니다. 전반적으로 간단하고 실용적인 트렌드 다음 전략입니다.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(1, type=input.float, minval=0, title="Length")
mullow = input(2, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2008, title = "From Year", minval = 2008)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk())
    strategy.entry("KOP", strategy.long, when=bull_cross)
    strategy.close("KOP", when=bear_cross)  
    strategy.entry("SALJ", strategy.short, when=bear_cross)
    strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

더 많은