분류
기술
난이도
중급
사용 상황
전략 설계MT5 운용

평균방향지수 (ADX)

ADX 지표는 추세의 강도를 0에서 100 사이의 척도로 측정하지만 방향은 알려주지 않습니다. EA는 이를 국면 필터로 사용해 추세 전략은 높은 값을, 평균회귀 전략은 낮은 값을 기다립니다.

다른 표현: ADX, Average Directional Movement Index, DMI

업데이트일

쉽게 말하면

시장이 한 방향으로 얼마나 강하게 움직이는지를 말해 주되, 어느 방향인지는 말해 주지 않는 숫자입니다. 값이 낮다는 것은 특별히 어디로도 가고 있지 않다는 뜻이고, 값이 높다는 것은 어딘가로 가고 있다는 뜻이며, 그 부호는 다른 곳에서 가져와야 합니다.

왜 중요한가

대부분의 EA는 진입 로직이 틀려서 실패하는 것이 아니라, 그 로직이 어떤 종류의 시장에서는 맞고 다른 종류의 시장에서는 틀리기 때문에 실패합니다. ADX는 전략에게 지금 어떤 종류의 시장에 있는지에 대한 견해를 부여하는 가장 저렴한 방법이며, 그래서 신호로 쓰이는 경우보다 필터로 쓰이는 경우가 훨씬 많습니다.

  • 서로를 파괴하는 두 계열을 분리합니다. 그리드나 평균회귀 EA는 강한 추세에서 꾸준히 잃고, 추세추종 EA는 횡보 구간에서 서서히 출혈합니다. 임계값 하나가 각각을 상대편의 날씨로부터 지켜 줍니다.
  • 구조상 방향이 없기 때문에 신호가 아니라 필터가 되며, 언제나 방향을 가진 무언가와 짝지어 쓰이는 이유도 여기에 있습니다.
  • 느립니다. 안정성을 주는 평활화는 동시에 추세가 이미 시작된 뒤에야 그것을 확인해 준다는 뜻이므로, 좋은 국면을 일찍 잡기보다 나쁜 국면을 배제하는 데 더 적합합니다.
  • 필터는 검증할 수 있습니다. 같은 전략을 필터를 켠 채와 끈 채로 각각 돌린 뒤, 수익만이 아니라 최대낙폭에서 그 차이를 읽으십시오.

MetaTrader 5에서

MT5에서의 위치

  • 삽입 → 지표 → 추세 → Average Directional Movement Index
  • 지표 창에는 세 개의 선이 그려집니다: ADX 선 자체, +DI, 그리고 −DI
  • DI 쌍이 ADX에는 없는 방향을 담당하며, +DI가 −DI 위에 있는 것이 상승 배열입니다
  • 전략 테스터 → 입력값 — 기간과 임계값은 모두 입력 파라미터이며, 특히 임계값은 과최적화를 유발하기 쉽습니다

EA가 사용하는 방식

  • 핸들은 OnInit에서 생성하고 — iADX(_Symbol, PERIOD_CURRENT, 14) — ADX는 버퍼 0, +DI는 버퍼 1, −DI는 버퍼 2에서 읽습니다.
  • 진입 규칙 앞에 두는 관문으로 사용합니다. 추세 EA는 ADX가 임계값을 넘지 않는 한 즉시 반환하고, 횡보 EA는 임계값 아래로 내려가지 않는 한 반환합니다.
  • DI 선을 사용할 때는 방향 확인용으로 씁니다. 매수는 +DI가 −DI 위, 매도는 그 반대이며, ADX는 따라갈 만한 추세가 애초에 존재하는지를 확인해 줍니다.
  • 형성 중인 봉이 아니라 마지막으로 완성된 봉에서 읽으십시오. 봉 내부에서 임계값을 오가며 깜빡이는 ADX 값은 테스트에서 재현할 수 없는 진입을 만들어 냅니다.
  • 일부 EA는 ADX가 높기만 한 것이 아니라 상승 중일 것까지 요구하는데, 이는 움직임의 끝자락에서 나타나는 강하지만 이미 시들어 가는 값을 걸러 냅니다.

일반적인 설정

설정 일반적인 값 비고
기간 14 관례적인 기본값입니다. 기간이 짧을수록 반응은 빨라지고 임계값을 더 자주 통과하는데, 이는 양방향 모두에 해당합니다.
추세 임계값 20–25 이 위에서 추세추종 로직이 활성화됩니다. 정확한 값보다 이웃한 값들에 대한 안정성이 더 중요합니다.
횡보 임계값 20 미만 그리드와 평균회귀 EA는 무엇이든 진입하기 전에 대개 이 조건을 요구합니다.
강한 추세 40 초과 여기서는 역추세 진입과 평균회귀 진입이 대개 완전히 차단됩니다.
읽어 들이는 시간프레임 진입 시간프레임 또는 그보다 한 단계 위 상위 시간프레임을 읽으면 더 느리고 안정적인 국면 신호를 얻지만, 반응이 늦어지는 대가를 치릅니다.

자주 생기는 운용 문제

  • 핸들을 OnInit이 아니라 OnTick 안에서 생성해 누수가 발생하고 결국 INVALID_HANDLE을 반환하는 경우.
  • 충분한 봉이 로드되기 전 시작 시점에 CopyBuffer가 실패해 ADX가 0으로 읽히고, 그 결과 필터가 조용히 비활성화되거나 반대로 활성화되는 경우.
  • 임계값이 하필 지표가 대부분의 시간을 보내는 자리에 놓여, 필터가 계속 켜졌다 꺼졌다 하며 EA의 행동이 잡음에 의해 결정되는 경우.
  • 임계값을 백테스트 최적값에 맞춰 최적화해, 테스트한 구간에서만 작동하는 숫자를 만들어 내는 경우.
  • ADX를 방향성 지표로 읽고, 하락하는 시장에서 높은 값을 보고 매수에 들어가는 경우.

관련 MT5 함수

iADX(symbol, timeframe, adx_period)
핸들을 생성합니다. OnInit에서 한 번만 호출하고 EA의 수명 내내 유지합니다.
CopyBuffer(handle, 0, …)
ADX 선 자체 — 추세의 강도이며 방향은 없습니다.
CopyBuffer(handle, 1, …) / CopyBuffer(handle, 2, …)
+DI와 −DI, 즉 ADX 선이 파생되어 나온 방향성 쌍입니다.
iTime(symbol, timeframe, 1)
값이 안정적인지 확인하기 위해 EA가 사용하는 완성된 봉의 타임스탬프입니다.

예시

진입 규칙은 하나, 국면 필터는 둘, 조건은 정반대입니다. 규칙은 바뀌지 않습니다. 바뀌는 것은 그 규칙이 발동해도 되는 시점입니다.

ADX 20 미만
횡보 국면
평균회귀와 그리드 로직 허용, 추세 진입 차단.
ADX 20–40
완만한 추세
추세 진입 허용, 역추세 진입은 대개 불허.
ADX 40 초과
강한 추세
평균회귀는 완전히 차단 — 바로 이 국면이 평균회귀를 파괴합니다.
+DI 대 −DI
방향
ADX는 얼마나 강한지를 말하고, 이 쌍은 어느 쪽인지를 말합니다.

국면 필터의 측정 가능한 효과는 대개 더 큰 수익이 아니라 더 작은 낙폭입니다. 이기는 거래를 더하는 것이 아니라 지는 거래를 덜어 내기 때문입니다.

계산 if (adx[1] < TrendThreshold) return; // 횡보 구간에서 추세 EA는 아무것도 하지 않는다

결과 한 번도 잘해 본 적 없는 국면에서는 스스로 손을 놓는 전략

사용하는 법

필터는 그것이 무엇을 덜어 내는지로 판단하십시오. 올바른 비교는 같은 구간에 대해 같은 전략을 필터와 함께, 그리고 필터 없이 돌려 보고 순손익뿐 아니라 최대낙폭까지 읽는 것입니다.

구간 의미
ADX 20 미만 실효 추세가 없습니다. 추세추종 진입의 기대값이 여기서 가장 나쁘며 돌파 신호도 대부분 실패합니다.
ADX 20–40 실제 추세가 진행 중입니다. 추세 로직의 일반적인 작동 구간입니다.
ADX 40 초과 강한 추세이며 이미 후반부인 경우가 많습니다. 추세 진입은 여전히 작동하지만, 역추세와 그리드 전략은 가장 위험한 상태입니다.
백테스트 최적값에 맞춘 임계값 과적합된 파라미터입니다. 믿기 전에 이웃한 임계값들이 비슷한 결과를 내는지 확인하십시오.
  • 필터는 패키지의 일부가 아니라 하나의 변경으로 테스트하십시오. 같은 데이터에서 필터를 끈 채 전략을 돌리고 최대낙폭, 거래 횟수, 손익비를 비교하십시오.
  • 거래 횟수가 줄어들 것을 예상하십시오. 거래 횟수를 줄이지 않는 필터는 아무것도 거르지 않고 있는 것입니다.
  • ADX는 완성된 봉에서 읽고, 국면 판단에는 상위 시간프레임을 고려하십시오. 그래야 전략이 한 세션에 여러 번 성격을 바꾸지 않습니다.
  • 방향을 정하는 데 이것만 쓰지 마십시오. 부호는 +DI/−DI 쌍이나 이동평균이 공급해야 합니다.

ADX의 `/indicators` 페이지는 계산 방식과 차트 읽는 법을 다룹니다. 이 항목은 EA의 국면 필터로서의 활용을 다룹니다.

흔한 오해

ADX를 강세 또는 약세 신호로 읽는 것

부호가 없는 강도 측정치입니다. 폭락 중의 높은 값은 급등 중의 높은 값과 정확히 똑같이 높으며, 그래서 언제나 방향성을 가진 무언가와 함께 쓰입니다.

지표가 머무는 자리에 임계값을 두는 것

ADX가 대부분의 시간을 임계값 근처에서 보낸다면 필터는 끊임없이 전환되고 전략의 행동은 잡음이 결정하게 됩니다. 임계값은 드물게, 그리고 분명하게 돌파될 때 쓸모가 있습니다.

필터를 공짜라고 여기는 것

모든 필터는 거래를 덜어 내며, 여기에는 수익 거래도 포함됩니다. 관건은 수익보다 손실을 더 많이 덜어 내는가이며, 이는 가정이 아니라 측정의 문제입니다.

더 빨리 반응하려고 짧은 ADX 기간을 쓰는 것

ADX는 설계상 두 번 평활화됩니다. 기간을 줄이면 양방향 모두에서 임계값을 더 자주 통과하게 되어, 진입이 빨라지기보다 톱니질이 늘어나는 것이 보통입니다.

자주 묻는 질문

ADX가 어느 수준이면 추세로 봅니까?
대략 20에서 25를 넘는 값이 시장을 추세 국면으로 취급하는 관례적 임계값이고, 40을 넘으면 강한 추세로 봅니다. 정확한 숫자보다 그 안정성이 더 중요합니다. 특정 하나의 값에서, 그리고 특정 하나의 테스트 구간에서만 작동하는 임계값은 국면 규칙이 아니라 과적합된 파라미터입니다.
ADX가 추세의 상승·하락 여부를 알려 줍니까?
아닙니다. ADX 선은 강도만 측정합니다. 방향은 ADX가 만들어져 나온 +DI와 −DI 선에서 나오며 — +DI가 −DI 위에 있는 것이 상승 배열입니다 — 또는 이동평균 같은 별도의 방향성 지표에서 가져옵니다.
EA는 ADX를 필터로 어떻게 사용합니까?
진입 규칙 앞에 놓인 관문으로 사용합니다. 추세추종 EA는 ADX가 임계값을 넘기 전에는 아무것도 하지 않고, 그리드나 평균회귀 EA는 ADX가 임계값 아래로 내려가기 전에는 아무것도 하지 않습니다. 그 효과는 대개 더 큰 수익이 아니라 더 작은 낙폭으로 나타나는데, 필터가 전략이 가장 못 다루는 국면에서 체결된 거래를 덜어 내기 때문입니다.
왜 제 ADX 필터는 결과를 더 나쁘게 만듭니까?
흔한 이유가 두 가지 있습니다. 임계값이 하필 지표가 대부분의 시간을 보내는 자리에 있어 잡음을 따라 전환되고 있거나, 필터가 진입 규칙과 같은 구간에서 최적화되어 국면이라는 개념이 아니라 그 구간의 국면에 맞춰져 있는 경우입니다. 표본 외 데이터에서 필터를 켠 채와 끈 채로 전략을 테스트하면 두 경우를 구분할 수 있습니다.

관련 글