분류
기술
난이도
초급
사용 상황
전략 설계리스크 관리MT5 운용

평균 실제 범위(ATR)

최근 가격 움직임의 평균 크기를 가격 단위로 재는 변동성 지표입니다. EA는 어제의 조건을 그대로 가정하는 대신 지금의 조건에 맞춰지는 손절 거리와 포지션 크기를 정하는 데 이것을 씁니다.

다른 표현: ATR, True Range

업데이트일

쉽게 말하면

이 시장이 봉 하나에서 보통 얼마나 움직이는지를 최근 구간에 대해 평균 낸 값입니다. 방향에 대해서는 아무 의견이 없습니다. 거리를 재는 자이며, EA가 핍으로 재는 거의 모든 것은 이 단위로 재는 편이 낫습니다.

왜 중요한가

EA 안의 모든 거리 — 손절, 목표, 트레일링 간격, 돌파 임계값 — 는 누군가가 고른 핍 숫자입니다. ATR은 그 고정된 숫자들을, 시장이 빨라지거나 느려져도 같은 뜻을 유지하는 비율로 바꿔 줍니다.

  • 변동성의 실용적인 형태입니다. EA가 매 틱마다 수익률의 표준편차를 계산하기는 어렵지만, 지표 핸들 하나에서 ATR을 읽는 것은 할 수 있습니다.
  • 가격 단위로 나오기 때문에 중간에 어떤 통계 단계도 없이 곧바로 손절 거리로 변환됩니다.
  • 전략을 종목과 주기에 걸쳐 비교 가능하게 만듭니다. 2핍은 어떤 상품에서는 넓은 손절이고 다른 상품에서는 잡음 안에 있지만, 2 ATR은 어디서나 같은 진술입니다.
  • 갭을 포함합니다. 단순한 고가 빼기 저가 범위는 그러지 못합니다. 실제 범위는 현재 봉뿐 아니라 직전 종가에 대해서도 측정하기 때문입니다.

MetaTrader 5에서

MT5에서의 위치

  • 삽입 → 지표 → 오실레이터 → Average True Range — 기간 파라미터와 함께 차트에 추가
  • 내비게이터 → 지표 → Average True Range — 차트로 끌어다 놓아도 결과는 같음
  • 지표의 축이 가격이 아니라 가격 거리이므로 별도 창에 그려짐
  • 전략 테스터 → 입력 — EA의 ATR 기간과 배수는 입력값이며, 둘 다 과최적화하기 쉬움

EA가 사용하는 방식

  • 핸들은 OnInit에서 한 번만 생성하고 — iATR(_Symbol, PERIOD_CURRENT, 14) — 값은 CopyBuffer로 읽습니다. OnTick 안에서 핸들을 만들지 않습니다.
  • 손절 거리 = 배수 × 진입 시점의 ATR. 그래야 손절이 둥근 핍 숫자가 아니라 통상적인 움직임 바깥에 놓입니다.
  • 포지션 크기 = 감수 금액 ÷ (손절 거리 × 핍 가치). 이렇게 하면 변동성이 커질 때 랏 크기가 자동으로 줄어듭니다.
  • 트레일링 거리도 같은 발상을 계속 적용한 것입니다. 빠른 시장에서는 간격이 넓어지고 조용한 시장에서는 좁아집니다.
  • ATR은 완성된 봉(인덱스 1)에서 읽고, 매 틱마다 값이 바뀌는 형성 중인 봉(인덱스 0)에서는 읽지 않습니다.
  • iATR이 와일더의 ATR이라고 가정하지 마십시오. MetaTrader에 포함된 ATR은 와일더가 평활하는 자리에서 고정 창을 굴립니다. 그래서 둘은 서로 다른 시계로 반응합니다. 변동성이 세 배로 뛴 뒤 새 수준의 90%에 도달하기까지 19봉 대 59봉으로 측정했습니다.

일반적인 설정

설정 일반적인 값 비고
기간 14 관행적인 기본값. 짧은 기간(7–10)은 더 빨리 반응하고, 긴 기간(20–30)은 더 매끄러워 일봉 시스템에 맞습니다.
손절 배수 1.5–2.5 × ATR 대략 1.5 아래에서는 대부분의 상품에서 손절이 통상적인 움직임 안에 들어갑니다.
트레일링 배수 2–3 × ATR 보통 진입 손절보다 넓게 잡아, 정상적인 되돌림이 추세 거래를 끝내지 않도록 합니다.
목표 배수 2–4 × ATR 조건이 바뀌어도 손익비를 안정적으로 유지합니다.
읽어 오는 시간대 전략 자신의 시간대 M5의 ATR과 D1의 ATR은 서로 다른 질문을 설명합니다. 섞으면 모든 거리가 조용히 바뀝니다.

자주 생기는 운용 문제

  • 지표 핸들을 OnTick 안에서 만들어 핸들이 누수되고 결국 실패하는 경우 — 핸들의 자리는 OnInit입니다.
  • 시작 시 충분한 히스토리가 로드되기 전에 CopyBuffer가 요청보다 적은 값을 반환해, ATR이 0이 되고 따라서 거리가 0인 손절이 만들어지는 경우.
  • 형성 중인 봉에서 ATR을 읽어, 손절 거리가 봉의 어느 시점에 신호가 발생했는지에 좌우되는 경우.
  • 포인트와 핍 혼동: ATR은 가격 단위로 반환되며, 5자리 호가에서는 12가 아니라 0.00120을 뜻합니다. 이를 핍처럼 곱하면 손절이 백 배 넓거나 백 배 좁아집니다.
  • ATR 기간과 배수를 같은 구간에서 함께 최적화해, 그 구간 특유의 되돌림에 두 값을 맞춰 버리는 경우.

관련 MT5 함수

iATR(symbol, timeframe, ma_period)
지표 핸들을 만듭니다. OnInit에서 한 번 호출하고 핸들을 보관하십시오.
CopyBuffer(handle, 0, start, count, array)
버퍼 0에서 ATR 값을 읽습니다. 이 지표가 가진 유일한 버퍼입니다.
SymbolInfoDouble(symbol, SYMBOL_POINT)
가격 단위의 ATR을, 손절 거리를 표현하는 단위인 포인트로 변환합니다.
NormalizeDouble(price, _Digits)
계산된 손절 레벨을 전송 전에 종목의 정밀도에 맞춰 반올림합니다.

예시

같은 리스크 규칙을 두 변동성 국면에 적용한 예입니다. EA에서 바뀌는 것은 없습니다. 바뀌는 것은 그것이 재는 데 쓰는 자입니다.

조용한 국면 — ATR(14)
12핍
2 × ATR 손절은 24핍입니다.
변동성 큰 국면 — ATR(14)
34핍
같은 2 × ATR 손절이 68핍이 됩니다.
거래당 리스크
10,000달러의 1% = 100달러
랏 크기, 조용 / 변동
0.42 / 0.15
감수 금액은 같고 거리가 다르므로 크기도 달라집니다.

랏을 줄이지 않고 손절만 넓혔다면 위험에 놓인 돈이 세 배가 되었을 것입니다. ATR은 두 축이 함께 움직일 때만 도움이 됩니다.

계산 100 ÷ (24 × 10) = 0.42 · 100 ÷ (68 × 10) = 0.15

결과 하나의 리스크 규칙이 두 개의 손절 거리와 두 개의 포지션 크기를 만들어 냅니다

사용하는 법

ATR은 거리이지 신호가 아닙니다. EA에게 얼마나 멀리 둘지를 알려 줄 뿐, 두어야 하는지는 결코 알려 주지 않습니다.

구간 의미
현재 ATR이 백테스트 평균보다 훨씬 낮음 ATR로 정의한 목표도 그만큼 줄어들어, 비용은 고정인데 전략은 더 작은 수익만 챙기게 됩니다.
현재 ATR이 백테스트 평균에 가까움 설정을 맞춰 둔 바로 그 조건입니다. 공개된 기대치가 그대로 적용됩니다.
현재 ATR이 백테스트 평균보다 크게 높음 고정 핍 손절은 이제 잡음 안에 들어갑니다. ATR 기반 손절은 넓어지고, 이를 상쇄하려면 포지션 크기가 줄어야 합니다.
ATR을 진입 신호로 사용 잘못된 사용입니다. 방향이 없기 때문에, 높은 값은 시장이 움직인다는 뜻이지 어느 쪽으로 가는지가 아닙니다.
  • EA의 모든 거리를 ATR의 배수로 표현하고, 핍 개수가 아니라 그 배수를 최적화하십시오. 결과가 종목과 국면 사이에서 훨씬 잘 옮겨집니다.
  • 종목 간에 ATR 원값을 절대 비교하지 마십시오. GBP/JPY의 40핍과 EUR/USD의 40핍은 활동 수준이 다릅니다. 비교가 필요하면 가격으로 나누십시오.
  • ATR 기간을 보유 기간에 맞추십시오. 일봉 ATR을 읽는 스캘퍼는 자신이 결코 들어가 있지 않을 움직임에 맞춰 크기를 정하는 셈입니다.
  • 배수가 인접한 값에서도 안정적인지 확인하십시오. 2.0 × ATR에서는 되는데 1.8이나 2.2에서는 안 되는 손절은 테스트 구간에 맞춰진 것입니다.

[ATR 지표 전체 페이지](/ko/indicators/atr)에서 계산과 설정을 자세히 다룹니다. MetaTrader의 iATR이 와일더의 평활이 아니라 이동 창이라는 우리 측정 결과도 그곳에 있습니다. 이 항목은 ATR이 EA의 리스크 규칙 안에서 하는 역할에 관한 것입니다.

흔한 오해

ATR을 방향 신호로 다루기

이동한 거리를 잴 뿐 어느 쪽인지는 재지 않습니다. ATR이 오른다는 것은 시장이 더 많이 움직인다는 뜻이며, 이는 추세에서도 급락에서도 격렬한 횡보에서도 똑같이 일어납니다.

랏을 줄이지 않고 ATR 손절만 넓히기

적응형 손절의 취지는 거래당 리스크를 일정하게 유지하는 것입니다. 거리가 세 배가 되었는데 크기가 줄지 않았다면, 세 배가 된 것은 손실입니다.

가격 단위와 핍을 혼동하기

iATR은 가격 거리를 반환합니다. 5자리 EUR/USD에서 12가 아니라 0.00120입니다. 이를 핍으로 취급하는 코드는 손절을 백 배 멀리 또는 백 배 가까이 두며, 결과가 망가지는 게 아니라 그냥 나빠지기 때문에 테스트에서 놓치기 쉽습니다.

형성 중인 봉에서 ATR 읽기

인덱스 0은 매 틱마다 바뀌므로 같은 신호라도 발생 순간에 따라 손절이 달라집니다. 재현되어야 하는 모든 것에는 마지막으로 완성된 봉을 쓰십시오.

자주 묻는 질문

EA는 어떤 ATR 기간을 써야 하나요?
14가 관행적인 기본값이며 합리적인 출발점입니다. 7에서 10 사이의 짧은 기간은 조건 변화에 더 빨리 반응하지만 잡음이 많고, 20에서 30은 더 매끄러워 일봉 기반 전략에 맞습니다. 정확한 값보다 중요한 것은 테스트했을 때 인접한 설정에서도 안정적으로 유지되는가입니다.
ATR을 손절 거리로 어떻게 바꾸나요?
곱하면 됩니다. 2 × ATR 손절은 진입에서 평균 봉 범위 두 개만큼 떨어져 있으며, 대부분의 상품에서 통상적인 움직임 바깥입니다. 빠뜨리면 안 되는 두 번째 단계는 그 거리와 리스크 한도로 랏 크기를 계산하는 것입니다. 그래야 손절이 넓어질 때 손실이 커지는 게 아니라 포지션이 작아집니다.
ATR이 고정 핍 손절보다 나은가요?
수년간 무인으로 돌아가는 EA라면 대체로 그렇습니다. 고정 거리는 변동성 국면마다 다른 뜻이 되지만 ATR 배수는 언제나 같은 뜻이기 때문입니다. 대가는 과최적화되지 않도록 지켜야 할 파라미터가 하나 더 늘어난다는 점입니다.
MT5의 ATR은 와일더의 ATR과 같나요?
정확히는 다르며, 설정을 옮겨 올 때 이 차이가 중요합니다. 와일더는 실제 범위를 평활하므로 지나간 모든 봉이 값 안에서 계속 감쇠합니다. 반면 MetaTrader에 포함된 ATR은 고정 창을 굴리는데, 이는 단순이동평균입니다. 둘 다 가중치의 합이 1인 선형 필터라서 장기 수준은 일치합니다. 기간 20으로 2,700봉에 걸쳐 9.571 대 9.573핍을 측정했습니다. 다른 것은 반응입니다. 한 봉에서 변동성이 세 배로 뛴 뒤 MetaTrader 버전은 19봉 만에 새 수준의 90%에 도달했고 와일더 버전은 59봉이 걸렸습니다. 그래서 2 × ATR 손절은 와일더 기반 플랫폼에서의 같은 규칙보다 MT5에서 더 일찍 넓어지며, 기간을 맞춰도 둘이 합쳐지지 않습니다. 와일더의 20에 가장 가까운 iATR 기간은 32–33으로 측정되었습니다.
ATR이 추세 방향을 알려 주나요?
아니요. 순수한 거리 척도이며 방향 성분이 전혀 없습니다. 추세 강도에는 보통 ADX를 함께 쓰고, 방향은 이동평균이나 가격 구조에서 가져옵니다.

관련 글