English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
엑셀러레이터 오실레이터를 사용하여 거래 시스템을 설계하는 방법을 알아보세요

엑셀러레이터 오실레이터를 사용하여 거래 시스템을 설계하는 방법을 알아보세요

MetaTrader 5트레이딩 | 28 11월 2023, 13:15
404 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

다음은 가장 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법에 대한 시리즈의 새로운 기사입니다. 이 기사에 우리는 거래에 유리하게 사용될 수 있는 새로운 기술 도구에 대해 알아볼 것입니다. 우리는 AC(Accelerator Oscillator Indicator)가 무엇인지, 무엇을 측정하는지, 어떻게 계산하는지, 어떻게 읽고 사용하는지를 간단한 트레이딩 전략을 통해 자세히 알아보고 이를 기반으로 트레이딩 시스템을 구축하는 방법에 대해 알아볼 것입니다.

다음 주제는 이 지표에 대해 우리가 알아볼 내용입니다.

  1. 엑셀러레이터 오실레이터 정의
  2. 엑셀러레이터 오실레이터 전략
  3. 엑셀러레이터 오실레이터 전략 청사진
  4. 액셀러레이터 오실레이터 트레이딩 시스템
  5. 결론

MQL 5(MetaQuotes Language 5)를 사용하여 코드를 작성하고 MetaTrader 5 트레이딩 터미널을 사용하여 설계한 트레이딩 시스템을 실행할 것입니다. 만약 여러분이 MetaTrader 5를 다운로드하는 방법과 MQL5를 사용하는 방법을 모르실 경우 이전 기사 MetaEditor에서 MQL5 코드 작성이란 글을 읽어 보시면 자세히 알 수 있습니다. 여기에 언급된 모든 전략은 교육 목적으로만 설계되었으며 실제 계정에서 사용하기 전에 테스트하여 수익성이 있는지와 자신에게 적합한지 확인해야 합니다. 저는 여러분이 이 기사에서 다룬 거래 및 코딩 기술을 모두 직접 적용해 보실 것을 권장합니다. 그러면 기사로부터 더 많은 것을 얻는 데 도움이 될 것입니다.

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


엑셀러레이터 오실레이터 정의

엑셀러레이터 오실레이터(Accelerator Oscillator)는 Bill Williams가 개발한 모멘텀 지표입니다. 이 지표는 모멘텀의 변화가 있는지를 측정합니다. 만약 상승 추세의 모멘텀이 감소하면 이는 해당 금융 상품을 매수할 관심이 줄어든다는 것을 의미할 수 있으며 이 경우 매도 방향으로의 움직임의 변화를 목격할 수 있습니다. 그 반대도 마찬가지입니다. 만약 하락 추세의 모멘텀이 감소하면 금융 상품에 대해 매도를 할 관심이 줄어들고 이는 곧 매수세가 있을 것을 의미할 수 있습니다. 이 지표는 가격보다 먼저 움직일 수 있으므로 선행지표이기도 합니다.

따라서 이 지표의 주요 목적은 위 또는 아래 양방향에서 시장의 힘의 가속 및 감속을 측정하여 현재 가격 변동이 얼마나 오랫동안 지속되고 변화에 대비할 수 있는지에 대한 통찰력을 얻는 것입니다.

이제 다음 단계를 통해 이 지표를 수동으로 계산하는 방법을 알아 보겠습니다.

AC = AO - SMA(AO, 5)

여기서:

Ac = 엑셀러레이터 오실레이터.

AO = 오썸 오실레이터, 오썸 오실레이터에 대한 자세한 내용은 이전 기사를 읽어보실 수 있습니다.

SMA = 단순 이동 평균.

5 = SMA 기간.

다음 단계에 따라 AO를 계산하려면:

MEDIAN PRICE = (고가 + 저가) / 2 

AO = SMA(MEDIAN PRICE, 5) - SMA(MEDIAN PRICE, 34)

다행스럽게도 이 지표를 수동으로 계산할 필요가 없으며 MetaTrader 5 거래 플랫폼의 사용 가능한 지표에서 선택하기만 하면 됩니다. 트레이딩 터미널을 열고 Insert --> Indicators --> Bill Williams --> Accelerator Oscillator를 누릅니다.

 AC 넣기

그런 다음 지표의 매개변수 창에서 기본 설정을 다음과 동일하게 설정합니다.

 AC 매개변수

1 - 상승 값 색상입니다.

2 - 히스토그램의 두께입니다.

3 - 하락 값의 색상입니다.

기본 설정에 따라 이전 매개변수를 결정하고 "확인"을 누르면 다음과 같이 차트에 지표가 삽입되는 것을 확인할 수 있습니다.

 AC 부착

이전 차트에서 볼 수 있듯이 차트 하단에 지표가 삽입되어 있으며 AC 값이 모멘텀의 가속도에 따라 0 주위에서 진동하고 있습니다.

0 수준은 시장의 두 당사자인 상승세와 하락세 사이에 균형이 있음을 의미합니다. AC가 0 레벨보다 크면 위쪽으로 계속 이동할 수 있다는 의미이고, 그 반대의 경우로 AC가 0 레벨보다 낮으면 아래쪽으로 계속 이동할 수 있다는 의미입니다.


엑셀러레이터 오실레이터 전략

이번 주제에서는 AC 지표의 기본적인 개념을 기반으로 하여 사용할 수 있는 간단한 거래 전략을 배워봅니다. 여기서의 주요 목표는 교육이므로 여러분은 전략을 실제 계좌에서 사용하기 전에 테스트해야 합니다. 이를 통해 전약이 여러분의 거래에 적합하고 수익성이 있는지 확인해야 합니다.

    전략 1: AC 제로 교차

      이 전략을 기반으로 AC를 사용하여 두 값을 비교하여 이 두값과 현재 AC 값과 AC 지표의 0 레벨 위치를 결정하고 강세 신호나 약세 신호가 있는지 알아야 합니다. 현재 AC 값이 0 수준보다 크면 강세 신호가 됩니다. 다른 시나리오에서는 현재 AC 값이 0 수준보다 낮으면 약세 신호가 됩니다.

      간단히 하면,

      AC > 0 수준 --> 강세

      AC < 0 수준 --> 약세

        전략 2: AC 강도

          이 전략을 바탕으로 현재 AC 값을 최대의 AC 값과 마지막 10개 AC 값의 최소 AC 값과 비교하여 모든 값의 위치를 ​​결정하고 AC의 움직임에 따라 적합한 신호를 얻어야 합니다. 현재 AC 값이 최대 AC의 값보다 크면 이는 강세의 신호가 됩니다. 다른 시나리오에서는 현재 AC의 값이 최소 AC의 값보다 낮으면 이는 약세의 신호가 됩니다.

          간단히 하면,

          AC > 최대 AC 값 --> AC가 강함

          AC < 최소 AC 값 --> AC가 약함

            전략 3: AC & MA 전략

              이 전략을 바탕으로 종가, 50주기 지수이동평균, 현재 AC, 최대 AC 값, 마지막 10개의 최소의 AC 값 등 5개의 값을 확인하여 이들의 위치를 확인하고 매수 또는 매도 신호를 얻어야 합니다. 현재 AC가 최대 AC 값보다 크고 종가가 50일 EMA보다 크면 매수 신호가 됩니다. 다른 시나리오는 현재 AC가 최소 AC 값보다 낮고 종가가 50일 EMA보다 낮으면 매도 신호가 됩니다.

              간단히 하면,

              AC > 최대 AC 값 및 종가 > 50-EMA --> 매수

              AC < 최소 AC 값 및 종가 < 50- EMA --> 매도 

              엑셀러레이터 오실레이터 전략 청사진

              이번 주제에서는 우리는 언급된 모든 전략에 대한 단계별 청사진을 설계하여 거래 시스템을 원활하게 만드는 데 도움이 되도록 할 것입니다.

                전략 1: AC 제로 교차

                  이 전략에 따르면 두 가지 값을 지속적으로 비교하여 강세 또는 약세 신호를 자동으로 차트에 생성할 수 있는 거래 시스템을 만들어야 하며 이 시스엠은 적절한 신호를 얻기 위해 현재 AO 값과 AO 지표의 제로 레벨을 비교하여 각 값의 위치를 결정하고 시장의 상태를 결정합니다. 현재 AC 값이 0 레벨보다 큰 경우 거래 시스템은 다음 값을 차트에 코멘트로 반환해야 합니다.

                  • 강세
                  • AC 값

                  다른 경우 AC 값이 0 레벨보다 낮으면 거래 시스템에은 다음 값을 차트에 코멘트로 반환해야 합니다.

                  • 약세
                  • AC 값

                  다음은 이러한 거래 시스템의 청사진입니다:

                   AC Zero Crossover 설계도

                    전략 2: AC 강도

                      이 전략에 따르면, 세 가지 값을 지속적으로 확인하고 현재 AC 값, 최대 값 그리고 AC 지표의 마지막 10개 값 중 최소값 이렇게 세개의 값을 비교하여 AC 움직임의 강도가 강하거나 약하다는 신호를 생성하는 데 사용할 수 있는 거래 시스템을 만들어야 합니다. 현재 AC 값이 최대값보다 큰 경우 거래 시스템에서 다음 값을 차트에 코멘트로 반환해야 합니다.

                      • AC 강세
                      • AC 값
                      • AC 최대값
                      • AC 최소값

                      다른 경우 현재 AC 값이 최소값보다 낮으면 거래 시스템에서 다음 값을 차트에 코멘트로 반환해야 합니다.

                      • AC 약세
                      • AC 값
                      • AC 최대값
                      • AC 최소값

                      다음은 이러한 거래 시스템의 청사진입니다:

                       AC 강도 청사진

                        전략 3: AC & MA 전략

                          이 전략에 따르면 현재 AC, 최대 AC, 최소 AC, 종가, 이동 평균 이렇게 5가지 값을 지속적으로 확인하여 적절한 신호를 생성하기 위해 이들의 위치를 결정하고 차트에 코멘트로 매수 및 매도 신호를 생성하는 거래 시스템을 만들어야 합니다. 현재 AC가 최대 AC 값보다 크고 종가가 이동 평균보다 큰 경우 거래 시스템이 차트에 다음과 같은 값의 신호를 코멘트로 생성해야 합니다:

                          • 매수
                          • 종가
                          • AC 값
                          • AC 최대
                          • AC 최소
                          • MA 값

                          다른 경우, 현재 AC가 최소 AC 값보다 낮고 종가가 이동 평균보다 낮은 경우 거래 시스템은 다음 값을 차트에 코멘트로 반환해야 합니다.

                          • 매도
                          • 종가
                          • AC 값
                          • AC 최대
                          • AC 최소
                          • MA 값

                          다음은 이러한 거래 시스템의 청사진입니다:

                           AC _ MA 전략 청사진

                          액셀러레이터 오실레이터 트레이딩 시스템

                          이 흥미로운 주제에서 우리는 살펴본 전략을 기반으로 거래 시스템을 만들것입니다. 이어한 시스템의 기반으로 현재 AC 값을 차트에 코멘트로 반환 하는 간단한 거래 시스템을 만들어 이를 위한 기반을 만들 것입니다. 다음은 그 단계입니다.

                          "double" 함수를 사용하여 acArray에 대한 배열 만들기:

                          double acArray[];

                          acArray에 "ArraySetAsSeries" 함수를 사용하여 Boolean 값으로 true 또는 false를 반환합니다. 매개변수는 다음과 같습니다:

                          • array[]: acArray를 사용합니다.
                          • flag: 배열 인덱싱 방향으로 "true"를 사용하겠습니다.
                          ArraySetAsSeries(acArray,true);

                          Accelerator Oscillator 지표의 핸들을 반환하기 위해 "iAC" 함수를 사용하여 AC 지표를 정의합니다. 매개변수는 다음과 같습니다:

                          • symbol: 현재 심볼에 적용할 (_Symbol)을 사용합니다.
                          • period: 현재 기간에 적용할 (_period)를 사용합니다.
                          int acDef = iAC(_Symbol,_Period);

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

                          • Indicator_handle: 사전 정의된 AC 지표 핸들의 (acDef)를 사용합니다.
                          • buffer_num: 인디케이터 버퍼 번호를 결정합니다. (0)을 사용합니다.
                          • start_pos: 시작 위치를 결정합니다. (0)을 사용합니다.
                          • count: 복사할 양을 결정합니다. (3)을 사용합니다.
                          • buffer[]: 복사할 대상 배열을 결정하기 위해 (acArray)를 사용합니다.
                          CopyBuffer(acDef,0,0,3,acArray);

                          acVal에 대한 double 변수를 생성하고 "NormalizeDouble"을 사용하여 이를 정규화한 후 AC 값을 정의합니다. "NormalizeDouble"의 매개변수는 다음과 같습니다:

                          • value: 정규화된 수입니다. (acArray[0])을 사용하겠습니다.
                          • digits: 소수점 뒤의 자릿수를 결정합니다. 우리는 (7)을 사용합니다.
                          double acVal = NormalizeDouble(acArray[0],7);

                          "Comment" 함수를 사용하여 차트에 현재 AC 값을 코멘트로 반환합니다.

                          Comment("AC Value is ",acVal);

                          다음은 이 거래 시스템의 전체 코드입니다:

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AC.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 acArray[];
                             ArraySetAsSeries(acArray,true);
                             int acDef = iAC(_Symbol,_Period);
                             CopyBuffer(acDef,0,0,3,acArray);
                             double acVal = NormalizeDouble(acArray[0],7);
                             Comment("AC Value is ",acVal);
                            }
                          //+------------------------------------------------------------------+

                          이 코드를 컴파일 하면 Expert Advisors 폴더의 탐색기에서 다음과 같은 코드를 찾을 수 있습니다.

                           간단한 AC nav

                          이 파일을 실행하기 위해 원하는 차트에 끌어다 놓으면 다음과 같은 창이 나타납니다:

                           간단한 AC win

                           단순 AC 첨부

                          오른쪽 상단의 이전 그림에서 볼 수 있듯이 차트에 EA가 첨부되어 있습니다. 이제 우리는 신호를 수신할 준비가 되었습니다. 다음과 같습니다:

                           단순 AC 신호

                          왼쪽 상단에서 볼 수 있듯이 현재 AC 값에 대한 코멘트가 있습니다.

                            전략 1: AC 제로 교차

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

                              //+------------------------------------------------------------------+
                              //|                                            AC Zero Crossover.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 acArray[];
                                 ArraySetAsSeries(acArray,true);
                                 int acDef = iAC(_Symbol,_Period);
                                 CopyBuffer(acDef,0,0,3,acArray);
                                 double acVal = NormalizeDouble(acArray[0],7);
                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }
                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              이 코드에서의 차이점:

                              전략의 조건.

                              강세 신호의 경우:

                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }

                              하락 신호의 경우

                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }

                              이 코드를 컴파일한 후 오류가 없는지 확인하고 앞서 배운 것과 동일하게 차트에 끌어다 놓아 실행시키면 다음과 같이 차트에 첨부됩니다:

                               AC Zero Crossover 첨부

                              오른쪽 상단에서 이 전략을 수행하는 EA가 차트에 첨부되어 있는 것을 볼 수 있습니다. 이제 우리는 신호를 수신할 준비가 되었습니다.

                              강세 신호의 경우:

                               AC Zero Crossover - 강세 신호

                              왼쪽 상단에 이 전략의 신호로 다음 값이 코멘트로 나타난 것을 볼 수 있습니다:

                              • 강세
                              • AC 값

                              약세 신호의 경우:

                               AC 제로 크로스오버 - 하락 신호

                              왼쪽 상단에 다음과 같은 값이 있는 것을 볼 수 있습니다:

                              • 약세
                              • AC 값
                                전략 2: AC 강도

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

                                  //+------------------------------------------------------------------+
                                  //|                                                  AC 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 acArray[];
                                     ArraySetAsSeries(acArray,true);
                                     int acDef = iAC(_Symbol,_Period);
                                     CopyBuffer(acDef,0,0,11,acArray);
                                     double acCurrVal = NormalizeDouble(acArray[0],7);
                                     int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                     int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                    }
                                  //+------------------------------------------------------------------+

                                  이 코드의 차이점.

                                  AC 현재 값 정의:

                                  double acCurrVal = NormalizeDouble(acArray[0],7);

                                  최대값을 반환하는 "ArrayMaximum" 함수를 사용하여 AC 전체 배열에서 최대값을 정의합니다. 해당 매개변수:

                                  • array[]: acArray를 사용합니다.
                                  • start: 확인할 시작점입니다. (1)을 사용하겠습니다.
                                  • count: 검사할 배열의 총 요소 수입니다. (WHOLE_ARRAY)를 사용하여 이 배열 전체를 확인합니다.
                                  int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);

                                  최소값을 반환하는 "ArrayMinimum" 함수를 사용하여 AC 전체 배열의 최소값을 정의합니다. 해당 매개변수:

                                  • array[]: (acArray)를 사용합니다.
                                  • start: 확인할 시작점입니다. (1)을 사용하겠습니다.
                                  • 개수: 검사할 배열의 총 요소 수입니다. (WHOLE_ARRAY)를 사용하여 이 배열 전체를 확인합니다.
                                  int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);

                                  "NormalizeDouble" 함수를 사용하여 최대값과 최소값을 정규화합니다.

                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);

                                  전략의 조건:

                                  신호가 강세인 경우,

                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }

                                  신호가 약세인 경우,

                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }

                                  원하는 차트에서 이 코드를 컴파일하고 실행하면 다음과 같이 첨부된 것을 확인할 수 있습니다.

                                  AC 강도 부착

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

                                  신호가 강한 경우:

                                  AC 강도 - 강한 신호

                                  차트 왼쪽 상단에서 볼 수 있듯이 우리는 다음 값으로 신호를 수신했습니다:

                                  • AC 강세
                                  • AC 값
                                  • AC 최대값
                                  • AC 최소값

                                  약세인 경우:

                                  AC 강도 - 약세 신호

                                  다음 값을 가진 신호를 얻었습니다.

                                  • AC 약세
                                  • AC 값
                                  • AC 최대값
                                  • AC 최소값
                                    전략 3: AC & MA 전략

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

                                      //+------------------------------------------------------------------+
                                      //|                                             AC & MA 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()
                                        {
                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                         double closingPrice = pArray[0].close;
                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      이 코드에서의 차이점:

                                      pArray, acArray 및 maArray 배열 생성. acArray 및 maArray에는 double 함수를 사용하지만 pArray에는 MqlRates 함수를 사용하여 가격, 거래량 및 스프레드에 대한 정보를 저장합니다.

                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];

                                      이전에 언급한 것과 같이 AS_SERIES 플래그를 (acArray) 및 (maArray) 배열로 설정하고 "CopyRates" 함수를 사용하여 데이터를 정의하여 MqlRates 구조 및 해당 매개변수의 히스토리 데이터를 가져오는 방법은 다음과 같습니다:

                                      • Symbol_name: _Symbol을 사용하여 현재 기호에 적용합니다.
                                      • timeframe: _Period를 사용하여 현재 기간에 적용합니다.
                                      • start_pos: 시작 위치를 결정합니다. (0)을 사용합니다. 
                                      • count: 복사할 데이터의 갯수를 결정합니다. (1)을 사용합니다.
                                      • rates_array[]: 복사할 대상 배열을 결정합니다. pArray를 사용합니다.
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);

                                      이제 우리는 AC, MA를 정의합니다:

                                      앞서 언급한 것과 같이 "iCA" 함수를 사용하여 AC를 정의합니다. 하지만 MA는 "iMA" 함수와 그 매개변수를 사용할 것입니다:

                                      • symbol: (_Symbol)을 사용합니다.
                                      • period: (_period)를 사용합니다.
                                      • ma_period: 이동 평균의 주기를 결정합니다. 우리는 50을 사용합니다. 
                                      • ma_shift: 수평 이동을 결정합니다. 우리는 (0)을 사용합니다. 
                                      • ma_method: 이동 평균의 유형을 결정합니다. 우리는 지수 MA를 사용합니다. 
                                      • applied_price: 사용 가능한 가격 유형을 결정합니다. 우리는 종가를 사용합니다.
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                                      "CopyBuffer" 함수를 사용하여 AC 및 MA 지표의 버퍼에서 데이터를 가져옵니다.

                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);

                                      acArray의 최대값과 최소값을 가져옵니다.

                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);

                                      AC, AC 최대값, AC 최소값 및 지수 이동 평균 값을 정의합니다.

                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);

                                      전략의 조건.

                                      매수 신호의 경우:

                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      매도 신호의 경우:

                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      이 코드를 컴파일하고 실행하여 신호를 수신하기 위해 다음과 같이 첨부합니다:

                                      AC _ MA 전략 첨부

                                      오른쪽 상단에서 볼 수 있듯이 EA가 차트에 첨부되어 있습니다. 이제 신호를 수신할 수 있습니다.

                                      매수 신호의 경우:

                                      AC & MA 전략 - 매수 신호

                                      왼쪽 상단에서 볼 수 있듯이 다음과 같은 값이 있습니다:

                                      • 매수
                                      • 종가
                                      • AC 값
                                      • AC 최대
                                      • AC 최소
                                      • MA 값

                                      매도 신호의 경우:

                                      AC & MA 전략 - 매도 신호

                                      다음과 같은 값의 코멘트를 볼 수 있습니다:

                                      • 매도
                                      • 종가
                                      • AC 값
                                      • AC 최대
                                      • AC 최소
                                      • MA 값

                                      결론

                                      이 기사를 마치며 이제 여러분은 이 글을 통해 엑셀러레이터 오실레이터 지표에 대해 다루었고 그것이 무엇인지, 무엇을 측정하는지, 어떻게 계산할 수 있는지, 어떻게 읽고 읽을 수 있는지 배웠습니다.그러므로 여러분도 Accelerator Oscillator 지표를 잘 이해하고 있을 것이라 믿습니다. 우리는 다음과 같은 간단한 거래 전략을 통해 이지표에 대해 배웠습니다:

                                      • AC 제로 교차: AC 값과 AC 지표의 0 레벨 사이의 교차를 기반으로 강세 및 약세 신호를 얻습니다.
                                      • AC 강도: 현재 AC 값과 마지막 10개 AC 값 중 최대값 및 최소값 간의 비교를 기반으로 AC의 움직임의 강도 신호를 얻습니다.
                                      • AC & MA 전략: 종가 위치, 50일 지수 이동 평균, AC 현재 값, AC 최대 값 및 AC 최소 값을 기반으로 매수 및 매도 신호를 얻습니다.

                                      그런 다음 우리는 살펴본 모든 전략에 대한 단계별 청사진을 설계하여 거래 시스템을 쉽고 효과적이며 원활하게 구축하는 데 도움이 되도록 했습니다. 그런 다음 적용할 조건을 우리가 직접 읽거나 모니터링하지 않고도 자동으로 생성되는 신호를 얻기 위해 MetaTrader 5에서 실행될 전략을 기반으로 거래 시스템을 만드는 코드를 작성하면서 기사의 가장 흥미로운 부분에 이르렀습니다.

                                      이 글의 시작 부분에서 말씀드린 것과 같이 여러분이 직접 배운 내용들을 적용해 보시면서 이 글의 주제나 관련 주제에 대해 더 많은 통찰력을 얻어 더 많은 혜택을 얻으시길 바랍니다. 모든 사람에게 적합한 전략은 없기 때문에 언급된 전략을 실제 계좌에서 사용하기 전에 테스트하여 수익성이 있는지 또는 귀하의 거래 스타일에 적합한지 확인해야 한다는 점을 여기서 다시 한번 말씀드립니다. 여기서의 주요 목표는 교육입니다.

                                      여러분이 트레이딩에서 더 나은 결과를 얻기 위해 이 기사가 도움이 되기를 바랍니다. RSI, MACD, MA, Stochastic, Bollinger Bands와 같은 가장 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법에 대한 유사한 기사를 더 읽고 싶다면 저의 이전 기사를 읽어보세요.

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

                                      파일 첨부됨 |
                                      Simple_AC.mq5 (0.86 KB)
                                      AC_Strength.mq5 (1.46 KB)
                                      앨리게이터로 트레이딩 시스템 설계 방법 알아보기 앨리게이터로 트레이딩 시스템 설계 방법 알아보기
                                      이번 글이 가장 인기 있는 보조지표를 기반으로 트레이딩 시스템을 설계하는 방법에 대한 시리즈의 마지막 기사입니다. 우리는 앨리게이터 지표를 기반으로 트레이딩 시스템을 만드는 방법을 배워볼 것입니다.
                                      모집단 최적화 알고리즘: 박쥐 알고리즘(BA) 모집단 최적화 알고리즘: 박쥐 알고리즘(BA)
                                      이 기사에서는 부드러운 함수에서 좋은 수렴을 보이는 박쥐 알고리즘(BA)에 대해 알아볼 것입니다.
                                      Expert Advisor 개발 기초부터(24부): 시스템 견고성(I) Expert Advisor 개발 기초부터(24부): 시스템 견고성(I)
                                      이 글에서 우리는 시스템을 더욱 안정적으로 만들고 강력하고 안전하게 사용할 수 있도록 하겠습니다. 이러한 견고성을 달성하는 방법 중 하나는 코드를 가능한 한 많이 재사용하여 다양한 경우에 지속적으로 테스트하는 것입니다. 하지만 이것은 여러 방법 중 하나일 뿐입니다. 또 다른 하나는 OOP를 사용하는 것입니다.
                                      모집단 최적화 알고리즘: 반딧불이 알고리즘(FA) 모집단 최적화 알고리즘: 반딧불이 알고리즘(FA)
                                      이 글에서는 반딧불이 알고리즘(FA) 최적화 방법에 대해 살펴보겠습니다. 수정을 통해 알고리즘은 주변부의 존재에서평점 테이블의 실제 리더가 되었습니다.