English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
ADX 기반의 트레이딩 시스템을 설계하는 방법 알아보기

ADX 기반의 트레이딩 시스템을 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 29 8월 2022, 12:02
355 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이 기사는 우리가 트레이딩에서 더 좋은 결과를 내고 시장의 움직임을 이해하는 데 도움이 될 수 있는 가장 유용하고 의미 있는 도구 중 하나인 새로운 기술적 거래의 도구에 대해 다룰 것입니다. 기술적 지표의 가장 유용한 기능 중 하나는 가격이 표시할 수 없는 것을 우리에게 보여줄 수 있는데 모든 지표는 계산을 기반으로 하기 때문입니다. 이러한 유용한 지표 중 하나는 평균 방향성 지수(ADX) 지표입니다. 이 지표를 자세히 배우면 잘 이해하고 간단한 전략을 통해 쉽게 사용할 수 있는 방법을 배우게 됩니다. 무언가를 깊이 배울 때 더 많은 통찰력을 얻을 수 있고 더 잘 사용할 수 있게 되는 것입니다.

우리는 다음의 주제를 통해 그것을 배울 것입니다:

  1. ADX 정의
  2. ADX 전략
  3. ADX 전략 청사진
  4. ADX 거래 시스템
  5. 결론

ADX 정의를 통해 ADX(average directional index) 지표가 무엇이고 무엇을 측정하는지에 대해 깊이 이해하고 또한 유용하게 사용할 수 있도록 수동으로 계산하는 방법에 대해 자세히 설명합니다. 지표와 그 작동 방식을 잘 이해한 후 거래에 사용할 수 있는 간단한 전략을 배우게 될 것입니다. 이는 ADX 전략이라는 부분 이후에 다루어 질 것입니다. 그런 다음 ADX 전략 청사진에서 이 전략을 사용 하기 위해 거래 시스템을 설계하는데 필요한 코드를 작성하는 데 도움이 되는 청사진을 설계하는 방법을 배웁니다. 그런 다음 이 전략을 사용하여 거래 시스템을 작성하는 방법을 배우고 ADX 거래 시스템에 대한 내용을 다룰 것입니다.

우리는 MetaTrader 5 거래 플랫폼과 MetaTrader 5에 내장된 MetaQuotes 언어 편집기를 사용할 것이며 다음 링크에서 다운로드할 수 있습니다: https://www.metatrader5 .com/en/download

MetaTrader 5를 다운로드하여 설치하면 다음 그림과 같은 모습을 볼 수 있을 것입니다.

MT5 

여러분께 드리고 싶은 말은 이 기사에서 저는 여러분이 기술을 빠르게 개발하고 주제에 대해 깊은 이해를 할 수 있도록 할 것이므로 이 기사의 모든 내용을 직접 적용해 보라는 것입니다. 연습은 모든 개발에서 중요한 부분입니다. 우리는 기술적인 도구를 사용하여 거래 시스템을 설계하는 방법을 배우고 MQL5에서 Expert Advisor나 프로그램을 만드는 몇 가지 코드를 작성하여 이를 수행할 것입니다. 그러므로 모든 개념을 적용하고 직접 테스트하는 것이 좋습니다. 테스트하고 적용할 데모 계정도 있어야 하며, 잘 모르는 경우 MetaTrader 5 터미널에서 파일 탭을 눌러 MetaTrader 5를 통해 데모 계정을 열어서 할 수 있습니다 --> 계정 열기 --> 브로커 이름을 입력하여 이 데모 계정을 열거나 MetaQuotes 선택 --> 다음 --> 데모 계정 열기를 선택하여 위험 없이 가상의 자금으로 거래 --> 다음 --> 데이터를 입력하고 계정 요구 사항을 결정한 다음 동의함 --> 다음 --> 옆에 체크 표시하면 데모 계정 자격 증명 --> 마침.

이제 이 계정을 사용하여 파일 탭 --> 거래 계정에 로그인 --> 데모 계정 자격 증명을 입력하고 확인을 눌러 계정을 열어 가상으로 거래할 수 있습니다.

면책: 모든 정보는 교육 목적으로만 '있는 그대로'이며 거래의 목적이나 조언을 위해 준비되지 않았습니다. 모든 정보는 결과를 보장하지 않습니다. 귀하의 거래 계정에서 이들 자료를 사용하기로 한 경우 귀하는 이에 대한 위험을 감수해야 하며 이에 대한 책임은 귀하에게만 있습니다.

이제 거래 결과를 더 좋게 만들 수 있는 새로운 도구를 배우기 시작하겠습니다.


ADX 정의

이 부분에서는 기술적 거래의 세계에서 가장 인기있는 지표 중 하나에 대해 자세히 설명하여 그것이 무엇인지, 무엇을 측정하는지를 포함하여 이를 더 잘 이해할 수 있도록 하는 그 계산하는 방법을 알아보고 잘 사용할 수 있도록 합니다. 우리는 이를 통해 사용 가능한 전략은 물론 새로운 아이디어를 적용하여 거래할 수 있습니다. 이 지표는 평균 방향성 지수(ADX)로 Welles Wilder가 개발한 것으로 그 계산에 따라 한 기간의 거래 범위를 이전 기간의 거래 범위와 비교하여 추세를 측정하고 추세가 있는지를 확인합니다.

이러한 비교의 결과로 다음을 알 수 있습니다:

  • 상승 또는 하락(양의 방향 이동 또는 음의 방향 이동).
  • 상승도 하락도 없습니다.
  • 상승과 하락.

양의 방향의 움직임이 있으면 기간의 고가가 이전 기간의 고가를 초과했음을 의미하며 기호는 (+DM)입니다.

다음 그림은 가격의 움직임에 따라 차트에 표시되는 방법을 보여줍니다

+DM

그리고 그 반대의 경우에도 마찬가지입니다. 만약 음의 방향의 움직임이 있으면 종가의 저점이 이전 종가의 저점을 넘어섰음을 의미하며 그 기호는 (-DM)입니다.

다음 그림은 가격의 움직임에 따라 차트에 표시되는 방법을 보여줍니다

-DM

양의 방향의 움직임이 없고 음의 방향의 움직임도 없다면 이는 고점은 이전 고점을 초과하지 않았고 저점도 이전 저점을 초과하지 않았음을 의미합니다.

다음 그림은 가격의 움직임에 따라 차트에 표시되는 방법을 보여줍니다

아니요 +DM-DM

양의 방향의 움직임과 음의 방향의 움직임이 모두 있는 경우 고점은 이전 고점을 초과하고 저점은 이전 저점을 초과했음을 의미합니다.

다음 그림은 가격의 움직임에 따라 차트에 표시되는 방법을 보여줍니다 

 +DM-DM

더 많은 통찰력을 얻기 위해 계산 방법을 자세히 알면 도움이 됩니다. 다음은 (ADX)를 계산하는 단계이며 모든 값은 절대값이어야 합니다.

1- +DM 및 -DM 계산:

이 단계에서 우리는 이전의 움직임과 비교하여 현재의 움직임에 대해 위 또는 아래로의 움직임이 있는지 확인해야 합니다. 따라서 두 가지를 계산합니다.

  • (+DM)은 상방의 움직임이 있는 경우 양의 방향의 움직임을 나타냅니다. 
(+DM = 현재 고가 - 이전 고가)로 계산됩니다.
  • (-DM)은 하방의 움직임이 있는 경우 음의 방향의 움직임을 나타냅니다. 
이는 (-DM = 현재 저점 - 이전 저가)로 계산됩니다.

그래서 계산된 기간마다 확인하고 +DM인지 -DM인지 확인합니다.

  • +DM이 있는 경우:
+DM=n
-DM = 0
  • -DM이 있는 경우:

-DM = n

+DM = 0

어떤 경우에는 (+DM 및 -DM)에 대한 값이 없거나 (+DM 및 -DM)에 대한 값을 모두 찾을 수 있는 다른 시나리오를 찾을 수 있으며 다음은 이를 어떻게 처리하는지에 대한 내용입니다:

  • (+DM 및-DM)이 없는 경우:

+DM = 0

-DM = 0

없음 DM 없음

  • +DM과 -DM이 모두 있는 경우 +DM과 -DM을 비교하고 가장 큰 값을 고려하거나 서로 동일한 값이 있으면 무시합니다.
+DM>-DM = +DM만 고려,

 +DM 더 크게

+DM<-DM = -DM만 고려

-DM 이상

+DM=-DM = 둘 다 무시

+DM은 -DM과 동일합니다.

2- 실제 범위(True Range) 계산:

이 단계에서 DM을 계산한 이후 (TR)을 계산하며 다음 중에서 가장 큰 값이 됩니다:

  • 현재 고가와 저가 간의 차이입니다.
  • 현재 고가와 이전 종가 간의 차이입니다.
  • 현재 저점과 이전 종가 간의 차이입니다.
3- 계산된 14개 기간의 합계 계산(+DM, -DM 및 TR)

계산된(+DM, -DM 및 TR)의 처음 14개 기간을 계산한 후 다음 공식을 사용하여 14개 이후의 값을 계산합니다:

+DM 15 = (이전 +DM - (이전 +DM/14)) + 현재 +DM

-DM 15 = (이전 -DM - (이전 -DM/14)) + 현재 -DM

TR 15 = (이전 TR - (이전 TR/14)) + 현재 TR

4- 14주기 +DI 및 -DI 계산
+DI 14 = 100*(+DM14/TR14)
-DI 14 = 100*(-DM14/TR14)

5- +DI와 -DI의 차이 계산

DI 14 차이 = (+DI 14) - (-DI 14)

6- +DI와 -DI의 합 계산

DI 14 합계 = (+DI 14) + (-DI 14)

7- DX 계산

DX = 100*((+DI와 -DI의 차이)/(+DI와 -DI의 합))
8- ADX 계산
ADX = DX의 평균 14주기

앞에서 살펴본 단계를 통해 ADX를 계산할 수 있으며 이제 이 단계를 적용하는 예를 살펴보겠습니다, 다음과 같은 데이터가 있는 경우:

고가 저가 종가
1 110 90 100
2 140 120 130
3 160 120 140
4 150 110 130
5 140 100 130
6 150 130 140
7 170 150 160
8 180 160 170
9 170 150 155
10 170 130 140
11 180 155 160
12 190 175 180
13 220 190 190
14 230 200 200
15 215 205 210
16 200 190 200
17 195 180 190
18 195 180 185
19 210 185 195
20 220 190 200
21 233 195 208
22 246 200 216
23 258 205 223
24 271 210 231
25 283 215 238
26 296 220 246
27 308 225 253
28 321 230 261
29 333 235 268
30 346 240 276

앞의 데이터에 대한 ADX를 계산해 보겠습니다:

1- +DM 및 -DM 계산:

+DM = 현재 고점 - 이전 고점

-DM = 현재 저점 - 이전 저점

예 - DM

2- TR 계산:

다음 중에서 가장 큰 값이 됩니다:

  • 현재 고가와 저가 간의 차이입니다.
  • 현재 고가와 이전 종가 간의 차이입니다.
  • 현재 저점과 이전 종가 간의 차이입니다.

다음 그림은 TR을 계산한 후의 그림입니다:

예 - TR

3- +DM, -DM 및 TR로 계산된 14개 기간의 합계를 계산합니다:

+DM 14 = 합계 +DM 1(2일차: 15일차)

-DM 14 = 합계 -DM 1(2일차: 15일차)

TR 14 = TR 합계(2일차: 15일차)

예 - 14 DM-TR

4- 14 기간 +DI 및-DI를 계산하고 14 DI를 계산하려면 14 DM이 필요하므로 첫 번째 계산은 15일째부터입니다:

+DI14 = 100*(+DM14/TR14)

-DI14 = 100*(-DM14/TR14)


5- +DI와 -DI의 차이 계산

DI 14 차이 = (+DI 14) - (-DI 14)

6- +DI와 -DI의 합 계산

DI 14 합계 = (+DI 14) + (-DI 14)

DI14 - 차이와 합계

7-DX계산:

DX = 100*((+DI와 -DI의 차이)/(+DI와 -DI의 합))


DX

8- ADX를 계산하면 ADX를 계산하는 데 14일이 더 필요하므로 첫 번째 계산은 28이 됩니다:

ADX = DX의 평균 14개 기간 --> 평균 DI(day 15: day 28)


ADX

여기서는 ADX 지표를 수동으로 계산했지만 MetaTrader 5에 내장되어 있으므로 실제 수동으로 할 필요는 없습니다. ADX 지표와 작동 방식에 대해 깊은 이해를 하기 위해 계산하는 방법을 배운 것입니다. 차트에 삽입해야 하는 경우 (삽입 --> 지표 --> 추세 --> 평균 방향성 이동 지수) 및 다음을 통해 거래 터미널에서 사용 가능한 지표 중에서 선택하기만 하면 됩니다. 다음은 이를 어떻게 하는지를 보여줍니다.

ADX 인서트

"Average Directional Movement Index"를 선택하면 다음 창이 나타납니다:

ADX 창

이 창은 ADX 지표의 매개변수를 위한 것으로 다음과 같습니다.
  1. 원하는 기간을 결정합니다.
  2. ADX 라인의 색상을 결정합니다.
  3. ADX 라인의 유형을 결정합니다.
  4. ADX 라인의 두께를 결정합니다.
  5. +DI 라인의 색상을 결정합니다.
  6. +DI 라인의 유형을 결정합니다.
  7. +DI 라인의 두께를 결정합니다.
  8. -DI 라인의 색상을 결정합니다.
  9. -DI 라인의 유형을 결정합니다.
  10. -DI 라인의 두께를 결정합니다.

ADX 매개변수를 정하고 확인을 누르면 차트에 첨부되며 다음 그림과 같을 것입니다.

ADX 부착

ADX 전략

이 부분에서는 ADX 지표에서 사용할 수 있는 간단한 전략을 볼 것이며 여기에서는 ADX 지표에 대한 몇 가지 간단한 전략만 제시한다는 점을 말씀 드리고 싶습니다. ADX는 간단한 전략에서 복잡한 전략까지 있지만 이 기사를 통해 지표의 개념을 이해하고 이를 기반으로 한 거래 시스템을 설계하는 방법을 배우기 위해 간단한 전략에 대해서만 알아 볼 것입니다.

ADX 지표느 그 계산에 사용된 개념을 기반으로 추세가 있는지 여부를 보여줍니다. 이러한 추세(위 또는 아래)가 무엇이든 간에 ADX 곡선이 위로 이동하면 추세가 있고 그 반대도 마찬가지입니다. ADX 곡선이 아래로 이동하면 추세가 없음을 의미합니다. 우리는 먼저 추세를 정의해야 하며 다음과 같습니다:

추세 정의:

참고로 가격의 움직임은 우리가 세 가지 유형의 추세(상승 추세, 하락 추세 및 횡보)의 유형을 보여주기 때문에 매우 중요합니다.

상승 추세: 이 시장 움직임에서 가격이 더 높은 저점과 더 높은 고점을 만들고 가격이 상승하고 매수자가 시장을 통제하는 것을 볼 수 있는 것은 시장 방향 또는 추세입니다.

다음 그림은 이러한 시장 방향 또는 추세의 형성을 보여줍니다:

상승 추세 형성

다음 그림은 시장에서 볼 수 있는 상승 추세의 예입니다:

상승 추세 예시

하락 추세: 가격이 더 낮은 고점과 더 낮은 저가를 생성하고 가격이 하락하고 매도자가 이 시장 움직임에서 시장을 통제하는 시장 방향 또는 추세입니다.

이 시장의 방향 또는 추세 형태의 형성은 다음과 같습니다.

하락 추세 형성

다음 그림은 시장의 하락 추세를 보여주는 예입니다:

하락 추세 예시

횡보: 상승추세나 하락추세를 제외한 모든 시장의 방향으로 뚜렷한 방향이 없고 매수자와 매도자 간에 균형이 있습니다.

다음은 이러한 시장의 형태입니다.

옆모습 1

옆모습 2

옆으로 형태 3

옆모습 4

다음은 시장에서 볼 수 있는 횡보의 예입니다:

옆으로 라이브 예제

추세를 파악한 후 ADX의 개념에 따라 사용할 수 있는 간단한 전략에 대해 살펴보겠습니다.

  • 전략 1: 단순 ADX 시스템 - ADX 이동:

전략은 ADX 곡선의 움직임을 기반으로 하며,

현재 ADX 값 > 이전 ADX 값 = ADX가 상승 중입니다.

현재 ADX 값 < 이전 ADX 값 = ADX가 떨어지고 있습니다.

  • 전략 2: 단순 ADX 시스템 - 상승 추세:

이 전략에 따르면, 상승세 동안,

ADX 값 > 25 및 현재 ADX 값 > 이전 ADX 값 --> +DI 값 > -DI 값 = 매수

  • 전략 3: 단순 ADX 시스템 - 하락세:

이 전략에 따르면 하락세 동안,

ADX 값 > 25 및 현재 ADX 값 > 이전 ADX 값 --> +DI 값 < -DI 값 = 매도


ADX 전략 청사진

이 부분에서는 거래 시스템을 만드는 데 도움이 되는 각 전략에 대한 청사진을 설계해 봅니다. 이 청사진은 프로그램이나 시스템이 수행해야 하는 작업을 단계별로 구성하고 설정합니다.

  • 전략 1: 단순 ADX 시스템 - ADX 이동:

이 전략에 따르면 현재 ADX 값과 이전 ADX 값을 확인하고 현재 ADX가 이전 값보다 큰 경우 현재 ADX 값이 이전 ADX 값보다 큰지 여부를 결정하기 위해 매 틱마다 프로그램이 필요합니다. 이후 "ADX가 상승 중", "ADX 값이 (n)"인 새 라인, "마지막 ADX 값이 (n)"인 다른 새 라인으로 차트에 주석을 표시하는 시스템이 필요합니다. 현재 ADX 값이 이전 ADX보다 작으면 시스템이 차트에 "ADX가 떨어지고 있습니다"라는 주석을 표시해야 합니다. 현재 ADX가 이전 ADX와 같으면 시스템은 아무 작업도 수행하지 않아야 합니다.

다음 그림은 이 전략의 청사진을 보여줍니다:

ADX 운동 청사진

  • 전략 2: 단순 ADX 시스템 - 상승 추세:

이 전략에 따르면 현재 ADX 값, 이전 ADX 값, +DI 값 및 -DI 값을 모든 틱마다 확인하는 시스템이 필요하며 시스템은 현재 ADX 값이 25보다 큰지 여부와 이전 ADX 값이 어떠한지를 결정할 수 있어야 합니다. 둘 다보다 크지 않으면 시스템은 아무 것도 하지 않아야 합니다. 둘 모두보다 크면 +DI와 -DI를 확인하는 시스템이 필요합니다. +DI가 -DI보다 크거나 작으면 +DI이면 -DI보다 크면 시스템이 매수 신호의 주석을 나타내야 합니다. ADX 값은 (n), ADX 값은 마지막 값은 (n), +DI 값은 (n), -DI 값은 (n) 또는 +DI는 -DI보다 크지 않은 경우 아무 것도 하지 않는 시스템이 필요합니다.

다음 그림은 이 전략의 청사진을 보여줍니다:

ADX - 매수 신호 청사진

  • 전략 3: 단순 ADX 시스템 - 하락세:

이 전략에 따르면 현재 ADX 값, 이전 ADX 값, +DI 값 및 -DI 값을 모든 틱마다 확인하는 시스템이 필요하며 현재 ADX 값이 25 미만이고 이전 ADX 값은 어떠한지 결정해야 합니다. 둘 다 작지 않으면 시스템이 아무것도 하지 않습니다. 둘 다 작으면 +DI와 -DI를 확인하는 시스템이 필요합니다. +DI가 -DI보다 작으면 시스템은 매도 신호를 주석으로 나타내야 합니다. ADX 값은 (n), 마지막 ADX 값은 (n), +DI 값은 (n), -DI 값은 (n) 또는 +DI가 -DI보다 작지 않은 경우 시스템은 아무 것도 하지 않아야 합니다.

다음 그림은 이 전략의 청사진을 보여줍니다:

ADX - 매도 신호 청사진

ADX 거래 시스템

이 부분은 가장 흥미로운 부분일 것입니다. 여기서는 MetaTrader 5 거래 터미널에서 이러한 간단한 전략을 사용하기 위한 거래 시스템을 만드는 방법과 내장된 MetaQuotes Language Editor(MQL5)를 사용하여 코드를 작성하는 방법을 알아볼 것입니다. MetaTrader 5 거래 터미널을 여는 동안 이 MetaQuotes 언어 편집기를 열려면 F4 키를 눌러 열거나 MetaTrader 5 -->에서 도구 탭을 클릭한 다음 MetaQuotes 언어 편집기를 선택하십시오.

다음 그림은 그 방법을 보여줍니다.

메타에디터 오프닝 1

또는 IDE 버튼을 눌러도 됩니다.

메타에디터 오프닝 2

그러면 MetaQuotes 언어 편집기가 열립니다. 다음과 같은 창이 열립니다.

메타에디터 창

그런 다음 "새로 만들기"를 클릭하여 거래 시스템을 만들기 위해 새 파일을 엽니다.

메타에디터 창 2

그러면 다음 창이 열립니다.

메타에디터 - 새 파일

다음은 새 파일의 종류와 관련한 옵션입니다.

  1. Expert Advisor: EA는 미리 정해진 조건에 따라 거래 프로세스를 자동화하는 프로그램입니다.
  2. 사용자 지정 지표: 거래 결정을 개선하기 위해 우리가 차트를 읽는 데에 도움이 되는 프로그램 코드입니다.
  3. 스크립트: 실행 후에 하나의 작업을 한 번만 수행할 수 있는 프로그램입니다.

이제 우리는 Expert Advisor EA 파일을 생성을 선택하여 거래 시스템을 만들 것입니다.

현재 ADX 값을 사용하여 차트에 주석을 표시하는 프로그램을 만들고 이를 수행하는 단계는 다음과 같습니다.

  • 가격 배열을 만들고 소수 부분이 있는 값을 나타내는 "double" 함수를 사용합니다.
double PriceArray[];
  • 이 생성된 가격 배열을 현재 데이터에서 정렬하기 위해 "ArraySetAsSeries" 함수를 사용합니다. 성공 시 true를 반환하고 실패 시 false(bool)를 반환합니다. 필수 매개변수는 다음과 같습니다:
참조에 의한 array[] 및 플래그

ArraySetAsSeries(PriceArray,true);

  • "iADX" 함수를 사용하여 ADX 지표의 핸들을 반환합니다. 해당 매개변수는 다음과 같습니다:
기호를 문자열로, 기간은 기간으로, ADX 기간은 기간으로 지정하면 다음과 같을 것입니다:
  • _Symbol: 현재 기호
  • _Period: 현재 차트 주기
  • 14: 기간
int ADXDef = iADX(_Symbol,_Period,14);
  • 생성된 ADX 지표에 따라 데이터를 채우고 "CopyBuffer" 함수를 사용하여 복사된 데이터의 수를 반환하거나 오류가 있는 경우 -1을 반환합니다. 매개변수는 다음과 같습니다:
지표 핸들, 지표 버퍼 번호의 buffer_num, start_time(시작 날짜 및 시간), stop_time(종료 날짜 및 시간) 및 buffer[](타겟 배열).
CopyBuffer(ADXDef,0,0,3,PriceArray);
  • "double" 함수로 "ADXValue"에 대한 변수를 생성한 후 ADX 값을 가져오고 "NormalizeDouble" 함수를 사용하여 사전에 설정된 대로 double 유형의 값을 반환합니다. 매개변수는 다음과 같습니다: 
값을 double(정규화된 숫자)로, 숫자를 정수로(소수점 뒤의 자릿수)
double ADXValue=NormalizeDouble(PriceArray[0],2);
  • 현재 ADX 값과 주석이 나타납니다. "comment" 함수를 사용하고 해당 매개변수는 다음과 같습니다:
모든 값은 쉼표로 구분하고 일부 값을 새로운 라인에 표시해야 하는 경우 줄 바꿈 기호 "\n"을 사용합니다. 
Comment("ADX Value is ", ADXValue);

이 프로그램의 전체 코드를 보려면 다음과 같습니다:

//+------------------------------------------------------------------+
//|                                            Simple ADX System.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//creating an array for prices
   double PriceArray[];

//sort price array from current data
   ArraySetAsSeries(PriceArray,true);

//identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);

//Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,PriceArray);

//Getting value of current data
   double ADXValue=NormalizeDouble(PriceArray[0],2);

//Comment with ADX value
   Comment("ADX Value is ", ADXValue);
  }
//+------------------------------------------------------------------+

이 프로그램을 작성한 후 MetaTrader 5 거래 터미널의 탐색기 창에서 이 프로그램의 파일을 볼 수 있으며 다음과 같이 표시됩니다.

탐색

파일을 더블 클릭하거나 차트에 끌어다 놓으면 다음과 같은 창이 나타납니다:

단순 ADX 창

"Algo Trading 허용"에 체크하고 OK 버튼을 누르면 파일이 차트에 첨부됩니다:

단순 ADX 첨부

그러면 이 거래 시스템에 따른 결과가 나타나며 다음 그림이 그 예입니다:

단순 ADX

이제 현재 ADX 값의 값을 표시하는 항목을 만든 다음 ADX 지표의 다른 값(+DI 값과 -DI 값)을 표시하는 프로그램을 코딩하는 데 필요한 거래 시스템을 설계하는 데 도움이 되는 항목을 추가해야 합니다. 다음은 이를 수행하는 방법입니다:

  • 각 값(ADX 값, +DI 및 -DI)에 대한 가격 배열을 생성하고 "double" 함수를 사용하여 이에 대한 변수 생성:
    • ADXArray: ADX 값 용
    • PDIArray: +DI 값 용
    • NDIArray: -DI 값 용
double ADXArray[];
double PDIArray[];
double NDIArray[];
  • "ArraySetAsSeries" 함수를 사용하여 현재 데이터의 각 값에 대한 각각의 가격 배열 정렬:
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

  • "iADX" 기능을 사용하여 ADX 지표 식별:
int ADXDef = iADX(_Symbol,_Period,14);
  • "CopyBuffer" 기능을 사용하여 식별된 ADX에 따라 데이터를 채움:
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
  • 현재 데이터의 값을 가져오고 "double" 함수를 사용하여 각 값에 대한 변수를 생성. "NormalizeDouble: 함수 사용:
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
  • "comment" 기능을 사용하여 새 라인에 각 값과 함께 주석을 표시:
Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
PDIValue,"\n""-DI Value is ", NDIValue);

다음은 이 Expert Advisor의 전체 코드입니다:

//+------------------------------------------------------------------+
//|                                  Simple ADX System - 3 lines.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating an array for prices
   double ADXArray[];
   double PDIArray[];
   double NDIArray[];
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);

   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray[0],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with ADX value
   Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
   PDIValue,"\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

이 프로그램을 작성한 후 탐색기 창에서 해당 파일을 찾을 수 있습니다:

 탐색 2

파일을 더블 클릭하거나 차트에 끌어다 놓으면 다음과 같은 창이 나타납니다:

단순 ADX - 3줄 창

"Algo Trading 허용" 옆에 체크 표시하고 확인을 누르면 프로그램이 차트에 첨부됩니다:

Simple ADX - 3줄 첨부

그 후에는 이 Expert Advisor에 따라 차트에 값이 표시됩니다:

단순 ADX - 3줄

이제 앞에서 언급한 전략(ADX 움직임, 상승 추세 및 하락 추세)에 대한 거래 시스템을 만들 것입니다.

  • 전략 1: 단순 ADX 시스템 - ADX 이동:

현재 ADX 값 > 이전 ADX 값 = ADX가 상승 중입니다.

현재 ADX 값 < 이전 ADX 값 = ADX가 떨어지고 있습니다.

다음은 이를 수행할 수 있는 프로그램, Expert Advisor의 코드를 작성하는 것입니다.

  • ADX 값에 대한 가격 배열 생성(현재, 이전):
    • ADXArray0: 현재 ADX 값.
    • ADXArray1: 이전 ADX 값.
double ADXArray0[];
double ADXArray1[];

  • 현재 데이터에서 가격 배열을 정렬합니다.
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

  • ADX 식별:
int ADXDef = iADX(_Symbol,_Period,14);
  • ADX에 따라 데이터 채우기:
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
  • 변수를 생성한 후 값 가져오기:
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
  • ADX 값에 따른 ADX 이동 조건 설정:
if (ADXValue>ADXValuelast)
      {
       Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
if (ADXValue<ADXValuelast)
     {
      Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }

다음은 이 전략과 관련한 Expert Advisor를 생성하기 위한 전체 코드입니다.

//+------------------------------------------------------------------+
//|                             Simple ADX System - ADX Movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];

   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
      
   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
   
   //ADX movement signal
   if (ADXValue>ADXValuelast)
      {
         Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
   if (ADXValue<ADXValuelast)
     {
         Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
  }
//+------------------------------------------------------------------+

이 Expert Advisor를 만든 후에는 탐색기 창에서 찾을 수 있습니다:

탐색 - adx3

차트에 더블 클릭하거나 드래그 앤 드롭하면 다음과 같은 창이 나타납니다:

ADX 이동 창 

"Algo Trading 허용" 옆에 체크 표시하고 OK 버튼을 누르면 EA가 차트에 첨부됩니다:

ADX 무브먼트 부착

그 후 조건에 따라 수행할 수 있으며 다음은 테스트 결과의 예입니다:

  • ADX가 상승하면 다음 그림과 같이 Expert Advisor 값이 주석으로 표시되는 것을 볼 수 있습니다:

ADX 움직임 - 상승 


  • ADX가 떨어지면 다음 그림과 같이 Expert Advisor 값이 주석으로 표시되는 것을 볼 수 있습니다:

2.png2.png ADX 이동

  • 전략 2: 단순 ADX 시스템 - 상승 추세:

ADX 값 > 25 및 현재 ADX 값 > 이전 ADX 값 --> +DI 값 > -DI 값 = 매수

다음은 이 전략을 실행할 Expert Advisor를 만드는 방법입니다:

  • 빈 할당으로 "신호"에 대한 변수를 생성하면 그 이후에 계산됩니다. "string" 함수를 사용합니다:
string signal="";
  • 현재 ADX 값, 이전 ADX 값, +DI 값 및 -DI 값에 대한 배열 생성:
    • ADXArray0: 현재 ADX 값
    • ADXArray1: 이전 ADX 값
    • PDIArray: +DI 값 용
    • NDIArray: -DI 값 용 
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
  • 현재 데이터에서 가격 배열을 정렬:
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
  • ADX 지표 식별:
int ADXDef = iADX(_Symbol,_Period,14);
  • 생성된 ADX에 따라 데이터 채우기:
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
  • 현재 데이터 값 가져오기:
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
  • 상승세 전략의 조건 설정:
if (ADXValue>25&&ADXValue>ADXValueLast)
   if(PDIValue>NDIValue)
   {
    signal = "BUY";
   }
  • 새 라인에 매수 신호와 값, 각각을 주석으로 표:
Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
"\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
"\n""-DI Value is ", NDIValue);

다음은 이 전략과 관련한 Expert Advisor를 생성하기 위한 전체 코드입니다.

//+------------------------------------------------------------------+
//|                     Simple ADX System - Uptrend - Buy Signal.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+

void OnTick()
  {
  
   // creating a variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue>NDIValue)
      {
         signal = "BUY";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

그런 다음 탐색기 창에서 Expert Advisor를 찾을 수 있습니다:

탐색 - ADX4

더블 클릭 또는 차트에 드래그 앤 드롭을 하면 아래와 같은 창이 뜹니다,

ADX - 상승 추세 창

"Algo Trading 허용" 옆에 체크 후 확인 버튼을 누르면 Expert Advisor가 연결됩니다.

ADX - 상승 추세 부착

그 후 전략에 따라 나타나는 신호를 볼 수 있습니다:

  • 매수 신호:
  • 현재 ADX 값이 있는 새 라인.
  • 이전 ADX 값이 있는 새 라인.
  • +DI 값이 있는 새 라인.
  • -DI 값이 있는 새 라인.
다음 그림은 이 전략 또는 Expert Advisor의 테스트 결과의 예입니다:


ADX - 매수 신호

  • 전략 3: 단순 ADX 시스템 - 하락세:

ADX 값 > 25 및 현재 ADX 값 > 이전 ADX 값 --> +DI 값 < -DI 값 = 매도

다음은 이 전략을 실행할 Expert Advisor를 만드는 방법입니다:

//+------------------------------------------------------------------+
//|                Simple ADX System - Downtrend - Sell Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
  
   // creating a variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

상승세 전략과 동일한 단계를 거치나 다음과 같은 차이가 있습니다:

  • 하락세 전략의 조건:
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
  • 신호에 따른 주석:
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);

이 전략의 코드를 작성한 후 탐색기 창에서 Expert Advisor 파일을 찾을 수 있습니다:

탐색 - ADX 5

파일을 더블 클릭하거나 차트에 드래그 앤 드롭하면 다음과 같은 창이 나타납니다:

ADX - 하락 추세 창 

"Algo Trading 허용" 옆에 체크 표시하고 OK 버튼을 누르면 차트에 Expert Advisor가 첨부되며 다음 그림은 그 예를 보여줍니다:

ADX - 하락 추세 부착

그런 다음 하락세 전략에 따라 나타나는 신호를 찾을 수 있습니다:

  • 매도 신호.
  • 현재 ADX 값이 있는 새 라인.
  • 이전 ADX 값이 있는 새 라인.
  • +DI 값이 있는 새 라인.
  • -DI 값이 있는 새 라인.

다음 그림은 테스트 했을 때 이 전략에 따라 생성된 신호의 예입니다:

ADX - 매도 신호

결론

이제 여러분은 ADX가 무엇인지, 무엇을 측정하는지, 수동으로 어떻게 계산하는지는 물론 이 지표를 사용하여 거래 시스템을 설계하는 방법에 대해 자세히 알게 되었을 것입니다. 우리는 상승 추세 및 하락 추세 동안 ADX 지표를 기반으로 하는 간단한 전략을 알게 되었고 프로그램이 이를 정확히 수행하도록 하는 데 필요한 사항을 이해하기 위해 단계별로 거래 시스템을 설계하는 데 도움이 되는 청사진을 설계했습니다. 우리는 이러한 ADX 전략을 기반으로 자동으로 작동하는 거래 시스템을 설계하는 방법을 알게 되었고 MQL5(MetaQuotes Language)로 이러한 거래 전략을 수행하도록 하는 코드를 작성하는 방법을 알게 되었습니다.

ADX 지표에는 간단한 전략부터 복잡한 전략까지 거래에 사용할 수 있는 많은 전략이 있지만 여기서는 지표의 기본 개념을 배우기 위해 몇 가지 간단한 전략만 언급했으며 주요 목표는 MQL5를 통해 MetaTrader 5 거래 플랫폼에서 사용할 기술적 접근 방식 및 거래 시스템의 설계와 거래 전략을 배우는 것이었습니다.

제가 부연하고자 하는 것은 거래에 사용할 수 있는 유용한 도구와 전략은 많이 있다는 것입니다. 이러한 도구는 개별적으로 사용하거나 더 나은 결과를 얻기 위해 결합이 가능한 다른 것들과 결합할 수 있으며 이러한 기능은 거래의 결정을 향상시킬 수 있는 다양한 개념을 기반으로 하는 많은 도구가 있기 때문에 기술적 분석의 가장 유용한 기능 중 하나입니다. 이를 통해 거래에서 더 나은 결과가 날 수 있습니다. 몇 가지 간단한 전략에서 사용할 수 있는 다른 인기 있는 지표와 MQL5로 MetaTrader 5에서 사용할 수 있는 다양한 전략을 기반으로 한 간단한 거래 시스템을 설계하는 방법을 다룬 이전의 기사들을 읽어 보는 것도 좋습니다. 따라서 우리의 임무는 이러한 개념과 도구에 대해 알아보고 누군가에게는 유용할 수 있지만 다른 사람에게는 그렇지 않은 많은 전략을 찾아보고 우리의 거래 스타일과 계획에 적합한 것이 무엇인지를 확인하는 것입니다. 그 거래 전략이 유용하고 수익성이 있는지 확인하기 위해 실제 계정에서 사용하기 전에 모든 새로운 전략이나 도구를 테스트해 확인해야 합니다.

프로그래밍은 여러 가지 이유로 이 단계에서 매우 유용할 수 있습니다. 프로그래밍을 통해 쉽고 매끄럽고 정확하게 수행할 수 있습니다. 수익성 있는 전략을 찾게 되면 설계된 프로그램의 조건에 따라 컴퓨터가 자동으로 작동하도록 하는 거래 시스템을 설계할 수 있습니다. 이것은 우리가 거래 과정에서 접하게 되는 좋지 않은 감정을 피할 수 있게 해줄 것이며 따라서 프로그래밍은 성공적으로 거래하는 데 가장 중요한 열쇠 중 하나인 규율에 따라 거래하는 데 도움이 됩니다. 따라서 이러한 목표를 달성하는 데 도움이 될 수 있는 프로그래밍 및 MQL5를 배우는 것이 좋습니다.

이 기사가 새로운 아이디어에 대해 여러분의 눈을 뜨게 하고 기사의 주제나 이외 관련된 주제에 대한 통찰력을 제공하여 거래 결과를 개선하여 지속적으로 더 나은 결과를 얻는 데 도움이 되고 거래에 유용하기를 바랍니다. 우리 거래의 주요 목표는 좋은 결과를 얻고 계속적으로 이익을 달성하는 것이며 이 기사가 여러분의 이러한 귀중한 목표를 달성하는 데 도움이 되기를 바랍니다. 


MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/10715

데이터 과학 및 머신 러닝(파트 03): 행렬 회귀(Matrix Regressions) 데이터 과학 및 머신 러닝(파트 03): 행렬 회귀(Matrix Regressions)
이번에는 우리의 모델이 행렬로 만들어지고 있습니다. 그러므로 유연성이 있으면서 컴퓨터의 계산 한계 내에서 유지되는 한 5개의 독립 변수 뿐만 아니라 많은 변수를 처리할 수 있는 강력한 모델을 만들 수 있습니다. 이 기사가 흥미로울 것이라 확실합니다.
이동 평균으로 할 수 있는 것 이동 평균으로 할 수 있는 것
이 기사에서는 이동 평균 지표를 적용하는 몇 가지 방법에 대해 살펴봅니다. 곡선 분석과 관련된 각각의 방법에는 아이디어를 시각화 하는 지표가 수반됩니다. 대부분의 경우 여기에서 다루는 아이디어는 존경받는 저자들의 것입니다. 저의 유일한 임무는 그것들을 모아 여러분이 주요한 접근 방식에 대해 알아보고 더 합리적인 거래 결정을 내릴 수 있도록 하는 것이었습니다. MQL5 숙련도 수준 - 기본.
Expert Advisor 개발(파트 7): 가격에 볼륨 추가 (I) Expert Advisor 개발(파트 7): 가격에 볼륨 추가 (I)
이것은 현존하는 가장 강력한 지표 중 하나입니다. 어느 정도의 확신을 갖고 거래를 하고자 하는 사람은 차트에 반드시 이 지표가 있어야 합니다. 많은 경우 이 지표는 거래하는 동안 "테이프 읽기"를 선호하는 사람들이 사용합니다. 또한 이 지표는 거래 중 가격의 움직임만을 사용하는 사람들이 활용할 수 있습니다.
데이터 과학 및 기계 학습(파트 02): 로지스틱 회귀 데이터 과학 및 기계 학습(파트 02): 로지스틱 회귀
데이터 분류는 알고리즘 트레이더와 프로그래머에게 중요합니다. 이 기사에서 우리는 예 또는 아니오, 상방 또는 하방, 매수 또는 매도를 식별하는 데 도움이 될 수 있는 분류 로지스틱 알고리즘 중 하나에 초점을 맞출 것입니다.