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

불스 파워로 트레이딩 시스템 설계 하는 방법 알아보기

MetaTrader 5트레이딩 | 21 8월 2023, 08:12
344 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이번 시리즈 중 이 기사에서는 트레이딩을 개선하는 데 사용할 수 있는 새로운 기술 도구에 대해 알아보겠습니다. 이 글에서는 시장이 상승세 인지 여부의 측정에 대해 우리에게 통찰력을 주는 기술적 지표 중 하나인 불스 파워 지표에 대해 알아봅시다. 우리는 이 기술 지표에 대해 자세히 알아보고 다음 주제를 통해 이 기술 도구를 다룰 것입니다:

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

불스 파워 정의라는 주제를 통해 우리는 불스 파워 지표가 무엇인지, 무엇을 측정하는지, 어떻게 수동으로 계산하여 이 지표의 주요 개념을 이해할 수 있는지, 어떻게 읽을 수 있는지 알아보고 배우게 될 것입니다. 불스 파워 전략 부분에서 우리는 이 지표의 기본 개념에 대한 이해를 하고 거래 결과를 향상시키는 데 유리하게 사용할 수 있는 몇 가지 간단한 전략을 통해서 지표를 사용하는 방법에 대해 알아볼 것입니다. 그 후 불스 파워 전략 청사진이라는 주제를 통해 모든 전략에 대한 단계별 청사진을 설계하고 이러한 청사진이 모든 전략에 대한 거래 시스템을 만드는 데 도움이 되도록 할 것입니다. 그런 다음 언급 된 모든 전략에 대한 거래 시스템을 만들어 MetaTrader 5 트레이딩 플랫폼에서 신호를 실행하도록 하고 신호를 자동화하도록 할 것입니다.

우리는 MetaTrader 5 트레이딩 터미널을 사용하고 MetaQuotes Language 5(MQL5)로 코드를 작성할 것입니다. MetaTrader 5를 다운로드하고 MQL5를 사용하는 방법을 알고 싶다면 이전 글에서 메타에디터에서 MQL5 코드 작성하기 라는 주제를 읽고 이에 대해 자세히 알아볼 수 있습니다. 코딩 기술을 향상시키고 잘 이해하려면 읽은 내용을 직접 적용해 보는 것이 좋습니다.

프로그래밍의 중요성은 날로 커지고 있습니다. 우리의 사례는 이 중요한 도구를 배우는 것의 중요성을 일깨워줍니다. 프로그래밍의 중요성은 프로그래밍의 이점에서 비롯되며 그 이점은 매우 많습니다. 트레이딩에서 프로그래밍의 가장 중요한 이점은 코딩을 하거나 프로그램을 만들어 우리가 계속 해야 하는 일을 대신하도록 하여 시간을 절약할 수 있고 우리가 필요로 하는 것에 대해 정확한 결과를 얻을 수 있으며 트레이딩을 해칠 수 있는 감정을 피할 수 있다는 점입니다.

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

이제 이 글의 주제부터 시작하겠습니다.

불스 파워의 정의

이 주제에서는 불스 파워 지표의 주요 개념을 이해하기 위해 불스 파워 지표에 대해 자세히 알아볼 것입니다. 불스 파워 지표는 이전 글인 베어스 파워로 트레이딩 시스템을 설계하는 방법 알아보기에서 살펴본 베어스 파워와 반대되는 지표입니다. 불스 파워는 알렉산더 엘더가 개발한 것으로 시장의 강세를 측정합니다. 강세가 약해지는 여부와 약세가 시작될 것인지 여부등에 대해 알려줍니다. 불스 파워는 영점 위 또는 아래로 진동하는 오실레이터 지표입니다. 따라서 이 지표는 시장을 움직이는 가장 중요한 요소에 대한 중요한 통찰력을 제공합니다. 이 요소는 바로 수요와 공급입니다.

이 지표를 수동으로 계산하는 방법은 아래에서 확인할 수 있습니다:

  • 고점(특정 기간 동안 가장 높은 값)를 가져옵니다.
  • 지수 이동 평균 EMA를 구합니다.
  • 고점과 지수 이동 평균의 차이를 구합니다.

불스 파워 = 고점 - EMA

상승세가 시장을 지배하면 대부분 더 높은 값이 되도록 시장을 계속 밀어붙입니다. 따라서 우리는 이 고점을 측정해야 하기 때문에 공식에서 고점을 사용하여 불스 파워를 계산하고 이 고점과 EMA의 차이를 구하여 앞서 언급했듯이 제로 레벨을 중심으로 진동하는 오실레이터 지표를 얻고 불스 파워의 값이 제로 레벨에 가까워지고 이전보다 낮아지면 불스가 약해졌다는 지표를 얻을 수 있습니다.

이 지표를 다른 추세 지표와 함께 사용하는 것이 좋습니다. 왜냐하면 그러면 더 효과적인 통찰력을 제공할 것이기 때문입니다. 이러한 식의 지표 사용은 더 많은 통찰력을 얻고 다양한 관점에서 상품을 볼 수 있도록 해 주기 때문에 매우 유용하며 기술적 분석의 유용한 기능 중 하나이기도 합니다.

이 지표는 MetaTrader 5 거래 터미널에 있습니다. 수동으로 계산할 필요가 없습니다. 삽입 --> 지표 --> 오실레이터 --> 불스 파워를 눌러 차트에 삽입하기만 하면 됩니다. 다음 그림을 통해서도 이를 확인할 수 있습니다:

불스 파워 인서트

지표를 선택하면 다음과 같은 매개변수 창이 표시됩니다:

 불스 파워 파라미터

1 - 계산에 사용할 기간을 결정합니다.

2 - 불스 파워 바의 색상을 결정합니다.

3 - 불스 파워의 바의 두께를 결정합니다.

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

 불스 파워 부착

이전 차트의 하단에서 볼 수 있듯이 불스 파워 지표가 차트에 첨부되어 있고 막대가 0을 중심으로 진동하는 것을 볼 수 있습니다. 0 이상의 값은 강세가 통제하고 있음을 의미하며 0에 가까워지고 0보다 낮아지면 이는 약해졌음을 의미합니다. 상승세가 약해지면 하락세가 가격을 낮은 방향으로 밀어내면서 시장을 통제하거나 적어도 상승세와 하락세 간의 균형을 통해 시장이 균형을 이루게 된다는 것을 알 수 있습니다.

불스 파워 전략

이 부분에서는 이 지표의 기본 개념을 바탕으로 사용할 수 있는 간단한 전략을 통해 불스 파워 지표를 어떻게 사용할 수 있는지 알아보겠습니다. 다음은 그러한 전략과 그 조건에 대한 설명입니다. 여기서 확인해야 할 것은 이러한 교육용 전략은 지표의 주요 개념과 이를 사용할 수 있는 방법을 이해하는 것이 주요 목적으로 모든 사람에게 적합한 전략은 없다는 것입니다. 여러분은 실제 계정에서 이들 전략을 사용하기 전에 모든 전략을 테스트하여 거래에 도움이 되는지 확인해야 합니다.

    • 전략 1: 불스 파워 운동

      이 전략에 따르면 우리는 현재 및 이전의 불스 파워 값의 위치를 기반으로 신호를 얻어야 합니다. 현재 불스 파워의 값이 이전 값보다 크면 우리는 불스 파워 지표가 상승하고 있다는 신호로 간주합니다. 반대로 현재 값이 이전 값보다 낮으면 불스 파워가 하락하고 있다는 신호로 간주합니다.

      간단히 설명하면 다음과 같습니다:

      현재 불스 파워 > 이전 불스 파워 --> 불스 파워가 상승 중.

      현재 불스 파워 < 이전 불스 파워 --> 불스 파워가 감소하고 있습니다.

        • 전략 2: 불스 파워 - 강함 또는 발산

          이 전략을 기반으로 현재 고점, 이전 고점, 강세, 이전 강세 등 네 가지 값을 평가하여 강한 움직임이 있는지 또는 차이가 있는지 알려주는 신호를 얻습니다. 현재 고점이 이전 고점보다 높고 현재 불스 파워 값이 이전 고점보다 높으면 우리는 이를 강한 움직임의 신호로 간주합니다. 반대로 현재 고점이 이전 고점보다 높고 현재 고점값이 이전 고점보다 낮으면 약세 다이버전스 신호로 간주합니다.

          간단히 설명하면 다음과 같습니다:

          현재 고점 > 이전 고점 및 현재 상승세 > 이전 상승세 --> 강한 움직임

          현재 고점 < 이전 고점 및 현재 상승세 > 이전 상승세 --> 약세 다이버전스

            • 전략 3: 불스 파워 신호

              이 전략에 따라 매수 및 매도의 신호를 얻을 수 있는 신호가 필요하며 이를 위해 우리는 네 가지 값을 평가할 것입니다. 이 네 가지 값은 현재 불스 파워, 제로 레벨, 현재 종가, 현재 지수 이동 평균입니다. 현재 불스 파워가 0 수준보다 낮고 현재 종가가 지수 이동 평균보다 낮으면 매도 신호로 간주합니다. 현재 불스 파워가 제로 수준보다 크고 현재 종가가 지수 이동 평균보다 크면 매수 신호가 됩니다.

              간단히 설명하면 다음과 같습니다:

              현재 불스 파워 < 제로 수준 및 현재 종가 < EMA --> 매도

              현재 베어스 파워 > 제로 레벨 및 현재 종가 > EMA --> 매수

              불스 파워 전략 청사진

              이번 주제에서는 아이디어를 정리한 후 쉽고 원활하게 거래 시스템을 만들 수 있도록 언급된 모든 전략의 단계별 청사진을 설계할 것입니다.

              • 전략 1: 불스 파워 운동

              우리는 컴퓨터가 매 틱마다 두 개의 값을 확인하도록 해야 하는데 이 값은 현재 불스 파워와 이전 불스 파워를 확실히 생성한 후에 확인해야 합니다. 모든 것의 위치를 파악하려면 이들 값을 확인하는 프로그램이 필요합니다. 현재 상승세가 이전 상승세보다 큰 경우 프로그램 또는 EA 가 차트에 다음 값과 각각의 값을 별도의 줄로 표시한 코멘트로 신호를 반환해야 합니다:

              • 불스 파워가 상승 중
              • 불스 파워 값
              • 불스 파워 이전 값

              우리가 고려해야 할 또 다른 시나리오가 있습니다. 현재 불스 파워의 값이 이전 값보다 낮으면 EA가 다음 값과 각각의 값을 별도의 줄에 코멘트로 반환해야 합니다:

              • 불스 파워가 감소중
              • 불스 파워 값
              • 불스 파워의 이전 값입니다.

              다음은 전략을 기반으로 한 이 트레이딩 시스템의 간단한 청사진입니다:

               불스 파워 무브먼트 청사진

              • 전략 2: 불스 파워 - 강함 또는 발산

              이 전략에 따르면 거래 시스템은 네 가지 값을 확인해야 하며 이 값은 현재 고점, 이전 고점, 현재 강세, 이전 강세 값입니다. 그 후 우리는 거래 시스템이 현재 최고 값이 이전 값보다 높은 지 결정하고 동시에 현재 불스 파워의 값이 이전 값보다 높으면 거래 시스템이 다음과 같은 값을 차트에 코멘트로 각각 별도의 줄에 표시하여 신호를 반환해야 합니다:

              • 강력한 움직임
              • 현재 고점
              • 이전 고점
              • 현재 불스 파워 값
              • 이전 불스 파워 값

              다른 경우 현재 고점값이 이전 고점보다 높고 동시에 현재 불스 파워의 값이 이전 고점보다 낮은 경우, 거래 시스템이 다음 값과 각각의 값을 별도의 줄로 표시하여 차트에 코멘트로 신호를 반환해야 합니다:

              • 약세 다이버전스.
              • 현재 고점
              • 이전 고점
              • 현재 불스 파워 값
              • 이전 불스 파워 값

              다음은 이 전략에 기반한 트레이딩 시스템을 만드는 데 도움이 되는 간단한 형태의 청사진을 시각적으로 정리한 것입니다.

                 불스 파워 - 강세 또는 발산

              • 전략 3: 불스 파워 신호

              이 전략에 따르면 매 틱마다 네 가지 값을 확인하는 거래 시스템을 만들어야 하며 이 값은 현재 불스 파워, 제로 레벨, 현재 종가 및 현재 지수 이동 평균입니다. 그런 다음 현재 불스 파워가 제로 수준보다 낮은 지 결정해야 하며 동시에 현재 종가가 지수 이동 평균보다 낮은 경우 EA는 다음의 값들을 각각 별도의 줄로 차트에 코멘트로 신호를 반환해야 합니다:

              • 매도 신호
              • 현재 종가 값
              • 현재 EMA 값
              • 현재 불스 파워 값

              또한 현재 불스 파워가 0보다 크고 동시에 현재 종가가 지수 이동 평균보다 크면 거래 시스템은 다음의 값들을 코멘트로 신호를 반환해야 하며 각 값은 별도의 줄에 표시됩니다:

              • 매수 신호.
              • 현재 종가 값
              • 현재 EMA 값
              • 현재 불스 파워 값

              다음은 이 전략에 기반한 트레이딩 시스템을 만들기 위해 아이디어를 정리한 간단한 단계별 청사진입니다.

               불스 파워 시그널 청사진

              불스 파워 거래 시스템

              이번 주제에서는 각 전략에 대한 거래 시스템을 만드는 방법을 배웁니다. 그러나 먼저 모든 전략의 기반으로 사용할 수 있도록 차트에 현재 불스 파워의 값으로 코멘트를 자동으로 생성하는 데 사용되는 간단한 거래 시스템을 만들 것입니다.

              다음은 이 거래 시스템을 만드는 코드입니다:

              1단계: 더블 함수를 사용하여 "bullpower"에 대한 배열을 만들 것입니다:

              double bullpowerArray[];

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

              ArraySetAsSeries(bullpowerArray,true);

              3단계: "bullpowerDef"에 대한 정수 변수를 생성하고, "iBullsPower" 함수를 사용하여 지표의 핸들을 반환하는 방식으로 불스 파워 지표를 정의하겠습니다. 매개변수는 다음과 같습니다:

              symbol: 현재 심볼에 적용할 (_Symbol)을 사용합니다.

              period: 현재 기간 또는 차트 주기를 적용하기 위해 (_Period)를 사용합니다.

              ma_period: 사용 가능한 이동 평균의 기간으로 13을 사용합니다.

              int bullpowerDef = iBullsPower(_Symbol,_Period,13);

              4단계: "CopyBuffer" 함수를 사용하여 불스 파워 지표에서 데이터를 가져와 생성된 배열을 채우겠습니다. 이 함수의 매개 변수는 다음과 같습니다:

              indicator_handle: 인디케이터 핸들의 경우 (bullpowerDef)를 사용합니다.     

              buffer_num: 인디케이터 버퍼 번호로 (0)을 사용합니다.

              start_pos: 시작 위치는 (0)을 사용합니다.         

              count: 복사할 양이며 (3)을 사용합니다.                

              buffer[]: 복사할 대상 배열로 (bullpowerArray)를 사용할 것입니다.

              CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

              5단계: 더블 타입 값을 반환하는 "NormalizeDouble" 함수를 사용하여 변수를 생성한 후 "bullpowerVal"을 얻습니다. 이 함수의 매개 변수는 다음과 같습니다:

              value: 정규화된 숫자로 (bullpowerArray[0]을 사용합니다.

              digits: 소수점 이하 자릿수로 (6)을 사용합니다.

              double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

              Step six: 코멘드 함수를 사용하여 차트에 현재 불스 파워 값에 대한 주석을 생성합니다:

              Comment("Bull's Power Value is ",bullpowerVal);

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

              //+------------------------------------------------------------------+
              //|                                          Simple Bull's Power.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 bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 Comment("Bull's Power Value is ",bullpowerVal);
              
                }
              //+------------------------------------------------------------------+
              

              그런 다음 이 코드를 컴파일하여 내비게이터 창에서 찾을 수 있는 이 코드로 만들어진 EA를 확인합니다:

               불스 파워 내비게이션

              이것을 두 번 클릭하여 MetaTrader 5 터미널에서 실행하면 다음과 같은 창이 표시됩니다:

              심플 불스 파워 승리

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

               심플 불스 파워 첨부

              이전 차트에서 오른쪽 상단 모서리에 EA가 이미 차트에 첨부되어 있는 것을 볼 수 있습니다. 이제 우리는 다음 테스트 예제와 같이 차트에 업데이트된 현재 불스 파워 값이 포함된 자동 코멘트를 받을 준비를 갖추게 됩니다. 

               단순 상승세 신호

              이전 차트에서 볼 수 있듯이 왼쪽 상단 모서리에 현재 불스 파워 값 코멘트가 있습니다.

              • 전략 1: 불스 파워 움직임

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

              //+------------------------------------------------------------------+
              //|                                         Bulls Power Movement.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              이 코드의 차이점은 다음과 같습니다:

              현재 불스 파워의 값 "bullpowerVal"과 이전 불스 파워의 값 "bullpowerPrevVal"을 정의합니다:

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              

              전략의 조건:

              상승 하는 경우:

                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              하락 하는 경우:

                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              컴파일이 끝나면 내비게이터 창에서 EA를 찾을 수 있습니다:

               불스 파워 내비게이션

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

               불스 파워 무브먼트 승리

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

               불스 파워 무브먼트 부착

              이전 차트의 오른쪽 상단 모서리에 있는 차트에서 볼 수 있듯이 EA가 이미 차트에 첨부되어 있으며 이제 우리는 다음과 같은 신호를 받을 준비가 되었습니다.

              현재 데이터상 상승하는 경우:

               불스 파워 움직임 - 상승 - 현재 데이터

              차트 위쪽의 이전 차트에서 볼 수 있듯이 상승 신호, 현재 불스 파워 값, 이전 불스 파워의 값이 생성되었습니다. 데이터 창에서 불스 파워의 현재 값을 찾을 수 있습니다.

              이전 데이터상 상승한 경우:

               불스 파워 움직임 - 상승 - 이전 데이터

              이전 차트에서 볼 수 있듯이 우리는 이전 불스 파워 값만을 알수 있습니다. 그러므로 데이터 창에서 차이만 찾을 수 있습니다.

              현재 데이터상 감소하는 경우:

              불스 파워 움직임 - 하락 - 현재 데이터

              차트 위쪽의 이전 차트에서 볼 수 있듯이 하락 신호, 현재 불스 파워의 값, 이전 불스 파워의 값을 생성했습니다. 데이터 창에서 불스 파워의 현재 값을 찾을 수 있습니다.

              이전 데이터상 감소한 경우:

               불스 파워 움직임 - 하락 - 이전 데이터

              이전 차트에서 볼 수 있듯이 우리는 데이터 창에서 불스 파워의 마지막 값을 찾을 수 있으므로 차이점만을 찾을 수 있습니다.

              • 전략 2: 불스 파워 - 강함 또는 발산

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

              //+------------------------------------------------------------------+
              //|                          Bull's Power - Strong or Divergence.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);
              
                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              이 코드의 차이점은 다음과 같습니다:

              두 개의 배열, bullpowerArray와 priceArray를 생성합니다:

                 double bullpowerArray[];
                 MqlRates priceArray[];
              

              이렇게 생성된 배열을 정렬하는 bullpowerArray의 경우 앞에서 배운 것과 같은 "ArraySetAsSeries" 함수를 사용할 것입니다. 가격 배열의 경우 "CopyRates" 함수를 사용하여 "MqlRates"의 과거 데이터를 가져옵니다. 그 매개 변수는 다음과 같습니다:

              • 심볼 이름: (_symbol)을 사용합니다.
              • 차트 주기: (_Period)를 사용합니다.
              • 시작 시간: (0)을 사용할 것입니다.
              • 중지 시간: (3)을 사용합니다.
              • rate array: (priceArray)를 사용합니다.
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              

              "NormalizeDouble" 함수를 사용하여 불스 파워와 고점의 현재 및 이전 값을 정의합니다.

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);
              

              전략의 조건:

              강한 움직임의 경우:

                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              약세 다이버전스의 경우:

                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

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

              불스 파워 Nav2

              이 EA를 더블클릭 해서 실행하면 다음과 같은 창이 나타납니다:

               불스 파워 - 스트롱 또는 다이버전스 승리

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

               불스 파워 - 강 또는 발산 부착

              오른쪽 상단에서 볼 수 있듯이 전문가가 연결되어 있고 다음과 같이 신호를 수신할 준비가 되었습니다.

              현재 데이터상 강한 움직임이 있는 경우:

              불스 파워 - 강세 또는 다이버전스 - 강세 - 현재 데이터

              차트에서 볼 수 있듯이 이 전략에 따라 따른 신호가 다음 과 같은 값의 코멘트로 추가되었습니다:

              • 강한 움직임
              • 현재 고점.
              • 이전 고점.
              • 현재 불스 파워 값
              • 이전 불스 파워 값 

              이전 데이터로 강한 경우:

               불스 파워 - 강세 또는 다이버전스 - 강세 - 이전 데이터

              이전 차트에서 볼 수 있듯이 차트에 동일한 값의 신호와 동일한 코멘트가 있지만 차이점은 이전 데이터 창이라는 점입니다.

              현재 데이터와 약세 다이버전스인 경우:

              불스 파워 - 강세 또는 다이버전스 - 약세 다이버전스 - 현재 데이터

              이전 차트에서 볼 수 있듯이 차트에 다음과 같은 값을 가진 코멘트가 있습니다:

              • 약세 다이버전스
              • 현재 고점.
              • 이전 고점.
              • 현재 불스 파워 값
              • 이전 불스 파워 값  

              이전 데이터와 약세 다이버전스가 발생한 경우:

               불스 파워 - 강세 또는 다이버전스 - 약세 다이버전스 - 이전 데이터

              이전 차트에서 볼 수 있듯이 차트에 동일한 값의 코멘트가 있지만 여기에서는 이전 데이터 창이 있습니다.

              • 전략 3: 불스 파워 신호

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

              //+------------------------------------------------------------------+
              //|                                         Bulls' Power signals.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 bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 ArraySetAsSeries(maArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 double emaVal = NormalizeDouble(maArray[0],6);
              
                 double currentClose=NormalizeDouble(priceArray[2].close,6);
              
                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              
                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              이 코드에서의 차이점:

              세 개의 배열, bullpowerArray, maArray, priceArray를 생성합니다.

                 double bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];
              

              이렇게 생성된 세 개의 배열을 정렬합니다.

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

              "bullpowerDef"에 대한 정수 변수를 생성한 후 앞서 설명한 것과 동일하게 "iBullsPower"를 사용하여 상승세 지표를 정의하고 "maDef"에 대한 정수 변수를 생성한 후 이동 평균 지표의 핸들을 반환하는 "iMA" 함수를 사용하여 이동 평균 지표를 정의할 것입니다.

                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
              

              "CopyBuffer" 함수를 사용하여 배열을 채우고 불스 파워와 이동 평균 지표에서 데이터를 가져옵니다.

                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);
              

              현재 불스 파워, 지수 이동 평균, 현재 종가를 정의합니다.

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double emaVal = NormalizeDouble(maArray[0],6);
                 double currentClose=NormalizeDouble(priceArray[2].close,6);
              

              이 전략의 조건:

              매도 신호의 경우

                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              

              매수 신호의 경우:

                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              

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

               불스 파워 Nav3

              차트에서 실행할 EA를 더블 클릭하면 다음과 같은 창이 나타납니다:

               불스 파워 시그널스 승리

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

              불스 파워 시그널 부착

              오른쪽 상단의 차트에 불스 파워 신호를 주는 EA가 첨부되어 있는 것을 볼 수 있습니다. 그러면 다음과 같이 이 트레이딩 전략에 따라 신호를 받을 준비가 된 것입니다:

              매도 신호의 경우:

               불스 파워 시그널 - 판매

              차트에서 볼 수 있듯이 다음과 같은 값의 코멘트가 있는 것을 볼 수 있습니다:

              • 매도 신호
              • 현재 종가 값
              • 현재 EMA 값
              • 불스 파워 값

              매수 신호인 경우:

               불스 파워 시그널 - 구매

              차트에서 볼 수 있듯이 원하는 신호는 다음과 같은 값으로 차트에 코멘트로 표시됩니다:

              • 매수 신호
              • 현재 종가 값
              • 현재 EMA 값
              • 불스 파워 값

              이와 같이 앞서 언급된 각 전략에 대해 자동으로 신호를 생성하는 트레이딩 시스템을 만들었습니다.

              결론

              이상 이 지표에 대해 알아보았습니다. 불스 파워 정의라는 주제를 통해 불스 파워 지표가 무엇인지, 무엇을 측정하는지, 어떻게 계산할 수 있는지, 어떻게 해석해야 하는지 등 MetaTrader 5에 내장된 불스 파워 지표를 삽입하고 사용하는 방법에 대해 자세히 알아보았습니다. 그 후 우리는 언급된 몇 가지 간단한 전략을 통해 지표의 기본 개념을 기반으로 이 지표를 사용하는 방법을 배웠습니다. 이러한 전략의 기본 목표는 이 지표를 사용하는 방법을 배우는 것이었습니다. 여러분은 이 지표를 실제 계정에서 사용하기 전에 테스트하여 자신의 거래 스타일에 적합한 지 확인하고 수익을 창출에 사용해야 합니다. 전략은 다음과 같습니다:

              • 불스 파워 이동: 이 전략은 불스 파워 지표가 상승 또는 하락할 때 지표의 방향을 결정하는 데 사용할 수 있습니다.
              • 강세 또는 다이버전스: 강한 움직임이 있는지 또는 약세 다이버전스가 있는지 판단하는 데 사용할 수 있습니다.
              • 불스 파워 신호: 매수 또는 매도 신호를 얻는 데 사용할 수 있습니다.

              그 후 우리는 언급된 모든 전략에 대한 단계별 청사진을 설계했습니다. 이 청사진은 우리가 트레이딩의 아이디어를 정리하고 거래 시스템을 원활하게 만들 수 있도록 도와주었습니다. 그런 다음 언급된 모든 전략에 대한 거래 시스템을 만들어 MQL5에서 코딩한 후 자동으로 신호를 받아 MetaTrader 5 거래 터미널에서 실행하는 방법을 배웠습니다. 원하신다면 코드를 직접 작성해 보시고 코딩 실력을 향상시켜 프로그래머로서의 학습 능력을 향상시킬 수 있기를 바랍니다.

              이 글이 여러분의 트레이딩 실력을 향상하고 트레이딩 결과를 개선하는 데 도움이 되길 바랍니다. 가장 인기있는 기술 지표를 기반으로 거래 시스템을 설계하고 배우는 방법에 대한 유사한 기사를 더 읽고 싶다면 이 기사에서 공유 한 많은 기술 지표와 이를 기반으로 한 거래 시스템을 설계해 보고 기본 개념을 기반으로 간단한 전략을 만들어 보는 이 시리즈의 다른 기사를 읽어 보시기 바랍니다.

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

              VIDYA으로 트레이딩 시스템 설계하는 방법 알아보기 VIDYA으로 트레이딩 시스템 설계하는 방법 알아보기
              가장 인기 있는 보조지표로 트레이딩 시스템을 설계하는 방법을 알아보는 이 시리즈의 새로운 글에 오신 것을 환영합니다. 이번 글에서는 새로운 보조지표 도구에 대해 알아보고 가변 지수 동적 평균(VIDYA)으로 트레이딩 시스템을 설계하는 방법을 배워보겠습니다.
              Expert Advisor 개발 기초부터(21부): 새로운 주문 시스템(IV) Expert Advisor 개발 기초부터(21부): 새로운 주문 시스템(IV)
              이제 비록 완성되지는 않았지만 시각적 시스템이 작동하기 시작합니다. 여기서 이제 우리는 주요 변경 사항을 다 적용할 것입니다. 꽤 많은 항목이 있지만 모두 필요한 항목입니다. 아마도 전체 작업이 꽤 흥미로울 것입니다.
              모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO) 모집단 최적화 알고리즘: 회색 늑대 옵티마이저(GWO)
              이번에는 최신의 최적화 알고리즘 중 하나인 그레이 울프 최적화에 대해 알아봅시다. 테스트 함수에서의 오리지널 행동은 이 알고리즘을 앞서 고려한 알고리즘 중 가장 흥미로운 알고리즘 중 하나로 만듭니다. 이 알고리즘은 신경망 훈련, 많은 변수가 있는 부드러운 함수의 훈련에 사용되는 최고의 알고리즘 중 하나입니다.
              Expert Advisor 개발 기초부터(20부): 새로운 주문 시스템 (III) Expert Advisor 개발 기초부터(20부): 새로운 주문 시스템 (III)
              새로운 주문 시스템을 계속 만들어 보겠습니다. 이러한 시스템을 만들려면 MetaTrader 5 플랫폼이 실제로 어떻게 작동하고 어떤 자원을 제공하는지 이해해야 할 뿐만 아니라 MQL5를 잘 다룰 수 있어야 합니다.