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

VIDYA으로 트레이딩 시스템 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 23 8월 2023, 13:58
444 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

초보자를 위한 새로운 기술 도구와 간단한 전략에 기반한 트레이딩 시스템을 설계 하는 방법에 대해 알아보는 시리즈의 새로운 글입니다. 오늘은 가변 지수 동적 평균(VIDYA) 지표에 대해 알아봅니다. 이 지표는 트레이딩에서 사용할 수 있는 추세 추종 지표 중 하나로 이 이름이 알려주듯이 이 지표는 추세를 따릅니다. 따라서 이 지표는 후행 지표로서 가격 움직임이 있은 이후에 움직인다는 의미입니다. 우리는 다음의 주제를 통해 이 지표에 대해 알아볼 것입니다.

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


모든 학습 과정에서 연습은 매우 중요한 단계입니다. 여러분의 프로그래밍 기술을 향상시키고 싶다면 배운 내용을 스스로 적용하면서 여러분의 이해를 깊게 해야 합니다. 우리는 MetaTrader 5 거래 터미널에 내장된 MQL5(MetaQuotes Language 5)를 사용할 것입니다. 다운로드 및 사용 방법에 대해 알고 싶으시다면 이전 기사 메타에디터에서 MQL5 코드 작성하기라는 글을 읽어 보시기 바랍니다.

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


VIDYA 정의

가변 지수 동적 평균(VIDYA)은 투샤르 찬데가 개발한 추세 추종 지표입니다. 지수이동평균처럼 보이지만 상대적 가격 변동성에 따라 동적으로 조정됩니다. 변동성은 양의 움직임과 음의 움직임의 합 사이의 비율을 측정하여 Chande 모멘텀 오실레이터 (CMO)로 측정됩니다. (CMO)는 지수 이동 평균을 평활화 하는 데 사용됩니다. 이 지표의 설정은 CMO 기간과 EMA 기간으로 매개 변수로 합니다. 지표가 상승 추세 또는 하락 추세인 경우 다른 이동 평균과 같은 방식으로 사용하여 추세의 유형을 알 수 있습니다. 추세의 유형과 이를 식별하는 방법에 대해 자세히 알고 싶으시면 이전 글에서 추세 정의라는 주제를 읽어 보시기 바랍니다. 또는 매수 또는 매도 신호를 생성하는 데 이 지표를 사용할 수 있으며 VIDYA 전략이라는 주제를 통해 이를 기반으로 한 몇 가지 간단한 전략을 살펴보겠습니다.

이제 VIDYA 지표의 주요 개념에 대해 더 자세히 이해하기 위해 어떻게 계산할 수 있는지에 대해 알아보도록 하겠습니다. 아래의 단계는 수동으로 계산하는 방법입니다.

  • EMA를 계산합니다:

EMA(i) = 가격(i) * F + EMA(i-1)*(1-F)

여기서:

EMA(i) = 현재 EMA

Price(i) = 현재 가격

F(평활화 계수) = 2/(기간의 EMA+1)

EMA(i-1) = 이전 EMA 값

  • 가변 인덱스 동적 평균(VIDYA) 값을 계산합니다:

VIDYA(i) = 가격(i) * F * ABS(CMO(i)) + VIDYA(i-1) * (1 - F* ABS(CMO(i)))

여기서:

VIDYA(i) = 현재 VIDYA

ABS(CMO(i)) = 샹데 모멘텀 오실레이터의 절대 현재 값입니다.

VIDYA(i-1) = 이전 VIDYA 값

  • 샹데 모멘텀 오실레이터(CMO)를 계산합니다:

CMO(i) = (UpSum(i) - DnSum(i))/(UpSum(i) + DnSum(i))

여기서:

UpSum(i) = 해당 기간 동안의 양의 이동 합계의 현재 값입니다.

DnSum(i) = 해당 기간 동안의 음의 이동 합계의 현재 값입니다.

이후 VIDYA 지표를 얻을 수 있습니다. 수동으로 계산할 필요는 없습니다. MetaTrader 5 거래 플랫폼에서 사용 가능한 보조지표에서 차트에 삽입할 보조지표를 선택하기만 하면 됩니다. 삽입하는 방법은 다음과 같습니다.

삽입 --> 지표 --> 추세 --> 가변 지수 동적 평균

VIDYA 인서트

그러면 지표의 매개변수가 있는 다음과 같은 창이 열립니다:

VIDYA 매개변수

1 - 샹데 모멘텀 오실레이터(CMO) 기간

2 - 지수 이동 평균(EMA) 기간의 주기.

3 - 가격 유형

4 - VIDYA 라인의 색상

5 - 비디야 라인 스타일

6 - VIDYA 라인 두께

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

 VIDYA 첨부

이전 차트에서 볼 수 있듯이 지표는 차트에 삽입되며 해당 값과 가격 변동에 따라 가격 위 또는 아래에 선이 표시됩니다. VIDYA 선이 가격 위에 있으면 약세에 있음을 의미하고, 반대로 VIDYA 선이 가격 아래에 있으면 강세에 있음을 의미합니다.


VIDYA 전략

이 주제에서는 이 지표의 주요 개념을 기반으로 한 간단한 전략을 통해 VIDYA 지표를 사용하는 방법을 배웁니다. 보다 안정적이고 효과적인 결과를 얻으려면 이 지표를 다른 기술적 도구 또는 지표와 결합하는 것이 좋습니다. 이렇게 하면 다양한 관점에서 더 많은 통찰력을 얻을 수 있고 이것이 기술적 분석의 특징 중 하나이기 때문입니다.

    전략 1: VIDYA 트렌드 식별자

      현재 종가와 현재 VIDYA를 지표의 기본 설정(9,12)과 비교하여 추세의 유형이 상승인지 혹은 하락인지 신호를 얻어야 합니다. 현재 종가가 VIDYA보다 높으면 상승 추세로 신호를 설정해야 합니다. 다른 경우로 현재 종가가 VIDYA보다 낮으면 하락 추세의 신호를 얻어야 합니다.

      현재 종가 > VIDYA --> 상승 추세

      현재 종가 < VIDYA --> 하락 추세

        전략 2: VIDYA 한개 교차

          이전 전략에서 동일한 값을 비교하여 매수 또는 매도 신호를 얻어야 합니다. 현재 종가가 VIDYA 이상이면 매수 신호를 받아야 합니다. 반대로 현재 종가가 현재 VIDYA보다 낮으면 매도 신호를 받아야 합니다.

          현재 종가 > VIDYA --> 매수 신호

          현재 종가 < VIDYA --> 매도 신호

            전략 3: VIDYA 두개 교차

              VIDYA를 지표의 설정(9, 12)과 비교하고 설정(20, 50)과 비교하여 매수 또는 매도 신호를 얻어야 합니다. VIDYA(9, 12)가 VIDYA(20, 50)보다 커질 때 매수 신호를 받아야 합니다. 다른 시나리오에서는 현재 VIDYA(9, 12)가 현재 VIDYA(20, 50)보다 낮으면 매도 신호가 됩니다.

              VIDYA (9, 12) > VIDYA (20, 50) --> 매수 신호

              VIDYA (9, 12) < VIDYA (20, 50) --> 매도 신호

              이상 앞의 세 가지 간단한 전략을 통해 VIDYA 지표의 주요 개념을 기반으로 한 사용법을 배웠습니다.


              VIDYA 전략 청사진

              이 주제에서는 살펴본 각 전략을 수행하는 트레이딩 시스템을 원활하게 구축하는 데 도움이 되는 단계별 청사진을 설계해 보겠습니다.

                전략 1: VIDYA 트렌드 식별자

                  이 전략에 따르면 우리는 추세의 유형에 따라 신호를 생성하는 트레이딩 시스템을 만들어야 합니다. 우리는 거래 시스템에서 현재 종가와 현재 VIDYA 값의 두 가지 값을 확인하여 추세 유형을 결정해야 합니다. 현재 종가 값이 VIDYA 값보다 크면 추세가 상승 중이라는 신호입니다.

                  따라서 트레이딩 시스템이 차트에 다음 값으로 코멘트를 반환해야 합니다:

                  • 상승 추세
                  • 현재 종가 값
                  • 현재 VIDYA 값

                  다른 시나리오는 현재 종가가 현재 VIDYA 값보다 낮으면 추세가 하락하고 있다는 신호입니다.

                  따라서 트레이딩 시스템이 차트에 다음과 같은 값으로 코멘트를 반환해야 합니다:

                  • 하락 추세
                  • 현재 종가 값
                  • 현재 VIDYA 값

                  다음은 이 전략의 청사진입니다:

                   VIDYA 트렌드 식별자 청사진

                    전략 2: VIDYA 한개 교차

                      우리는 이 전략에 따라 매수 또는 매도 신호가 있을 때 이를 알려주는 트레이딩 시스템을 만들어야 합니다. 이 전략에서는 VIDYA 추세 식별자의 동일한 값을 사용하지만 다른 신호를 얻습니다. 우리는 거래 시스템에서 현재 종가와 현재 VIDYA 값, 이 두 가지 값을 확인해야 하며 현재 종가가 VIDYA 값보다 크면 매수 신호가 됩니다.

                      따라서 거래 시스템이 다음 값을 반환해야 합니다:

                      • 매수 신호
                      • 현재 종가 값
                      • 현재 VIDYA 값

                      그 반대의 경우 현재 종가가 VIDYA보다 낮으면 매도 신호가 됩니다.

                      따라서 트레이딩 시스템이 차트에 코멘트로 다음과 같은 값을 반환해야 합니다:

                      • 매도 신호
                      • 현재 종가 값
                      • 현재 VIDYA 값
                      다음은 이 전략의 청사진입니다:

                      VIDYA 하나의 크로스오버 청사진

                        전략 3: VIDYA 두개 교차

                          우리는 이 전략에 따라 매수 및 매도 신호를 생성하는 트레이딩 시스템을 만들어야 합니다. 우리는 두 가지 값을 확인해야 하며 현재 (9, 12) VIDYA와 현재 VIDYA (20, 50)를 계속해서 확인해야 합니다. 현재(9, 12) 값이 현재(20, 50)보다 크면 매수 신호가 됩니다.

                          따라서 거래 시스템이 다음 값을 반환해야 합니다:

                          • 매수 신호
                          • 현재 종가 값
                          • 현재 VIDYA(9, 12) 값
                          • 현재 VIDYA(20, 50) 값

                          다른 시나리오에서는 현재 (9, 12) VIDYA 값이 현재 (20, 50) VIDYA 값보다 낮으면 매도 신호가 됩니다.

                          따라서 거래 시스템이 다음 값을 반환해야 합니다:

                          • 매도 신호
                          • 현재 종가 값
                          • 현재 VIDYA(9, 12) 값
                          • 현재 VIDYA(20, 50) 값

                          다음은 이 전략의 청사진입니다:


                          VIDYA 투 크로스오버 청사진

                          이와 같이 우리는 자동 거래 시스템을 만드는 데 도움을 주는 각 전략에 대한 간단한 단계별 청사진을 설계했으며 VIDYA 거래 시스템의 가장 흥미로운 주제를 살펴보았습니다. 이제 우리는 각 전략에 대한 거래 시스템을 만들 준비가 되었습니다. 


                          VIDYA 거래 시스템

                          이 간단한 거래 시스템은이 값을 차트에 코멘트로 표시하기 때문에 VIDYA 지표의 현재 값을 지속적으로 볼 수 있도록 도와줍니다.

                          다음 단계는 필요한 작업을 수행하는 거래 시스템을 만드는 방법에 대한 설명입니다.

                          실수 타입 또는 분수로 값을 나타내는 부동 소수점 타입 중 하나인 double 함수를 사용하여 "vidyaArray"에 대한 배열을 생성합니다.

                          double vidyaArray[];

                          생성된 "vidyaArray" 배열을 "ArraySetAsSeries" 함수를 사용하여 부울 값을 반환하는 방식으로 정렬합니다.

                          ArraySetAsSeries(vidyaArray,true);

                          지표의 핸들을 반환하는 "iVIDyA" 함수를 사용하여 VIDYA 지표의 정의와 동일하도록 "vidyaDef"에 대한 정수 변수를 생성합니다.

                          매개변수는 다음과 같습니다:

                          • symbol: 현재 심볼에 적용할 (_Symbol)을 사용합니다.
                          • period: 현재 기간 또는 차트 주기에 적용하려면 (_Period)를 사용합니다.
                          • cmo_period: 샹데 모멘텀의 기간을 결정하기 위해 9로 합니다.
                          • ema_period: 지수 이동 평균 평활 기간을 결정하기 위해 12로 합니다.
                          • ma_shift: 필요한 경우 차트에서 수평 이동을 결정하기 위해 0을 결정합니다.
                          • applied_price: 가격 유형을 결정하기 위해 종가를 사용합니다.
                          int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);

                          VIDYA 지표에서 데이터를 가져오는 "CopyBuffer" 함수를 사용하여 생성된 배열을 채웁니다.

                          이 함수의 매개 변수는 다음과 같습니다:

                          • indicator_handle: 지표의 핸들을 결정합니다. 우리는 (vidyaDef)를 사용할 것입니다.
                          • buffer_num: 지표의 버퍼 번호를 결정합니다. 우리는 (0)을 사용합니다.
                          • start_pos: 시작 위치를 결정합니다. 우리는 (0)을 사용합니다.
                          • count: 복사할 양을 결정합니다. 우리는 (3)을 사용합니다.
                          • buffer[]: 복사할 대상 배열을 결정합니다. 우리는 (vidyaArray)를 사용할 것입니다.
                          CopyBuffer(vidyaDef,0,0,3,vidyaArray);

                           더블 타입 값을 반환하는 "NormalizeDouble" 함수를 사용하여 변수를 생성한 후 "vidyaVal"을 얻습니다.

                          이 함수의 매개 변수는 다음과 같습니다:

                          • value: 정규화된 숫자로 (vidyaArray[0]을 사용합니다.
                          • digits: 소수점 이하 자릿수로 (6)을 사용합니다.
                          double vidyaVal = NormalizeDouble(vidyaArray[0],6);

                          코멘트 함수를 사용하여 차트에 현재 VIDYA 값을 코멘트로 생성합니다:

                          Comment("VIDYA Value is ",vidyaVal);

                          이 트레이딩 시스템의 전체 코드는 다음과 같습니다:

                          //+------------------------------------------------------------------+
                          //|                                                 Simple VIDYA.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 vidyaArray[];
                          
                             ArraySetAsSeries(vidyaArray,true);
                          
                             int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                          
                             CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                          
                             double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                          
                             Comment("VIDYA Value is ",vidyaVal);
                          
                            }
                          //+------------------------------------------------------------------+
                          

                          이 코드를 컴파일하면 내비게이터에서 다음과 같이 이 거래 시스템의 EA를 찾을 수 있습니다:

                           VIDYA nav

                          차트에 끌어다 놓으면 다음과 같은 트레이딩 시스템 창이 나타납니다:

                           간단한 VIDYA 승리

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

                          간단한 VIDYA 첨부

                          이전 차트에서 오른쪽 상단 모서리에서 볼 수 있었던 것과 같이 EA가 첨부되어 있습니다. 이제 우리가 원하는 신호가 다음과 같이 나타나는 것을 확인할 수 있습니다:

                           간단한 VIDYA 신호

                          이전 차트에서와 마찬가지로 왼쪽 상단 모서리에 현재 VIDYA 값에 대한 코멘트가 있습니다. MetaTrader 5에 내장된 VIDYA 지표의 값과 동일한 값이 있는지 확인해야 하는 경우 EA를 연결한 후 다음과 같이 EA와 동일한 설정으로 내장 지표를 삽입할 수 있습니다:

                           간단한 VIDYA 동일 신호

                          이전 차트에서 볼 수 있듯이 오른쪽 상단 모서리에 EA가 차트에 첨부되어 있고 차트 왼쪽 상단 모서리에 이 EA의 현재 값이 있으며 오른쪽 데이터 창에서 볼 수 있듯이 내장 지표가 가격 차트와 해당 값에 첨부되어 있습니다. 분명히 두 값이 동일하다는 것을 알 수 있습니다.

                            전략 1: VIDYA 트렌드 식별자

                              이 전략을 수행하는 트레이딩 시스템을 만들어야 할 경우 이 전략의 전체 코드는 다음과 같습니다:

                              //+------------------------------------------------------------------+
                              //|                                       VIDYA 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()
                                {
                                 MqlRates priceArray[];
                                 double vidyaArray[];
                              
                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);
                              
                                 int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                              
                                 CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                              
                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                              
                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                              
                                }
                              //+------------------------------------------------------------------+
                              

                              이 코드에서의 차이점:

                              앞서 언급했듯이 "MqlRates" 함수를 사용하여 가격에 대한 두 개의 배열을 만들고 "double"을 사용하여 VIDYA에 대한 두 개의 배열을 만듭니다.

                                 MqlRates priceArray[];
                                 double vidyaArray[];
                              

                              이렇게 생성된 배열을 정렬하고, priceArray의 경우 "CopyRates" 함수를 사용하여 "MqlRates"의 과거 데이터를 가져옵니다. 매개변수는 다음과 같습니다:

                              • 심볼 이름: (_Symbol)을 사용합니다.
                              • 차트 주기: (_Period)를 사용합니다.
                              • 시작 시간: (0)을 사용할 것입니다.
                              • 중지 시간: (3)을 사용합니다.
                              • 가격 배열: (priceArray)를 사용합니다.

                              vidyaArray의 경우 앞서 언급한 것과 동일하게 "ArraySetAsSeries" 함수를 사용하겠습니다.

                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);
                              

                              현재 종가 및 현재 VIDYA 값을 정의합니다.

                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                              

                              이 전략의 조건:

                              1. 상승 추세의 경우

                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              

                              2. 하락 추세의 경우

                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              

                              이 코드를 컴파일하여 원하는 차트에 삽입하면 다음과 같습니다:

                              VIDYA 트렌드 식별자 첨부

                              이전 차트의 오른쪽 상단에서 볼 수 있었듯이 VIDYA 추세 식별자 EA가 첨부되어 있는 것을 볼 수 있습니다. 이제 신호를 수신하는 것을 시작 할 수 있습니다. 테스트 중에 얻은 이러한 신호의 몇 가지 예는 다음과 같습니다.

                              1. 상승 추세의 경우

                               VIDYA 추세 식별기 - 상승 추세 신호

                              왼쪽 상단의 이전 차트에서 볼 수 있듯이 다음과 같은 값을 찾을 수 있습니다:

                              • 상승 추세
                              • 현재 종가 값
                              • 현재 VIDYA 값

                              2. 하락 추세의 경우

                               VIDYA 추세 식별기 - 하락 추세 신호

                              이전 차트를 기반으로 다음과 같은 값을 찾을 수 있습니다:

                              • 하락 추세
                              • 현재 종가 값
                              • 현재 VIDYA 값
                                전략 2: VIDYA 한개 교차

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

                                  //+------------------------------------------------------------------+
                                  //|                                          VIDYA one 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()
                                    {
                                     MqlRates priceArray[];
                                     double vidyaArray[];
                                  
                                     int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                     ArraySetAsSeries(vidyaArray,true);
                                  
                                     int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                  
                                     CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                  
                                     double currentClose=NormalizeDouble(priceArray[2].close,6);
                                     double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                  
                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                  
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  이 코드에서의 차이점:

                                  이 전략을 기반으로 한 코멘트

                                  1. 매수 신호의 경우

                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  

                                  2. 매도 시그널의 경우

                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  

                                  이 코드를 컴파일한 후 다음과 같이 원하는 차트에 삽입합니다:

                                  VIDYA 크로스오버 1개 부착

                                  차트의 오른쪽 상단에 이전 차트에서 볼 수 있었던 것과 같이 EA가 첨부되어 있습니다. 그 후 이 전략에 따라 매수 및 매도 신호를 받습니다. 시스템 테스트의 예는 다음과 같습니다.

                                  1. 매수 신호의 경우

                                  VIDYA 원 크로스오버 - 매수 신호

                                  왼쪽 상단에서 VIDYA 한개 교차에 기반한 다음과 같은 값을 찾을 수 있습니다:

                                  • 매수 신호
                                  • 현재 종가 값
                                  • 현재 VIDYA 값

                                  2. 매도 시그널의 경우

                                   VIDYA 원 크로스오버 - 매도 신호

                                  왼쪽 상단의 이전 차트에서 볼 수 있듯이 다음과 같은 값을 찾을 수 있습니다:

                                  • 매도 신호
                                  • 현재 종가 값
                                  • 현재 VIDYA 값
                                    전략 3: VIDYA 두개 교차

                                      다음은 거래 시스템을 만들기 위한 이 VIDYA 두개 교차 전략의 전체 코드입니다.

                                      //+------------------------------------------------------------------+
                                      //|                                          VIDYA two 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()
                                        {
                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);
                                      
                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);
                                      
                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);
                                      
                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);
                                      
                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                      
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      이 코드에서의 차이점:

                                      세 개의 배열, price, vidyaArray, vidyaArray1 만들기

                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];
                                      

                                      이렇게 생성된 배열 정렬하기

                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);
                                      

                                      "vidyaDef" 및 "vidyaDef1" 정의하기

                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);
                                      

                                      "vidyaArray" 및 " vidyaArray1"의 배열 채우기

                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);
                                      

                                      currentClose, "vidyaVal", "vidyaVal1" 값 정의하기

                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);
                                      

                                      이 전략에 기반한 신호 조건:

                                      1. 매수 신호의 경우

                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      

                                      2. 매도 시그널의 경우

                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      

                                      이 코드를 컴파일하여 원하는 차트에 삽입하면 다음과 같습니다:

                                       VIDYA 2 크로스오버 부착

                                      차트 오른쪽 상단에 EA가 첨부되어 있습니다. 이제 이 전략에 따라 매수 및 매도 신호를 확인할 수 있습니다. 시스템 테스팅의 몇 가지 예는 다음과 같습니다.

                                      매수 신호인 경우:

                                      VIDYA 투 크로스오버 - 매수 신호

                                      차트 왼쪽 상단에서 교차 후 다음과 같은 값을 볼수 있습니다:

                                      • 매수 신호
                                      • 현재 종가 값
                                      • 현재 (9,12) VIDYA 값
                                      • 현재 (20,50) VIDYA 값

                                      매도 신호인 경우:

                                       VIDYA 투 크로스오버 - 매도 신호

                                      다른 시나리오에서는 교차 후 차트의 왼쪽 상단에 다음과 같은 값이 나오게 됩니다:

                                      • 매도 신호
                                      • 현재 종가 값
                                      • 현재 (9,12) VIDYA 값
                                      • 현재 (20,50) VIDYA 값


                                      결론

                                      이제 모든 주제를 다루었습니다. 이 기사를 통해 많은 주제를 다루었습니다. 이제 여러분은 가변 지수 동적 평균 (VIDYA)이 무엇인지 자세히 알게 되었을 것입니다. 가변 지수 동적 평균(VIDYA) 지표가 무엇인지, 무엇을 측정하는지, 이 지표의 주요 개념을 이해하기 위해 우리는 지표를 수동으로 계산하는 방법과 차트에 삽입하고 읽는 방법을 알아 보았습니다. VIDYA 정의라는 주제를 통해 이 모든 것을 배웠습니다. 이어서 VIDYA 전략이라는 주제를 통해 지표의 기본 개념을 바탕으로 간단한 전략을 어떻게 활용할 수 있는지 배웠습니다:

                                      • VIDYA 추세 식별자 전략: 상승 추세 또는 하락 추세가 있는 경우 해당 추세의 유형으로 신호를 받습니다.
                                      • VIDYA 한개 교차 전략: 가격과 VIDYA 라인의 크로스오버를 기반으로 매수 또는 매도 시그널을 받습니다.
                                      • VIDYA 두 교차 전략: 설정이 (9,12)인 VIDYA와 설정이 (20,50)인 VIDYA 사이의 교차를 기반으로 매수 또는 매도 신호를 얻습니다.

                                      이러한 연습은 프로그래밍 뿐만 아니라 학습 과정에서 이해를 깊게 하고 기술을 향상시키는 데 필요한 매우 중요한 단계입니다. 여러분은 초보자로서 프로그래밍 기술을 개발하기 위해 설계된 거래 시스템에 대한 코드를 직접 작성해 보시기 바랍니다. 이 기사의 주요 개념은 교육 목적으로만 사용되며 최적화 또는 변경이 필요하기도 하며 모든 사람에게 동일하게 적합한 전략이 없기 때문에 여러분의 거래 스타일에 적합하지 않을 수 있습니다. 실제의 돈으로 실제 계정에서 사용하기 전에 전략을 테스트해야 한다는 것을 다시 한 번 확인 드립니다.

                                      이 글이 도움이 되셨기를 바라며 글의 주제 또는 관련 주제에 대한 좋은 통찰력을 얻으셨기를 바랍니다. 가장 인기있는 기술 지표를 기반으로 그 사용 방법 및 거래 시스템을 설계하는 방법에 대해 알아보려면 더 많은 유사한 기사를 읽어 보시기 바랍니다. 초보자를 위한 이 시리즈의 이전 기사를 읽어 보시고 이러한 기술 지표에 대해 더 자세히 배우고 이해 한 후 RSI, MACD, 스토캐스틱, 이동 평균, 볼린저 밴드, 엔벨로프 등으로 거래 시스템을 설계하는 방법에 대한 기사를 찾아보시기 바랍니다.

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

                                      모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO) 모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO)
                                      이번에는 최신의 최적화 알고리즘 중 하나인 그레이 울프 최적화에 대해 알아봅시다. 테스트 함수에서의 오리지널 행동은 이 알고리즘을 앞서 고려한 알고리즘 중 가장 흥미로운 알고리즘 중 하나로 만듭니다. 이 알고리즘은 신경망 훈련, 많은 변수가 있는 부드러운 함수의 훈련에 사용되는 최고의 알고리즘 중 하나입니다.
                                      불스 파워로 트레이딩 시스템 설계 하는 방법 알아보기 불스 파워로 트레이딩 시스템 설계 하는 방법 알아보기
                                      이번 글은 가장 인기 있는 보조지표로 트레이딩 시스템을 설계하는 방법을 알아보는 시리즈의 새로운 글입니다. 이번에는 불스 파워 보조지표로 트레이딩 시스템을 설계하는 방법에 대해 알아봅니다.
                                      모집단 최적화 알고리즘: 뻐꾸기 최적화 알고리즘(COA) 모집단 최적화 알고리즘: 뻐꾸기 최적화 알고리즘(COA)
                                      다음으로 살펴볼 알고리즘은 레비 비행을 사용한 뻐꾸기 검색 최적화입니다. 이는 최신의 최적화 알고리즘 중 하나이며 인기 있는 새로운 알고즘 중 하나입니다.
                                      Expert Advisor 개발 기초부터(21부): 새로운 주문 시스템(IV) Expert Advisor 개발 기초부터(21부): 새로운 주문 시스템(IV)
                                      이제 비록 완성되지는 않았지만 시각적 시스템이 작동하기 시작합니다. 여기서 이제 우리는 주요 변경 사항을 다 적용할 것입니다. 꽤 많은 항목이 있지만 모두 필요한 항목입니다. 아마도 전체 작업이 꽤 흥미로울 것입니다.