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

디마커로 트레이딩 시스템 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 12 10월 2023, 09:48
365 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이 글은 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법과 관련한 시리즈의 새로운 글입니다. 우리는 트레이딩에 유리하게 사용할 수 있는 새로운 기술 도구 또는 보조 지표에 대해 자세히 알아볼 것입니다. 이 지표는 디마커 지표이며 다음 주제를 통해 이 지표에 대해 다룰 것입니다:

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

여기서 우리는 MetaTrader 5 트레이딩 터미널과 터미널에 내장된 MQL5를 사용하여 트레이딩 시스템 코드를 작성하고 테스트할 것입니다. MetaTrader 5를 다운로드하고 사용하는 방법을 모르는 경우 이전 글에서 메타에디터에서 MQL5 코드 작성하기 에서 자세히 알아볼 수 있습니다.

연습은 모든 학습 단계에서 매우 중요한 요소입니다. 거래 및 프로그래밍 기술을 개발하고 최대한의 이점을 얻으려면 이 기사에서 배운 내용을 직접 적용해 보는 것이 좋습니다. 살펴볼 전략의 주요 목표는 지표의 주요 개념을 배우는 것임을 다시 한번 언급하고 확인하고자 합니다. 이 글의 주요 목표는 교육을 위한 것입니다. 그러므로 여러분은 실제 계좌에서 사용하기 전에 전략을 테스트하여 수익성이 있는지 또는 거래에 적합한 지 확인해야 합니다.

면책: 모든 정보는 정보 제공의 목적으로만 '있는 그대로' 제공되며 거래의 목적이나 조언을 위한 것이 아닙니다. 여기의 정보는 어떤 종류의 결과도 보장하지 않습니다. 귀하의 거래 계정에서 이들 자료를 사용하기로 한 경우 귀하는 이에 대한 위험을 감수해야 하며 이에 대한 책임은 오직 귀하에게만 있습니다.

디마커 정의

디마커 지표에 대해 더 자세히 알아보고 파악하려면 디마커 지표가 무엇인지, 무엇을 측정하는지, 어떻게 계산할 수 있는지, 어떻게 판독하여 유리하게 활용할 수 있는지를 살펴봐야 합니다. 디마커 지표는 오실레이터 기술 도구로 기술 분석가인 토마스 디마크가 만들었습니다. 이 지표의 이름은 제작자로부터 유래되었으며 "DeM" 지표라고도 알려 있습니다. 이 기술 지표는 트레이딩 상품에 대한 수요를 측정하고 현재의 최대 및 최소 가격을 이전 가격과 비교하여 시장 방향성 추세를 평가합니다.

이 지표를 수동으로 계산하려면 다음 단계를 수행하면 됩니다:

DMark (i) = SMA (DeMax, N) / (SMA (DeMax, N) + SMA (DeMin, N))

여기서:

  • DMark (i) = 현재 DeMark 값입니다.
  • SMA = 단순 이동 평균
  • DeMax = DeMark의 최대값
  • N = 사용된 기간
  • DeMin = DeMark의 최소값


Demax는 다음과 같이 계산할 수 있습니다:

DeMax(i) = HIGH(i) - HIGH(i-1)

그렇지 않으면:

DeMax (i) = 0


DeMin은 다음과 같이 계산할 수 있습니다:

DeMin(i) = LOW(i - 1) - LOW(i)

그렇지 않으면:

DeMin(i) = 0

지표를 계산하면 앞서 설명한 것처럼 0에서 1 사이의 오실레이터 라인이 생성되고 트레이딩 상품의 수요를 측정하는 것을 확인할 수 있습니다. 지표는 MetaTrader 5 거래 플랫폼에 내장되어 있기 때문에 수동으로 계산할 필요가 없으며 사용 가능한 지표에서 선택하여 차트에 삽입하기만 하면 됩니다.

MetaTrader 5에서 이 디마커 보조 지표를 삽입하는 방법은 다음과 같습니다:

MetaTrader 5 거래 터미널을 열고 삽입 --> 보조 지표 --> 오실레이터 --> 디마커를 누릅니다.

DeM 삽입

그러면 지표의 매개 변수 창이 다음과 같이 표시됩니다:

DeM 매개변수

1 - 기간을 결정합니다.

2 - 지표의 선의 색상을 설정합니다.

3 - 지표의 선의 스타일을 설정합니다.

4 - 지표의 선의 굵기를 설정합니다.

매개 변수를 설정하고 "확인"을 누르면 다음과 같이 차트에 삽입된 지표를 볼 수 있습니다:

DeM 첨부

아래쪽의 이전 차트에서 볼 수 있듯이 지표가 부착되어 있고 0에서 1 사이의 오실레이터 선이 있는 것을 볼 수 있습니다. 우리는 지표의 영역에서 선의 위치를 확인하여 이 지표를 해석 할 수 있습니다. 지표가 0.70에 가까워지면 과매수 상황이고 지표가 0.30에 가까워지면 과매도 상황이라는 뜻입니다.

디마커 전략

이제 디마커 지표의 주요 개념을 바탕으로 디마커 지표를 어떻게 사용할 수 있는지 알아볼 차례입니다. 세 가지 간단한 전략을 통해 사용 방법을 알아 볼 것입니다.

    전략 1: 디마커 강도

      이 전략에 따라 우리는 디마커 값과 지표의 마지막 5 기간 평균을 관찰하여 강세 또는 약세의 디마커 신호를 얻어야 합니다. 디마커 지표의 현재 값이 디마커의 지난 5 기간보다 크면 강세 신호가 됩니다. 다른 경우 지표의 현재 값이 지난 5 기간 디마커보다 낮으면 약세 신호가 됩니다.

      간단히 하면,

      디마커 값 >= 디마커의 5기간 평균 --> 디마커가 강세입니다.

      디마커 값 <= 디마커의 5기간 평균 --> 디마커가 약합니다.

        전략 2: 디마커, OB 및 OS

          이 전략에 따르면 우리는 지표가 과매수 및 과매도 영역에 도달하면 신호를 받아야 합니다. 현재 디마커 값이 0.70 수준보다 크거나 같으면 과매수 영역에 접근하고 있다는 신호입니다. 디마커의 현재 값이 0.30 수준보다 낮으면 과매도 영역에 접근하고 있다는 신호입니다.

          간단히 하면,

          디마커 값 >= 0.70 --> 과매수

          디마커 값 <= 0.30 --> 과매도

            전략 3: 디마커 다이버전스:

              이 전략을 바탕으로 우리는 현재의 가격 움직임이 바뀔 가능성이 있다고 예상하게 하는 강세 또는 약세의 다이버전스 신호를 얻어야 합니다. 현재 고점, 이전 고점, 현재 디마커, 이전 디마커의 네 가지 값을 관찰하여 이러한 신호를 얻어야 합니다. 단순한 다이버전스의 상황의 경우이지만 가장 효과적인 다이전스는 가격의 고점과 저점을 지표의 고점과 저점과 비교하고 관찰 하는 것입니다. 이 간단한 상황에서 현재 고점이 이전 고점보다 크면서 동시에 현재 디마커가 이전 디마커 값보다 낮으면 이때 우리는 약세 다이버전스의 신호를 얻어야 합니다. 반대로 현재 저점이 이전 저점보다 낮은 동시에 현재 디마커 값이 이전 저점보다 크다면 이는 강세 다이버전스의 신호입니다.

              간단히 하면,

              현재 고점 > 이전 고점, 현재 디마커 < 이전 디마커 --> 약세 다이버전스

              현재 저점 < 이전 저점, 그리고 현재 디마커 > 이전 저점 --> 강세 다이버전스

              디마커 전략 청사진

              간단한 전략을 통해 디마커 지표를 사용하는 방법을 배운 후. 이 주제에서는 각각의 전략에 대한 간단한 청사진을 작성하여 이를 위한 트레이딩 시스템을 원활하게 구축하는 데 도움이 되도록 하겠습니다.

                전략 1: 디마커 강도

                  이 전략에 따르면, 두 값을 생성하거나 정의한 후 자동으로 두 값을 확인할 수 있는 거래 시스템을 만들어야 합니다. 이 값은 현재 디마커 값과 최근 5개 디마커 평균 값입니다. 현재 값이 평균보다 크면 트레이딩 시스템에서 차트에 주석으로 다음과 같은 값을 반환해야 합니다:

                  • 강한 디마커
                  • 현재 디마커 값
                  • 5 -기간 AVG DeMarker 값

                  다른 시나리오에서는 현재 값이 평균보다 낮으면 거래 시스템이 이 조건에 따라 다음과 같은 값을 반환해야 합니다:

                  • 디마커가 약합니다.
                  • 현재 디마커 값
                  • 5 -기간 AVG DeMarker 값
                  다음은 이 전략을 수행하는 거래 시스템을 만들기 위한 청사진입니다.

                  디마커 강도 청사진

                    전략 2: 디마커, OB - OS

                      이 전략에 따르면 우리는 특정 조건에 따라 신호를 생성하는 트레이딩 시스템을 만들어야 합니다. 거래 시스템이 현재 디마커 값, 지표의 0.70 수준, 지표의 0.30 수준 등 세 가지 값을 지속적으로 확인하도록 해야 합니다. 현재 디마커 값이 0.70 수준보다 크거나 같으면 트레이딩 시스템은 다음과 같은 값을 차트 주석으로 반환해야 합니다:

                      • 과매수
                      • 디마커 값

                      다른 시나리오에서는 현재 디마커 값이 0.30 수준보다 낮거나 같으면 트레이딩 시스템은 다음과 같은 값을 차트에 반환해야 합니다:

                      • 과매도
                      • 디마커 값
                      디마커 OB, OS 청사진
                        전략 3: 디마커 다이버전스

                          이 전략에 따르면 네 가지 값을 지속적으로 확인하여 강세 또는 약세 다이버전스 신호를 생성하는 트레이딩 시스템을 만들어야 합니다. 현재 고점이 이전 고점보다 크고 동시에 현재 디마커 값이 이전 디마커 값보다 낮은 경우 트레이딩 시스템은 다음과 같은 값을 차트에 주석으로 반환해야 합니다:

                          • 약세 다이버전스.
                          • 현재 고점.
                          • 이전 고점.
                          • 현재 디마커 값
                          • 이전 디마커 값

                          다른 시나리오에서는 현재 저점이 이전 저점보다 낮고 현재 디마커 값이 이전 디마커 값보다 큰 경우 시스템은 차트에 다음과 같은 값을 반환해야 합니다:

                          • 강세 다이버전스
                          • 현재 고점.
                          • 이전 고점.
                          • 현재 디마커 값
                          • 이전 디마커 값

                          다이버전스 청사진

                          디마커 거래 시스템

                          이 부분에서는 살펴본 각 전략을 실행하여 MetaTrader 5에서 자동화 신호를 생성하도록 하는 트레이딩 시스템을 만들 것입니다. 먼저 언급된 모든 전략에서 기본으로 사용할 간단한 트레이딩 시스템을 만들겠습니다. 이 시스템은 디마커 지표의 현재 값을 차트에 주석으로 생성합니다. 이 시스템을 만드는 방법은 다음과 같은 코드 줄로 설명합니다:

                          1단계:

                          분수로 반환되는 "double" 함수를 사용하여 deMarkerArray의 배열을 만듭니다.

                          double deMarkerArray[];

                          2단계:

                          "ArraySetAsSeries" 함수를 사용하여 AS_SERIES 플래그를 deMarkerArray로 설정하도록 합니. 이 함수는 참 또는 거짓의 부울 값을 반환 합니다.

                          ArraySetAsSeries(deMarkerArray,true);

                          3단계:

                          디마커 지표의 핸들을 반환하는 'iDeMarker' 함수를 사용하여 지표를 정의합니다. 매개변수는 다음과 같습니다:

                          • symbol: 심볼을 결정하기 위해 현재 심볼에 적용될 (_Symbol)을 사용합니다.
                          • period: 기간 또는 시간 프레임을 결정하기 위해 현재 시간 프레임에 적용될 (_period)를 사용합니다.
                          • ma_period: 평균 기간을 결정합니다. 우리는 (14)를 사용합니다.
                          int deMarkerDef = iDeMarker(_Symbol,_Period,14);

                          4단계:

                          "CopyBuffer" 함수를 사용하여 디마커 지표의 버퍼에서 데이터를 가져옵니다. 매개변수는 다음과 같습니다:

                          • indicator_handle: 미리 정의된 지표 핸들의 (deMarkerDef)를 사용합니다.
                          • buffer_num: 지표 버퍼 번호를 결정하기 위해 (0)을 사용합니다.
                          • start_pos: 시작 위치를 결정하기 위해 (0)을 사용합니다.
                          • count: 복사할 양을 결정하기 위해 (3)을 사용합니다.
                          • buffer[]: 복사할 대상 배열을 결정하기 위해 (deMarekerArray)를 사용합니다.
                          CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);

                          5단계:

                          "NormalizeDouble" 함수를 사용하여 더블 타입의 값을 반환하여 현재 deMarker 값을 정의합니다. 매개변수는 다음과 같습니다:

                          • value: 정규화된 숫자를 결정합니다.
                          • digits: 소수점 뒤의 숫자 자릿수를 결정합니다.
                          double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);

                          6단계:

                          "comment" 함수를 사용하여 차트에 주석으로 현재 디마커 지표의 값을 반환합니다.

                          Comment("DeMarker Value is ",deMarkerVal);

                          이 트레이딩 시스템의 전체 코드는 아래와 같습니다.

                          //+------------------------------------------------------------------+
                          //|                                       Simple DeMarker 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()
                            void OnTick()
                            {
                             double deMarkerArray[];
                          
                             ArraySetAsSeries(deMarkerArray,true);
                          
                             int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                          
                             CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                          
                             double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                          
                             Comment("DeMarker Value is ",deMarkerVal);
                          
                            }
                          //+------------------------------------------------------------------+
                          

                          이 코드를 컴파일하면 내비게이터에서 다음과 같은 EA를 찾을 수 있습니다:

                          탐색

                          EA를 차트에 끌어다 놓으면 다음과 같은 창이 나타납니다:

                           단순 디마커 윈

                          "확인"을 누르면 EA가 다음과 같이 차트에 첨부되어 있는 것을 확인할 수 있습니다:

                          간단한 디마커 첨부

                          오른쪽 상단의 차트에 심플 디마커 시스템이 차트에 첨부되어 있는 것을 볼 수 있습니다. 이제 우리는 이 전략에 따라 원하는 신호를 얻을 준비가 되었습니다. 언급된 전략의 모든 코드를 컴파일하여 MetaTrader 5에서 실행하는 것은 이전 단계와 동일합니다.

                          다음은 이 거래 시스템에 따라 테스트에서 생성된 신호들입니다:

                          왼쪽 상단의 차트에서 볼 수 있듯이 디마커 지표의 현재 값을 확인할 수 있습니다.

                            전략 1: 디마커 강도:

                              다음은 이 전략을 기반으로 트레이딩 시스템을 만드는 전체 코드입니다.

                              //+------------------------------------------------------------------+
                              //|                                            DeMarker Strength.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()
                                {
                                 double deMarkerArray[];
                              
                                 ArraySetAsSeries(deMarkerArray,true);
                              
                                 int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                              
                                 CopyBuffer(deMarkerDef,0,0,6,deMarkerArray);
                              
                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);
                              
                                 double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;
                              
                              
                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                              
                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              이 코드에서의 차이점:

                              동일한 함수를 사용하여 현재 디마커 값을 정의한 후 "NormalizeDouble" 함수를 사용하여 마지막 다섯 개의 deMarker 값을 정의합니다.

                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);

                              "double" 함수를 사용하여 마지막 5개 디마커의 값을 기반으로 deMarkerAvgVal 변수를 생성하여 마지막 5개의 계산된 값의 합과 같도록 한 다음 이를 5로 나누어 평균값을 구합니다.

                              double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;

                              전략의 조건 설정

                              현재 deMarker를 deMarkerAvg 값과 비교하여 계산합니다. deMarker의 신호가 강한 경우 현재 deMarker 값이 deMarkerAvg 값보다 큰지 확인해야 합니다. "If" 함수와 구문을 사용하겠습니다:

                              if(표현식) --> 연산자

                              강세의 경우 구문의 표현식인 deMarkerVal이 deMarkerAvgVal보다 크면 트레이딩 시스템에서 오퍼레이터인 차트에 강도 신호를 코멘트로 반환해야 합니다.

                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }

                              deMarker가 약세인 경우 현재 deMarker 값이 표현식인 deMarker Avg 값보다 낮으면 해당 연산자는 차트에 약세 및 기타 값을 각각 별도의 줄로 표시한 코멘트를 반환해야 합니다.

                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }

                              이 코드를 컴파일하고 실행하면 이 전략의 EA가 다음과 같이 첨부된 것을 볼 수 있습니다:

                              첨부된 강도

                              오른쪽 상단에서 볼 수 있듯이 이 전략의 EA가 차트에 첨부되어 있으며 테스트에서 다음 예제와 같은 신호를 받을 준비가 되었습니다.

                              신호가 강한 경우:

                              강도 - 강한 신호

                              왼쪽 상단의 차트에서 볼 수 있듯이 이 트레이딩 시스템은 전략에 따라 신호를 생성했으며 이는 다음과 같습니다:

                              • 디마커가 강세 --> 디마커의 현재 값이 디마커 지표의 최근 5개 평균값보다 높기 때문입니다.
                              • 현재 디마커 값입니다.
                              • AVG 디마커 값입니다. 

                              약세 신호의 경우:

                              강도 - 약한 신호

                              왼쪽 상단의 차트에서 볼 수 있듯이 다음과 같은 신호가 있습니다:

                              • 디마커 약세 --> 디마커의 현재 값이 디마커 지표의 최근 5개 평균값보다 낮기 때문입니다.
                              • 현재 디마커 값입니다.
                              • AVG 디마커 값입니다. 
                                전략 2: 디마커, OB-OS

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

                                  //+------------------------------------------------------------------+
                                  //|                                       Simple DeMarker 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()
                                  void OnTick()
                                    {
                                     double deMarkerArray[];
                                  
                                     ArraySetAsSeries(deMarkerArray,true);
                                  
                                     int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                  
                                     CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                                  
                                     double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                                  
                                  
                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  이 코드에서의 차이점:

                                  이 코드의 조건.

                                  과매도 신호의 경우 현재 값이 "if" 함수의 표현식인 0.30보다 낮거나 같으면 과매도 신호가 되며 이 신호가 차트에 코멘트로 표시되는 연산자가 됩니다.

                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }

                                  연산자인 과매수 신호의 경우 현재 디마커 값이 표현식인 0.70보다 크거나 같을 때 존재합니다.

                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }

                                  신호 또는 전일 예탁 잔고(표현식)이 없는 경우 현재 디마커 값이 0.30~0.70(연산자) 사이일 때 신호가 표시됩니다.

                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }

                                  이 코드를 컴파일하고 이 EA를 실행하면 다음과 같이 차트에 첨부된 EA를 확인할 수 있습니다:

                                  OB-OS 첨부

                                  이제 우리는 이 전략에 따라 신호를 수신할 준비가 되었으며 다음은 테스트의 예입니다.

                                  과매수된 경우:

                                  DeM, OB - OS - OB 신호

                                  왼쪽 상단에서 이전 차트에서 볼 수 있듯이 다음과 같은 신호가 생성 되었습니다:

                                  • 과매수
                                  • 디마커 현재 값

                                  과매도된 경우:

                                  DeM, OB - OS - OS 신호

                                  보시다시피 생성된 신호는 다음과 같습니다:

                                  • 과매도
                                  • 디마커 현재 값

                                  신호가 없거나 전일 예탁 잔고가 없는 경우:

                                  DeM, OB - OS - 신호 없음

                                  보시다시피 디마커 현재 값 신호가 생성되었습니다.

                                    전략 3: 디마커 다이버전스

                                      다음은 이 전략의 트레이딩 시스템을 생성하는 전체 코드입니다.

                                      //+------------------------------------------------------------------+
                                      //|                                          DeMarker Divergence.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()
                                        {
                                         double deMarkerArray[];
                                         MqlRates pArray[];
                                      
                                      
                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);
                                      
                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);
                                      
                                         CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);
                                      
                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);
                                      
                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      이 코드에서 차이점.

                                      "double" 함수를 사용하여 deMarkerArray용 배열을 만드는 과정이 있고 "MqlRates" 함수를 사용하여 가격, 거래량, 스프레드 정보를 저장하는 pArray(가격)용 배열을 만듭니다.

                                         double deMarkerArray[];
                                         MqlRates pArray[];

                                      이 두 개의 생성된 배열에 대해 AS_SERIES 플래그를 설정합니다.

                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);

                                      deMarketDef, pData 정의

                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);

                                      디마커 배열 채우기

                                      CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);

                                      deMarkerVal, deMarkerPrevVal, 현재 고가, 현재 저가, 이전 고가, 이전 저가 정의하기

                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);

                                      전략의 조건.

                                      약세 다이버전스의 경우:

                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }

                                      강세 다이버전스의 경우:

                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }

                                      이 코드도 컴파일한 후 내비게이터에서 코드를 찾아 실행할 수 있습니다. 그러면 다음과 같이 차트에 첨부된 것을 확인할 수 있습니다:

                                      다이버전스 첨부

                                      이전 차트의 왼쪽 상단에서 볼 수 있었듯이 차트에 EA가 첨부되어 있고 이제 우리는 다음과 같이 이 거래 전략을 기반으로 한 EA로부터 신호를 받을 수 있습니다.

                                       강세 다이버전스의 경우:

                                       강세 다이버전스 신호

                                      이전 차트의 왼쪽 상단에서 볼 수 있었던 것과 마찬가지로 다음과 같은 신호가 생성되었습니다:

                                      • 강세 다이버전스
                                      • 현재 고점.
                                      • 이전 고점.
                                      • 현재 디마커 값
                                      • 이전 디마커 값

                                      약세 다이버전스의 경우:

                                       하락 다이버전스 신호

                                      이전 차트의 왼쪽 상단에서 볼 수 있었듯이 다음과 같은 신호가 생성되었습니다:

                                      • 약세 다이버전스.
                                      • 현재 고점.
                                      • 이전 고점.
                                      • 현재 디마커 값
                                      • 이전 디마커 값

                                      결론

                                      이 기사에서 배운 내용에 따르면 우리는 디마커 지표가 무엇인지, 무엇을 측정하는지, 어떻게 계산할 수 있는지, 그리고 그 이면에 있는 주요 개념을 기반으로 한 간단한 전략을 통해 이 지표를 어떻게 읽고 사용할 수 있는지 알아 보았습니다. 이제 우리는 DeMarker 기술 지표에 대해 많은 것을 이해하고 있는 것입니다. 이 간단한 전략은 다음과 같습니다:

                                      • 디마커 강도: 현재 디마커의 위치와 디마커 값의 지난 5기간 평균을 기준으로 강세 또는 약세 신호를 수신합니다.
                                      • 디마커, OB - OS: 현재 디마커 값의 위치를 0에서 1까지의 척도로 표시하여 과매수 또는 과매도 신호를 수신합니다.
                                      • 디마커 다이버전스: 현재 디마커, 이전 디마커, 현재 고점, 이전 고점의 위치를 기준으로 강세 또는 약세 다이버전스의 신호를 수신합니다.

                                      그 외에도 우리는 각 전략에 대한 단계별 청사진을 설계하여 이를 위한 거래 시스템을 원활하게 구축할 수 있도록 지원했습니다. 그런 다음 언급된 전략의 청사진에서 설계한 것을 기반으로 MetaTrader 5에서 자동으로 신호를 수신하는 트레이딩 시스템을 만들었습니다.

                                      모든 사람에게 적합한 것은 없기 때문에 모든 전략을 사용하기 전에 반드시 테스트하여 여러분에게 적합한 전력인지 확인해야 함을 다시 한 번 강조합니다. 이 기사가 도움이 되셨기를 바라며 이 기사에서 다룬 주제 또는 관련 주제에 대한 유용한 통찰력을 얻으셨기를 바랍니다. 더 많은 유사한 기사를 읽고 싶다면 초보자를 위한 이 시리즈의 이전 기사에서 기술적 지표와 이를 기반으로 간단한 거래 시스템을 만드는 방법을 다룬 이전의 기사를 읽어 보시기 바랍니다.

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

                                      MetaTrader VPS 시작하기: 단계별 지침 MetaTrader VPS 시작하기: 단계별 지침
                                      트레이딩 로봇이나 시그널 구독을 사용해 본 사람이라면 누구나 트레이딩 플랫폼에 안정적인 연중무휴 호스팅 서버를 임대해야 한다는 필요성을 알고 있습니다. 저희는 다양한 이유로 메타트레이더 VPS 사용을 권장합니다. MQL5.community 계정을 통해 간단하게 서비스 비용을 결제하고 구독을 관리할 수 있습니다.
                                      모집단 최적화 알고리즘: 뻐꾸기 최적화 알고리즘(COA) 모집단 최적화 알고리즘: 뻐꾸기 최적화 알고리즘(COA)
                                      다음으로 살펴볼 알고리즘은 레비 비행을 사용한 뻐꾸기 검색 최적화입니다. 이는 최신의 최적화 알고리즘 중 하나이며 인기 있는 새로운 알고즘 중 하나입니다.
                                      Relative Vigor Index로 거래 시스템을 설계하는 방법을 알아보세요 Relative Vigor Index로 거래 시스템을 설계하는 방법을 알아보세요
                                      가장 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법에 대한 시리즈의 새로운 기사입니다. 이 글에서는 상대 활력 지수(Relative Vigor Index) 지표를 사용하여 이를 수행하는 방법을 알아봅니다.
                                      모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO) 모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO)
                                      이번에는 최신의 최적화 알고리즘 중 하나인 그레이 울프 최적화에 대해 알아봅시다. 테스트 함수에서의 오리지널 행동은 이 알고리즘을 앞서 고려한 알고리즘 중 가장 흥미로운 알고리즘 중 하나로 만듭니다. 이 알고리즘은 신경망 훈련, 많은 변수가 있는 부드러운 함수의 훈련에 사용되는 최고의 알고리즘 중 하나입니다.