ATR 이동평균 돌파 전략

ATR SMA
생성 날짜: 2024-05-17 10:22:11 마지막으로 수정됨: 2024-05-17 10:22:11
복사: 0 클릭수: 665
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

ATR 이동평균 돌파 전략

개요

이 전략은 주로 ATR ((Average True Range, 평균 실제 변동 범위) 와 SMA ((Simple Moving Average, 간단한 이동 평균) 두 지표를 사용하여 시장의 정리와 돌파구를 판단하여 거래한다. 전략의 주요 아이디어는: 가격이 ATR 상하 궤도를 돌파할 때, 시장이 돌파구가 발생했다고 생각하며, 포지션을 열다. 가격이 ATR 궤도 안에 돌아 왔을 때, 시장이 정리되어 평정 포지션이 종료되었다고 생각한다. 동시에, 전략은 위험 제어 및 포지션 관리를 사용하여 각 거래의 위험과 포지션 크기를 제어한다.

전략 원칙

  1. ATR 지수와 SMA 지수를 계산한다. ATR은 시장의 변동성을 판단하는데, SMA는 시장의 평균 가격 수준을 판단하는데 쓰인다.
  2. ATR과 SMA에 따라 계산 상하 레일, 상하 레일은 SMA + ATR * 곱셈, 하하 레일은 SMA - ATR * 곱셈, 곱셈은 사용자가 사용자 정의한 배수이다.
  3. 시장이 정리 상태에 있는지 판단하기 위해, 최고 가격이 상반도보다 낮고 최저 가격이 하반도보다 높을 때, 시장이 정리 상태에 있다고 본다.
  4. 시장이 돌파가 발생했는지 판단하기 위해, 최고 가격이 궤도를 돌파했을 때, 상향 돌파가 발생했다고 간주합니다. 최저 가격이 궤도를 돌파했을 때, 하향 돌파가 발생했다고 간주합니다.
  5. 파격 상황에 따라 포지션을 개장, 상향 파격으로 다중 포지션을 개장, 하향 파격으로 빈 포지션을 개장한다.
  6. 스톱로스 및 스톱스트로프 조건에 따라 매매를 하고, 가격이 스톱로스 가격 ((SMA - ATR * stop_loss_percentage) 또는 스톱스트로프 가격 ((SMA + ATR * take_profit_percentage) 에 도달했을 때 매매를 종료한다.
  7. 사용자 지정된 위험 비율에 따라 거래당 위험 금액을 계산하고 ATR에 따라 위치 크기를 계산합니다.

우위 분석

  1. 전략의 논리는 명확하고, 이해하기 쉽고, 실행하기 쉽다.
  2. ATR 지표를 사용하여 시장의 변동성을 판단하고, 다른 시장 상황에 적응할 수 있다.
  3. SMA 지표는 시장의 평균 가격 수준을 판단하고 시장의 주요 추세를 추적할 수 있다.
  4. 포지션을 개시할 때 시장의 정리 상태를 고려하여 불안한 시장에서 자주 거래되는 것을 피할 수 있다.
  5. 스톱로스와 스톱스을 사용하여 거래 당 위험을 효과적으로 통제할 수 있습니다.
  6. 포지션 관리를 사용하여 계좌 자금과 위험 비율에 따라 포지션 크기를 자동으로 조정할 수 있습니다.

위험 분석

  1. 전략은 불안정한 시장에서 잘 작동하지 않을 수 있는데, 빈번한 돌파와 정리 때문에 빈번한 포지션 개시와 포지션 평화가 발생하여 거래 비용이 증가할 수 있기 때문이다.
  2. 전략의 매개 변수 설정은 전략의 성능에 큰 영향을 미치며, 다른 매개 변수는 완전히 다른 결과를 초래할 수 있으므로 신중한 디비팅과 최적화 매개 변수가 필요합니다.
  3. 전략의 중지 및 중지 설정은 충분히 유연하지 않을 수 있으며, 고정된 비율의 중지 및 중지 설정은 다른 시장 상황에 적응할 수 없습니다.
  4. 전략의 포지션 관리는 너무 단순할 수 있으며 시장의 추세와 변동성 등의 요소를 고려하지 않아 어떤 경우에는 너무 큰 또는 너무 작은 포지션으로 이어질 수 있습니다.

최적화 방향

  1. 트렌드 필터 조건을 추가하는 것을 고려할 수 있습니다. 예를 들어, 트렌드가 올라갈 때만 더 많은 포지션을 열고, 트렌드가 내려갈 때 빈 포지션을 열면, 흔들리는 시장에서 자주 거래되는 것을 피합니다.
  2. ATR 또는 시장의 변동적 동력에 따라 다른 시장 상황에 맞게 중지 및 중지 거리를 조정하는 것과 같은 더 유연한 중지 및 중지 방법을 사용하는 것이 고려 될 수 있습니다.
  3. 좀 더 복잡한 포지션 관리 방법을 사용하는 것을 고려할 수 있습니다. 예를 들어, 시장의 추세와 변동성에 따라 포지션 크기를 조정하여 위험을 통제하고 수익을 높일 수 있습니다.
  4. 전략의 신뢰성과 안정성을 더 높이기 위해 거래량, 변동성 등과 같은 다른 필터 조건을 추가하는 것을 고려할 수 있습니다.

요약하다

이 전략은 ATR와 SMA라는 두 가지 간단한 지표를 사용하여 가격의 돌파와 정리 등을 판단하여 거래를 수행하며, 위험 제어 및 포지션 관리를 사용하여 각 거래의 위험과 포지션 크기를 제어합니다. 전략의 논리는 명확하고 이해하기 쉽고 구현되지만 실제 응용에서는 전략의 성과에 영향을 미치는 변수 설정이 너무 커서 동요 시장에서 좋지 않은 성능, 중지 및 중지 설정이 충분하지 않으며, 포지션 관리가 너무 단순합니다. 따라서 실제 응용에서는 추세 필터를 추가하여 더 유연한 중지 및 중지 방식을 사용하거나 더 복잡한 포지션 관리 방법을 사용하여 전략의 신뢰성 및 안정성을 높이기 위해 다른 조건을 추가합니다.

전략 소스 코드
/*backtest
start: 2024-05-09 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Consolidation Breakout Strategy", overlay=true)

// Input Parameters
length = input.int(20, "Length", minval=1)
multiplier = input.float(2.0, "Multiplier", minval=0.1, maxval=10.0)
risk_percentage = input.float(1.0, "Risk Percentage", minval=0.1, maxval=10.0)
stop_loss_percentage = input.float(1.0, "Stop Loss Percentage", minval=0.1, maxval=10.0)
take_profit_percentage = input.float(2.0, "Take Profit Percentage", minval=0.1, maxval=10.0)

// ATR calculation
atr_value = ta.atr(length)

// Average price calculation
average_price = ta.sma(close, length)

// Upper and lower bounds for consolidation detection
upper_bound = average_price + multiplier * atr_value
lower_bound = average_price - multiplier * atr_value

// Consolidation detection
is_consolidating = (high < upper_bound) and (low > lower_bound)

// Breakout detection
is_breakout_up = high > upper_bound
is_breakout_down = low < lower_bound

// Entry conditions
enter_long = is_breakout_up and not is_consolidating
enter_short = is_breakout_down and not is_consolidating

// Exit conditions
exit_long = low < (average_price - atr_value * stop_loss_percentage) or high > (average_price + atr_value * take_profit_percentage)
exit_short = high > (average_price + atr_value * stop_loss_percentage) or low < (average_price - atr_value * take_profit_percentage)

// Risk calculation
risk_per_trade = strategy.equity * (risk_percentage / 100)
position_size = risk_per_trade / atr_value

// Strategy
if (enter_long)
    strategy.entry("Long", strategy.long, qty=position_size)
if (enter_short)
    strategy.entry("Short", strategy.short, qty=position_size)

if (exit_long)
    strategy.close("Long")
if (exit_short)
    strategy.close("Short")