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

앨리게이터로 트레이딩 시스템 설계 방법 알아보기

MetaTrader 5트레이딩 | 19 12월 2023, 07:27
461 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

다음은 가장 인기 있는 보조지표를 기반으로 트레이딩 시스템을 설계하는 방법에 대한 시리즈의 새로운 글입니다. 이 글에서 우리는 앨리게이터 지표의 정의, 측정 방법, 계산 방법, 판독 및 사용 방법을 알아봄으로써 앨리게이터 지표에 대해 자세히 알아볼 것입니다. 그런 다음 이 지표의 주요 목표를 기반한 몇 가지 간단한 전략을 기초로 거래 시스템을 만들 것입니다. 우리는 다음의 주제를 통해 이 지표에 대해 알아볼 것입니다.

  1. 앨리게이터 정의
  2. 앨리게이터 전략
  3. 앨리게이터 전략 청사진
  4. 앨리게이터 거래 시스템
  5. 결론

저는 여러분이 이 기사의 코드, 특히 배운 내용을 직접 적용 해 볼 것을 권유합니다. 프로그래밍 기술을 향상시키는 데에 좋은 방법이기 때문입니다. 이 기사에서는 MetaTrader 5 거래 터미널에 내장된 MQL5(MetaQuotes Language 5) IDE를 사용할 것입니다. MetaTrader 5 다운로드 방법과 MQL5 사용법을 모르는 경우 메타에디터에서 MQL5 코드 작성하기라는 글을 읽어 보시기 바랍니다.

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

앨리게이터 정의

엘리게이터 보조지표는 빌 윌리엄스가 개발한 추세 추종 보조지표입니다. 이는 금융 시장 상품에서 추세가 있는 시간은 15~30%에 불과한 반면 횡보의 경우는 약 85%~70%의 시간을 차지한다는 것을 기반으로 합니다. 따라서 때때로 상승 추세나 하락 추세가 나타나기도 하지만 대부분의 경우 박스권을 형성합니다. 트렌드와 그 유형 그리고 트렌드를 식별하는 방법에 대해 자세히 알아보려면 이전 글 트렌드 정의 라는 주제를 읽어보시면 도움이 될 것입니다. 이 지표는 5, 8, 13주기로 구성된 세 개의 평활 이동 평균을 사용합니다. 즉 계산에 피보나치 수 일부를 사용합니다. 앞서 말했듯이 앨리게이터 지표는 세 개의 평활 이동 평균으로 구성되며 다음과 같습니다:

  • 앨리게이터 턱.
  • 앨리게이터 이빨.
  • 앨리게이터 입술.

이 지표는 다음 단계를 통해 수동으로 계산할 수 있습니다:

앨리게이터 턱 = SMMA (Median price, 13, 8)

앨리게이터 이빨 = SMA(Median price, 8, 5)

앨리게이터 입술 = SMMA (Median price, 5, 3)

Median price = (고가 + 저가)/2

여기서:

SMMA = 평활 이동 평균

중간 가격 = 데이터의 중간 가격

고가 = 최고 가격

저가 = 최저 가격

앞의 단계가 끝나면 앨리게이터 지표를 얻을 수 있지만 MetaTrader 5 터미널에 내장 되어 있으므로 수동으로 계산할 필요가 없으며 다음과 같이 사용 가능한 기술 지표에서 선택하기만 하면 됩니다:

MetaTrader 5 터미널을 여는 동안 삽입 --> 지표 --> 빌 윌리엄스 --> 앨리게이터를 누릅니다.

 앨리게이터 인서트

그러면 다음과 같은 매개 변수를 볼 수 있습니다:

 앨리게이터 매개변수

1 - 앨리게이터 턱의 기간.

2 - 앨리게이터 턱의 수평 이동.

3 - 앨리게이터 이빨의 기간.

4 - 앨리게이터 이빨의 수평 이동.

5 - 앨리게이터 입술의 기간.

6 - 앨리게이터 입술의 수평 이동.

7 - 평활화 방법.

8 - 사용 가능한 가격 유형.

다음 창을 통해 지표의 스타일을 결정할 수 있습니다:

 앨리게이터 파라미터 1

1 - 턱 라인의 색상.

2 - 턱 라인의 유형.

3 - 턱 라인의 두께.

4 - 이빨 라인의 색상.

5 - 이빨 라인의 유형.

6 - 이빨 라인의 두께.

7 - 입술 라인의 색상.

8 - 입술 라인의 유형.

9 - 입술 라인의 두께.

모든 매개 변수를 결정하고 "확인"을 누르면 다음과 같이 차트에 지표가 첨부된 것을 확인할 수 있습니다:

 앨리게이터 부착

이전 차트에서 볼 수 있듯이 차트에 지표가 삽입되어 있고 세 개의 라인이 있습니다:

1 - 앨리게이터 입술

2 - 앨리게이터 이빨

3 - 앨리게이터 턱

우리는 가격에서 이 선들의 위치를 관찰하는 것만으로도 지표를 읽을 수 있습니다. 가격이 입술, 이빨, 턱보다 높으면 추세가 상승하고 있다고 말할 수 있습니다. 가격이 입술, 이빨, 턱보다 낮으면 추세가 하락했다고 말할 수 있습니다. 가격이 세 개의 선에서 움직이고 있다면 횡보라고 할 수 있습니다.

앨리게이터 전략

거래를 하면서 앨리게이터 지표를 사용하는 방법에는 여러 가지가 있지만 교육을 위해 이 주제에서 다루는 주요 아이디어를 기반으로 사용할 수 있는 간단한 전략을 살펴 볼 것입니다. 여러분은 실제 계정에서 사용하기 전에 테스트하여 수익성이 있는지 확인해야 합니다. 여러분은 살펴본 전략을 최적화해야 할 수도 있으며 이는 여러분의 트레이딩 스타일에 유용한 최상의 방법에 도달하기 위해 할 수 있는 정상적인 과정입니다.

    전략 1: 앨리게이터 트렌드 식별자

      이 전략을 기반으로 우리는 특정 조건에 따라 강세 및 약세 신호를 받아야 합니다. 입술 값이 이빨 값과 턱 값의 두 값보다 크고 동시에 이빨 값과 턱 값보다 크면 강세 신호가 됩니다. 반대로 입술 값이 이빨 값과 턱 값보다 낮고 동시에 이빨 값이 턱 값보다 낮으면 약세 신호가 됩니다.

      입술 > 이빨 값, 입술 > 턱 값, 이빨 > 턱 값 --> 강세

      입술 <이빨 값, 입술 <턱 값, 이빨 <턱 값 --> 약세

        전략 2: 앨리게이터 신호 시스템

          이 전략에 따라 입술, 이빨, 턱 값의 교차에 따라 매수 및 매도 신호를 얻어야 합니다. 입술 값이 이빨 값과 턱 값보다 크면 매수 신호가 됩니다. 다른 시나리오에서는 입술 값이 이빨 및 턱 값보다 낮으면 매도 신호가 됩니다.

          입술 > 이빨 값, 입술 > 턱 값 --> 매수

          입술 < 이빨 값, 입술 < 턱 값 --> 매도

            전략 3: 앨리게이터 신호 시스템 개선본

              이 전략에 따라 우리는 종가와 이빨 값의 교차 이후에 입술, 이빨, 턱의 교차를 기준으로 매수 및 매도 신호를 얻어야 합니다. 입술 라인이 이빨 및 턱보다 낮고 종가가 이빨 값보다 크면 매수 신호가 됩니다. 반대로 입술 라인이 이빨 및 턱보다 크고 종가가 이빨 값보다 낮으면 매도 신호가 됩니다.

              입술 < 이빨 값, 입술 < 턱 값 및 종가 > 이빨 --> 매수

              입술 > 이빨 값, 입술 > 턱 값 및 종가 < 이빨 --> 판매

              앨리게이터 전략 청사진

              이제 우리는 앞의 주제에서 언급한 전략을 기반으로 트레이딩 시스템을 만들어야 합니다. 이를 위해 우리는 트레이딩 시스템을 만드는 데 도움이 되는 단계별 청사진을 설계할 것입니다.

                전략 1: 앨리게이터 트렌드 식별자

                  이 전략에 따르면 우리는 다음의 값을 지속적으로 확인하여 강세 또는 약세 신호를 생성하는 트레이딩 시스템을 만들어야 합니다:

                  • 입술 값
                  • 이빨 값
                  • 턱 값

                  이를 바탕으로 적절한 신호를 생성하려면 트레이딩 시스템이 이러한 값의 위치를 결정하도록 해야 합니다. 입술 라인이 이빨보다 크고, 입술이 턱보다 크고, 이빨 라인이 턱보다 큰 경우 트레이딩 시스템이 차트에 코멘트로 다음의 값을 반환해야 합니다:

                  • 강세
                  • 턱 값 = n
                  • 이빨 값 = n
                  • 입술 값 = n

                  다른 경우 입술 라인이 이빨 라인보다 낮고 입술 라인이 턱 라인보다 낮고 동시에 이빨 라인이 턱 라인보다 낮은 경우 트레이딩 시스템은 차트에 코멘트로 다음 값을 반환해야 합니다:

                  • 약세
                  • 턱 값 = n
                  • 이빨 값 = n
                  • 입술 값 = n

                  다음은 이 트레이딩 시스템의 단계별 청사진입니다:

                  앨리게이터 트렌드 식별자 청사진

                    전략 2: 앨리게이터 신호 시스템

                      이 전략에 따라 우리는 다음의 값을 지속적으로 확인하여 각 값의 포지션을 결정하고 이를 바탕으로 매수 또는 매도 신호를 생성하는 트레이딩 시스템을 만들어야 합니다:

                      • 입술 값
                      • 이빨 값
                      • 턱 값

                      입술 라인이 이빨 값보다 크고 동시에 입술 라인이 턱 값보다 큰 경우 거래 시스템이 차트에 다음의 값을 코멘트로 반환하도록 해야 합니다:

                      • 매수
                      • 턱 값 = n
                      • 이빨 값 = n
                      • 입술 값 = n

                      다른 경우에는 입술 라인이 이빨 값보다 낮고 동시에 입술 라인이 턱 라인보다 낮으면 거래 시스템이 다음의 값을 가진 신호를 차트에 코멘트로 반환해야 합니다:

                      • 매도
                      • 턱 값 = n
                      • 이빨 값 = n
                      • 입술 값 = n

                      다음은 이 트레이딩 시스템의 단계별 청사진입니다:

                      앨리게이터 신호 시스템 청사진

                        전략 3: 앨리게이터 신호 시스템 개선본

                          이 전략에 따라 우리는 다음의 값들을 확인하고 각 값의 위치를 결정하여 매수 및 매도 신호를 생성하는 거래 시스템을 만들어야 합니다:

                          • 입술 값
                          • 이빨 값
                          • 턱 값
                          • 종가

                          입술 값이 이빨 값보다 낮고 입술 선이 턱 선보다 낮고 종가가 이빨 값보다 높아지면 거래 시스템이 다음과 같은 값과 함께 차트에 코멘트로 신호를 반환해야 합니다:

                          • 매수
                          • 입술 값 = n
                          • 이빨 값 = n
                          • 종가 = n
                          • 턱 값 = n

                          입술 선이 이빨 선보다 크고 입술 선이 턱 선보다 높으며 종가가 이빨 값보다 낮아지면 거래 시스템에서 다음과 같은 값과 함께 차트에 코멘트로 신호를 반환해야 합니다:

                          • 매도
                          • 입술 값 = n
                          • 이빨 값 = n
                          • 종가 = n
                          • 턱 값 = n

                          다음은 이 트레이딩 시스템의 단계별 청사진입니다:

                          앨리게이터 신호 시스템 청사진

                          앨리게이터 트레이딩 시스템

                          이제 우리는 살펴 본 각 전략을 수행하는 거래 시스템을 만들고 MetaTrader 5 터미널에서 실행하여 이 시스템이 원하는 신호를 자동으로 생성하도록 할 것입니다. 먼저 우리는 트레이딩 시스템에서 사용할 앨리게이터 구성 요소 값의 신호를 생성하는 기본 트레이딩 시스템을 만들 것입니다. 다음은 이러한 유형의 시스템을 만드는 단계에 대한 설명입니다:

                          앨리게이터 컴포넌트(입술, 이빨, 턱) 각각에 대한 배열을 생성합니다.

                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[]; 

                          "ArraySetAsSeries" 함수를 사용하여 이러한 배열의 데이터를 정렬합니다. 매개변수:

                          • array[]
                          • flag
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);

                          "iAlligator" 함수를 사용하여 앨리게이터 정의. 매개변수:

                          • symbol: 현재 심볼에 적용하기 위해 (_Symbol)을 사용합니다.
                          • period: 현재 기간에 적용하기 위해 (_Period)를 사용합니다.
                          • jaw_period: 턱 계산 기간을 결정하기 위해 (13)을 사용합니다.
                          • jaw_shift: 턱의 수평 이동을 결정하기 위해 (8)을 사용합니다.
                          • teeth_period: 이빨의 계산 기간을 결정하기 위해 (8)을 사용합니다.
                          • teeth_shift: 이빨의 수평 이동을 결정하기 위해 (5)를 사용합니다.
                          • lips_period: 입술의 계산 기간을 결정하기 위해 (5)를 사용합니다.
                          • lips_shift: 입술의 수평 이동을 결정하기 위해 (3)을 사용합니다.
                          • ma_method: 이동 평균의 유형을 결정하기 위해 (MODE_SMA)를 사용합니다.
                          • applied_price: 가격의 유형을 결정하기 위해 (PRICE_MEDIAN)을 사용합니다.
                          int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                          "CopyBuffer" 함수를 사용하여 데이터를 정의하고 결과를 저장합니다. 매개변수:

                          • indicator_handle: 지표 핸들을 결정하기 위해 (alligatorDef)를 사용합니다.
                          • buffer_num: 지표 버퍼 번호를 결정하기 위해 (턱의 경우 0), (이빨의 경우 1), (입술의 경우 2)를 사용합니다.
                          • start_pos: 시작 위치를 결정하기 위해 (0)을 결정합니다.
                          • count: 복사할 양을 결정합니다. (3)을 사용합니다.
                          • buffer[]: 복사할 대상 배열을 결정하기 위해 (jawsArray, teethArray, lipsArray)를 사용합니다.
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);

                          세 가지 구성 요소의 값을 가져옵니다.

                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);

                          지표의 세 가지 구성 요소로 코멘트를 달 수 있습니다.

                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);

                          다음은 이 간단한 거래 시스템을 만드는 전체 코드입니다:

                          //+------------------------------------------------------------------+
                          //|                                      Simple Alligator 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 price array
                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[];   
                             //Sorting data
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);
                             //define Alligator
                             int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);      
                             //define data and store result
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);
                             //get value of current data
                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);
                             //comment on the chart
                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);
                            }
                          //+------------------------------------------------------------------+

                          이 코드를 컴파일하고 나면 다음과 같이 Expert Advisors 폴더의 내비게이터에서 코드를 찾을 수 있습니다:

                          심플 앨리게이터 시스템 탐색기

                          원하는 차트에 EA를 드래그 앤 드롭 하면 다음과 같이 이 EA의 창이 나타납니다:

                          심플 앨리게이터 시스템

                          "알고 트레이딩 허용" 옆에 체크 표시를 한 후 "확인"을 누르면 아래와 같이 차트에 EA가 첨부됩니다:

                          심플 앨리게이터 시스템 부착

                          이전의 차트와 마찬가지로 오른쪽 상단 모서리에 EA가 첨부되어 있는 것을 볼 수 있습니다. 이제 우리는 신호를 수신할 준비가 되었습니다. 다음은 생성된 신호를 확인하기 위한 테스트의 예입니다.

                           단순 앨리게이터 시스템 신호

                          이전 차트에서 볼 수 있듯이 왼쪽 상단 모서리에 다음과 같은 값의 코멘트가 있습니다:

                          턱 값 = n

                          이빨 값 = n

                          입술 값 = n

                            전략 1: 앨리게이터 트렌드 식별자

                              우리는 다음의 전체 코드로 이 전략을 기반으로 트레이딩 시스템을 만들 수 있습니다:

                              //+------------------------------------------------------------------+
                              //|                                   Alligator Trend Identifier.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 three arrays of Alligator components
                                 double jawsArray[];
                                 double teethArray[];
                                 double lipsArray[];
                              //Sorting data
                                 ArraySetAsSeries(jawsArray,true);
                                 ArraySetAsSeries(teethArray,true);
                                 ArraySetAsSeries(lipsArray,true);
                              //define Alligator
                                 int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                              //define data and store result
                                 CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                 CopyBuffer(alligatorDef,1,0,13,teethArray);
                                 CopyBuffer(alligatorDef,2,0,13,lipsArray);
                              //get value of current data
                                 double jawsValue=NormalizeDouble(jawsArray[0],5);
                                 double teethValue=NormalizeDouble(teethArray[0],5);
                                 double lipsValue=NormalizeDouble(lipsArray[0],5);
                              //conditions of strategy
                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              이 코드의 차이점.

                              강세인 경우 전략의 조건:

                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

                              약세인 경우:

                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

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

                              앨리게이터 트렌드 식별자 첨부

                              이전 차트와 마찬가지로 차트의 오른쪽 상단 모서리에 EA가 첨부되어 있으며 이는 이제 우리가 이 전략에 따라 강세 또는 약세 신호를 받을 준비가 되었다는 것을 말해 줍니다. 다음은 이러한 신호의 예입니다:

                              강세인 경우:

                              앨리게이터 추세 식별자 - 강세 신호

                              이전 차트에서 볼 수 있듯이 오른쪽 상단 모서리에 다음과 같은 값을 가진 신호를 나타내는 코멘트가 있습니다:

                              • 강세
                              • 턱 값 = n
                              • 이빨 값 = n
                              • 입술 값 = n 
                              가격 아래로 세 개의 선이 움직이고 있습니다. 이는 우리가 강세 신호를 받았다는 것입니다.

                              약세인 경우:

                               앨리게이터 추세 식별자 - 약세 신호

                              차트의 오른쪽 상단 모서리에 다음과 같은 값으로 약세 신호인 코멘트가 표시됩니다:

                              • 약세
                              • 턱 값 = n
                              • 이빨 값 = n
                              • 입술 값 = n

                              세 개의 선이 가격 위로 움직이고 있습니다. 이는 약세 신호라는 의미입니다.

                                전략 2: 앨리게이터 신호 시스템

                                  다음의 코드는 이 전략을 기반으로 트레이딩 시스템을 만들기 위한 코드입니다:

                                  //+------------------------------------------------------------------+
                                  //|                                    Alligator Signals 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 three arrays of Alligator components
                                     double jawsArray[];
                                     double teethArray[];
                                     double lipsArray[];
                                  //Sorting data
                                     ArraySetAsSeries(jawsArray,true);
                                     ArraySetAsSeries(teethArray,true);
                                     ArraySetAsSeries(lipsArray,true);
                                  //define Alligator
                                     int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                  //define data and store result
                                     CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                     CopyBuffer(alligatorDef,1,0,13,teethArray);
                                     CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                  //get value of current data
                                     double jawsValue=NormalizeDouble(jawsArray[0],5);
                                     double teethValue=NormalizeDouble(teethArray[0],5);
                                     double lipsValue=NormalizeDouble(lipsArray[0],5);
                                  //conditions of strategy
                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                    }
                                  //+------------------------------------------------------------------+

                                  이 코드의 차이점.

                                  이 전략의 조건.

                                  매수 신호인 경우:

                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

                                  매도 신호인 경우:

                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

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

                                  앨리게이터 신호 시스템 부착

                                  차트의 오른쪽 상단에 EA가 첨부되어 있습니다. 이는 이제 우리가 이 전략에 따라 매수 또는 매도 신호를 받을 수 있다는 것을 의미합니다. 다음은 테스트를 한 예입니다.

                                  매수 신호인 경우:

                                  앨리게이터 신호 시스템 - 매수 신호

                                   

                                  우리는 다음과 같은 값과 함께 원하는 신호를 얻었습니다:

                                  • 매수
                                  • 턱 값 = n
                                  • 이빨 값 = n
                                  • 입술 값 = n
                                  세 개의 선이 가격 아래로 움직이고 있습니다. 우리가 매수 신호를 받은 것입니다.

                                  매도 신호인 경우:

                                   앨리게이터 신호 시스템 - 매도 신호

                                  다음과 같은 값과 함께 우리는 원하는 신호를 얻었습니다:

                                  • 매도
                                  • 턱 값 = n
                                  • 이빨 값 = n
                                  • 입술 값 = n

                                  가격 위로 이동하는 세 개의 선이 있으므로 매도 신호입니다.

                                    전략 3: 앨리게이터 신호 시스템 개선본

                                      다음은 이 전략을 수행하는 거래 시스템을 만드는 전체 코드입니다:

                                      //+------------------------------------------------------------------+
                                      //|                         Alligator Signals System Enhancement.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 three arrays of Alligator components
                                         double jawsArray[];
                                         double teethArray[];
                                         double lipsArray[];
                                         MqlRates pArray[];
                                      //Sorting data
                                         ArraySetAsSeries(jawsArray,true);
                                         ArraySetAsSeries(teethArray,true);
                                         ArraySetAsSeries(lipsArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                      //define Alligator
                                         int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                      //define data and store result
                                         CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                         CopyBuffer(alligatorDef,1,0,13,teethArray);
                                         CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                      //get value of current data
                                         double jawsValue=NormalizeDouble(jawsArray[0],5);
                                         double teethValue=NormalizeDouble(teethArray[0],5);
                                         double lipsValue=NormalizeDouble(lipsArray[0],5);
                                      //conditions of strategy
                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                        }
                                      //+------------------------------------------------------------------+

                                      이 코드의 차이점.

                                      가격, 거래량, 스프레드에 대한 정보를 저장하는 "MqlRates" 함수를 사용하여 가격에 대한 배열을 하나 더 만듭니다.

                                      MqlRates pArray[];

                                      "CopyRates"를 사용하여 MqlRates의 과거 데이터를 가져옵니다. 매개변수:

                                      • symbol_name: 심볼 이름을 결정하기 위해 (_Symbol)을 사용합니다.
                                      • timeframe: 차트 주기를 결정하기 위해 (_period)를 사용합니다.
                                      • start_pos: 시작 위치를 결정하기 위해 (0)을 사용합니다.
                                      • count: 복사할 데이터 개수를 결정합니다. (1)을 사용합니다.
                                      • rates_array[]: 복사할 대상 배열을 결정하기 위해 (pArray)를 사용합니다.
                                      int Data=CopyRates(_Symbol,_Period,0,1,pArray);

                                      전략의 조건.

                                      매수 신호인 경우:

                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      매도 신호인 경우:

                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      이 코드를 컴파일하고 EA를 실행하면 EA가 다음과 같이 차트에 첨부되고 우리는 매수 및 매도 신호를 얻을 수 있습니다.

                                       앨리게이터 신호 시스템 개선본 첨부

                                      오른쪽 상단 모서리에 EA를 연결하면 우리는 원하는 신호를 수신할 수 있습니다. 다음은 테스트를 한 결과의 예입니다.

                                      매수 신호인 경우:

                                       앨리게이터 시그널 시스템 개선본 - 매수 신호

                                      왼쪽 상단 모서리에 다음과 같은 값의 코멘트가 있습니다:

                                      • 매수
                                      • 턱 값 = n
                                      • 이빨 값 = n
                                      • 종가 = n
                                      • 입술 값 = n 
                                      세 개의 선이 가격 위에서 움직이고 있으므로 종가가 앨리게이터 이빨 선 위에서 마감되었음을 알 수 있습니다.

                                      매도 신호인 경우:

                                       앨리게이터 시그널 시스템 개선본 - 매도 신호

                                      왼쪽 상단 모서리에 코멘트로 신호가 표시됩니다:

                                      • 매도
                                      • 턱 값 = n
                                      • 이빨 값 = n
                                      • 종가 = n
                                      • 입술 값 = n

                                      세 개의 선이 가격 아래에서 움직이고 있으므로 종가가 앨리게이터 이빨 선 아래에서 마감되었음을 알 수 있습니다.

                                      결론

                                      이 기사에서 우리는 매수 및 매도 신호를 생성하는 것 외에도 추세를 확인하는 데 사용할 수 있는 앨리게이터 기술 지표에 대해 자세히 알아 보았습니다. 이 지표를 수동으로 계산하는 방법과 앞서 언급한 간단한 전략을 기반으로 사용하는 방법을 배웠습니다:

                                      • 앨리게이터 트렌드 식별자: 앨리게이터의 세 선(입술, 이빨, 턱)의 위치에 따라 강세 또는 약세 신호를 생성합니다.
                                      • 앨리게이터 신호 시스템: 지표의 세 선 사이의 교차를 기반으로 고전적인 방법의 교차를 기반으로 매수 또는 매도 신호를 생성합니다.
                                      • 앨리게이터 신호 시스템 개선본: 또 다른 방법으로 매수 또는 매도 신호를 생성하여 지표의 세 줄의 위치와 종가와 이빨 사이의 교차를 기반으로 이러한 신호를 더 일찍 얻을 수 있습니다. 

                                      우리는 살펴본 각 전략에 대한 단계별 청사진을 설계하여 우리의 아이디어를 정리해서 더욱 원활하고 쉽고 효과적으로 거래 시스템을 만들 수 있도록 했습니다. 또한 살펴본 각 전략에 대한 트레이딩 시스템을 만들어 MetaTrader 5 트레이딩 터미널에서 사용하고 우리가 설계하고 코딩 한 대로 자동으로 신호를 생성하도록 했습니다. 여러분은 여기서 언급 된 전략을 실제 계정에서 사용하기 전에 스스로 테스트하여 유용하고 수익성이 있는지 확인해야 한다는 점을 잊지 마시기 바랍니다. 이 글의 주요 목표는 지식을 공유하는 교육용입니다

                                      이 기사를 통해 여러분의 코딩 기술을 향상시키고 수익을 얻기 위해서는 제가 조언 한대로 배운 것을 스스로 적용하려고 노력해야 합니다. 이 글이 여러분의 거래에 유용하고 여러분에게 이 글의 주제 또는 관련 주제에 대한 유용한 통찰력을 주었기를 바랍니다. 이와 비슷한 글을 더 읽고 싶으시다면 스토캐스틱, RSI, 볼린저 밴드, 이동평균, 엔벨로프, MACD, ADX 등 가장 인기 있는 보조지표와 이를 기반으로 트레이딩 시스템을 만드는 방법을 공유한 이 시리즈의 이전의 글들을 읽어보시기 바랍니다.

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

                                      Expert Advisor 개발 기초부터(24부): 시스템 견고성(I) Expert Advisor 개발 기초부터(24부): 시스템 견고성(I)
                                      이 글에서 우리는 시스템을 더욱 안정적으로 만들고 강력하고 안전하게 사용할 수 있도록 하겠습니다. 이러한 견고성을 달성하는 방법 중 하나는 코드를 가능한 한 많이 재사용하여 다양한 경우에 지속적으로 테스트하는 것입니다. 하지만 이것은 여러 방법 중 하나일 뿐입니다. 또 다른 하나는 OOP를 사용하는 것입니다.
                                      엑셀러레이터 오실레이터를 사용하여 거래 시스템을 설계하는 방법을 알아보세요 엑셀러레이터 오실레이터를 사용하여 거래 시스템을 설계하는 방법을 알아보세요
                                      이 기사는 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법과 관련한 시리즈의 새로운 글입니다. 우리는 엑셀러레이터 오실레이터 지표라는 새로운 지표에 대해 알아보고 이를 활용하여 거래 시스템을 설계하는 방법을 알아볼 것입니다.
                                      MQL5에서 행렬 및 벡터: 활성화 함수 MQL5에서 행렬 및 벡터: 활성화 함수
                                      여기서는 머신 러닝에서의 활성화 함수에 대해서만 설명하겠습니다. 인공 신경망에서 뉴런 활성화 함수는 입력 신호 또는 입력 신호 세트의 값을 기반으로 출력 신호의 값을 계산합니다. 우리는 이 프로세스의 내부의 작동 방식에 대해 자세히 살펴볼 것입니다.
                                      모집단 최적화 알고리즘: 박쥐 알고리즘(BA) 모집단 최적화 알고리즘: 박쥐 알고리즘(BA)
                                      이 기사에서는 부드러운 함수에서 좋은 수렴을 보이는 박쥐 알고리즘(BA)에 대해 알아볼 것입니다.