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

빌 윌리엄스의 MFI로 트레이딩 시스템을 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 2 10월 2024, 07:55
29 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이 글은 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법과 관련한 시리즈의 새로운 글입니다. 이 글에서는 트레이딩에 유용하게 사용할 수 있는 새로운 기술 도구, 특히 다른 기술 도구와 함께 사용하면 더 나은 인사이트를 얻을 수 있는 새로운 기술 도구를 소개합니다. 우리는 빌 윌리엄스의 시장 촉진 지수(BW MFI)에 대해 알아볼 것입니다. 이 지표는 다음 주제를 통해 다루어 질 예정입니다:

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

이 글의 전략을 테스트하기 위해 MetaTrader 5 거래 플랫폼을 사용하며 이 글의 거래 시스템 구축에도 MQL5(MetaQuotes 언어) IDE를 사용할 것입니다. 다운로드 및 사용 방법을 모르는 경우 이전 글에서 MetaEditor MQL5 코드 작성하기 를 읽고 자세한 내용을 확인할 수 있습니다.

이 글에서 언급된 모든 전략은 교육 목적으로만 사용되며 실제 계정에서 사용하기 전에 반드시 테스트해야 합니다. 확실히 최적화가 필요합니다. 모든 사람에게 적합한 전략은 없으므로 일부 전략은 트레이딩 스타일에 전혀 맞지 않을 수도 있습니다. 또한 코더로서 습득한 내용을 직접 적용해 보는 것은 프로그래밍 기술을 향상시키는 데 도움이 되므로 매우 유용할 것입니다.

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


BW MFI 정의

이 주제에서는 시장 활성화 지수(MFI) 지표에 대해 자세히 알아보겠습니다. 이는 유명한 트레이더이자 작가인 빌 윌리엄스가 개발한 기술 지표 중 하나입니다. 이 지표는 가격과 거래량을 함께 연구하고 분석하여 시장의 방향을 측정하는 것을 목표로 합니다. 이는 트레이더로서 시장의 미래의 움직임을 감지하는 데 도움이 될 수 있으며 현재 가격의 움직임의 강도에 대한 통찰력(지속될지 또는 반전될지)을 제공할 수 있기 때문입니다. 이는 시장에서 가장 강력한 상대와 거래하고 올바른 결정을 내리는 데 도움이 되므로 매우 유용할 수 있습니다.

우리는 시장을 파악하기 위해 MFI와 거래량을 분석할 수 있습니다. 다음과 같은 경우가 있다고 가정합니다:

  • BW MFI와 거래량이 증가하면 시장 참여자들이 이 금융상품에 관심을 갖고 있다는 뜻입니다.
  • BW MFI와 거래량이 감소하면 시장 참여들이 이 금융 상품에 관심이 없다는 것을 나타냅니다.
  • BW MFI는 증가하지만 거래량이 감소하면 현재 움직임이 거래량에 의해 지지되지 않는 것으로 표시됩니다.
  • BW MFI는 감소하지만 거래량이 증가하면 시장에서 매수자와 매도자 간의 균형이 유지되고 있음을 나타냅니다.

이제 BW MFI를 수동으로 계산하는 방법을 살펴보겠습니다. 요즘은 MetaTrader 5에 내장된 인디케이터를 사용하면 되므로 굳이 그럴 필요가 없습니다. 우리는 기본 아이디어와 개념만 이해하면 됩니다. BW MFI를 계산하려면 고가와 저가를 뺀 후 그 결과를 거래량으로 나누어야 합니다.

BW MFI = (고점 - 저점) / 거래량

여기서:

높음 => 최고 가격
낮음 => 최저 가격
볼륨 => 현재 볼륨

하지만 위에서 언급했듯이 실제로는 수동으로 계산할 필요가 없으며 우리는 MetaTrader 5에서 사용 가능한 보조지표 중에서 선택하기만 하면 됩니다. 아래에서 그 방법을 설명합니다.

MetaTrader 5 터미널을 열고 삽입 메뉴 -> 보조지표 -> 빌 윌리엄스 -> 시장 활성화 지수(Market Facilitation Index)를 선택합니다. 다음 그림과 같습니다:

BW MFI 삽입

그러면 다음과 같이 지표의 매개변수 창이 나타납니다:

BW MFI 윈

1 - MFI와 볼륨이 증가하는 경우를 나타내는 색상입니다.

2 - MFI와 볼륨이 감소하는 경우를 나타내는 색상입니다.

3 - MFI가 증가하고 볼륨이 감소하는 경우를 나타내는 색상입니다.

4 - MFI가 감소하고 볼륨이 증가하는 경우를 나타내는 색상입니다.

5 - 볼륨 유형(틱 또는 실제)입니다.

6 - 지표의 바의 두께입니다.

위의 매개변수를 결정하고 확인을 누르면 다음 예시와 같이 차트에 지표가 첨부된 것을 확인할 수 있습니다:

BW MFI 부착

이전 그림과 같이 차트의 하위 창에 지표가 표시됩니다. 지표는 BW MFI 지표의 계산에 따른 가격과 거래량에 따라 다른 값과 색상의 바로 표시됩니다. 인디케이터의 모든 색상과 값은 가격 변동의 특정 상태를 나타냅니다.

  • 녹색 바: 시장 참여자가 이 상품에 관심이 있음을 나타내는 BW MFI와 거래량의 증가를 의미합니다.
  • 새들 브라운 바: BW MFI와 거래량이 감소하는 것을 나타내며 이는 해당 상품에 관심 있는 사람이 없음을 의미합니다.
  • 파란색 바: BW MFI가 증가하고 거래량이 감소하면 시장 움직임이 거래량으로 뒷받침되지 않다는 것을 나타냅니다.
  • 분홍색 바: BW MFI가 감소하고 거래량이 증가하면 강세와 약세 사이의 균형이 유지되고 있음을 의미합니다.

BW MFI 전략

이 주제에서는 교육 목적으로 BW MFI 지표를 주요 트레이딩 아이디어를 기반으로 사용할 수 있는 몇 가지 간단한 전략을 공유합니다. 더 나은 결과를 얻으려면 최적화, 일부 매개변수의 수정 또는 다른 기술 지표와의 조합이 필요하다는 점을 잊지 마세요. 따라서 실제 계좌에서 사용하기 전에 테스트하여 수익성이 있고 거래에 유용한지 확인하는 것이 매우 중요합니다.

전략 1: BW MFI - 이동 상태

이 전략에 따라 우리는 BW MFI 값과 거래량 값의 순서에 따라 BW MFI 지표의 움직임 상태를 파악해야 합니다. 여기에는 네 가지 상태가 있습니다:

  • 현재 BW MFI가 이전보다 크고 현재 거래량이 이전보다 큰 경우. 따라서 바는 녹색이며 녹색 상태의 신호가 됩니다.
  • 현재 BW MFI가 이전보다 적고 현재 거래량이 이전보다 적은 경우. 따라서 바는 갈색이며 페이드 상태의 신호가 됩니다.
  • 현재 BW MFI가 이전보다 크고 현재 거래량이 이전보다 적은 경우. 따라서 바는 파란색이며 페이크 상태의 신호가 됩니다.
  • 현재 BW MFI가 이전보다 작고 현재 거래량이 이전보다 큰 경우. 따라서 바가 분홍색이면 도약 전 상태의 신호가 됩니다.

간단히 하면,

  • 현재 BW MFI > 이전. BW MFI 및 현재 볼륨 > 이전 볼륨 ==> 녹색 상태 - 녹색 바
  • 현재 BW MFI < 이전. BW MFI 및 현재 볼륨 <이전 볼륨 ==> fade- 갈색 바
  • 현재 BW MFI > 이전. BW MFI 및 현재 볼륨 <이전 볼륨 ==> 가짜 상태 - 파란색 바
  • 현재 BW MFI < 이전. BW MFI 및 현재 볼륨 > 이전 볼륨 ==> squat 분홍색 바

전략 2: BW MFI 신호

우리는 이 전략에 따라 BW MFI 지표의 상태를 기반으로 신호를 얻어야 합니다. 먼저 이전 전략을 통해 파악한 것처럼 시장 현황을 파악해야 합니다. 그런 다음 이를 바탕으로 결정을 내릴 것입니다. 이 전략에 따르면 우리에게는 네 가지 신호가 있습니다:

  • 상태가 녹색이면 좋은 진입을 찾았다는 신호입니다.
  • 상태가 fade가 되면 좋은 청산 시점을 찾으라는 신호가 됩니다.
  • 상태가 가짜라면 브레이크아웃 확률이 잘못되었다는 신호가 됩니다.
  • 상태가 squat 상태라면 시장이 균형 잡혔다는 신호입니다.

전략 3: MA가 있는 BW MFI

우리는 이 전략을 기반으로 이동평균이라는 또 다른 기술적 지표를 사용해 매수 또는 매도 신호를 얻을 것입니다. 상태가 녹색이고 종가가 이동평균보다 높으면 매수 신호입니다. 다른 시나리오에서는 상태가 녹색이고 종가가 이동 평균보다 낮으면 매도 신호가 됩니다. 기술적 분석의 특징인 다른 기술적 도구를 결합하여 우리는 더 많은 인사이트를 얻고 다양한 관점을 볼 수 있습니다. 또한 지지와 저항, MACD, 이동 평균 또는 생성된 신호를 필터링하는 데 유용한 기타 유용한 기술 도구들을 함께 사용하여 더 많은 인사이트를 얻을 수 있습니다.

간단히 하면,

  • 녹색 상태 및 종가 > MA ==> 매수 신호
  • 녹색 상태 및 종가 < MA ==> 매도 신호

BW MFI 전략 청사진

이 부분에서는 살펴본 각 전략에 대한 단계별 청사진을 설계하는 단계를 살펴볼 것입니다. 청사진은 컴퓨터에게 우리가 지시해야 할 사항을 시각화 하여 트레이딩 시스템을 만드는 데 도움을 줍니다. 따라서 이 단계를 향후 전략을 위한 계획의 단계로 간주할 수 있습니다.

 전략 1: BW MFI - 이동 상태

이 전략에 따르면 우리는 매 틱마다 네 가지 값을 비교하고 각각의 위치를 결정함으로써 지표의 특성에 따라 결정되는 지표 바의 색상을 기반으로 BW MFI 지표의 움직임에 대한 신호를 얻을 수 있는 거래 시스템을 만들어야 합니다. 이 네 가지 값은 현재 BW MFI, 이전 BW MFI, 현재 거래량, 이전 거래량입니다. 이를 확인하고 각 값의 위치를 결정하려면 프로그램이 필요합니다. BW MFI의 현재 값이 이전 값보다 크고 동시에 현재 거래량이 이전보다 많을 때 거래 시스템은 차트에 "Green State - Green Bar"로 코멘트를 반환해야 하며 이것이 첫 번째 경우입니다. 두 번째는 거래 시스템이 "Fade Statue - Brown Bar"로 차트에 코멘트를 반환하는 경우인데 이는 현재 BW MFI가 이전보다 작고 동시에 현재 볼륨의 값이 이전보다 낮은 경우입니다. 세 번째 경우는 현재 BW MFI 값이 이전 값보다 크고 동시에 현재 거래량 값이 이전 값보다 낮은 경우로 이 경우 시스템은 차트에 "Fake State - Blue Bar"로 코멘트를 반환해야 합니다. 네 번째이자 마지막 경우는 현재 BW MFI 값이 이전보다 낮고 동시에 현재 거래량 값이 이전보다 큰 경우로 이경우 차트에 "Squat State - Pink Bar"로 코멘트를 반환해야 합니다.

다음 그래프는 이동 상태 전략 청사진에 대한 그래프입니다:

이동 상태 청사진

전략 2: BW MFI 신호

우리는 이 전략에 따라 지표 바를 기준으로 모든 상태를 식별한 후 이 BW MFI 지표의 상태를 기반으로 적절한 신호로 차트에 코멘트를 반환하는 데 사용할 수 있는 트레이딩 시스템을 만들어야 합니다. 이를 위해서는 모든 틱에 대해 네 가지 상태를 확인하고 이를 기반으로 적절한 신호를 반환할 수 있는 트레이딩 시스템을 만들어야 합니다. BW MFI의 상태가 거래 시스템에서 식별되는 녹색 상태인 경우 차트에 "Find a good entry"이라는 코멘트가 나타나야 합니다 두 번째 상태는 지표의 상태를 확인하고 fade 상태인 것을 발견하면 트레이딩 시스템에서 "Find a good exit"라는 코멘트를 차트에 반환해야 합니다. 세 번째 시나리오 또는 상태는 BW MFI의 상태를 확인한 결과 가짜 상태인 경우 트레이딩 시스템은 차트에 "False breakout probability" 코멘트로 신호를 반환해야 합니다. 마지막 상태는 squat 상태임을 확인한 후 차트에 "Market is Balanced"라는 코멘트를 신호로 달아야 하는 경우입니다.

다음 그래프는 시그널 전략 청사진입니다:

BW MFI 신호 청사진

전략 3: MA가 있는 BW MFI

이 전략에 따르면 우리는 BW MFI 표와 이동 균을 기반으로 매수 또는 매도 신호를 반환할 수 있는 트레이딩 시스템을 만들어야 합니다. 거래 시스템은 매 틱마다 종가, 현재 단순이동평균, 현재 BW MFI 지표의 4가지 상태를 지속적으로 확인해야 합니다. 종가가 단순이동평균의 현재 값보다 크고 동시에 현재 BW MFI 상태가 녹색인 것을 발견하면 거래 시스템은 차트에 코멘트로 매수 신호를 반환해야 합니다. 종가가 현재 단순이동평균보다 낮고 동시에 현재 BW MFI 상태가 녹색인 경우 거래 시스템은 매도 신호를 차트에 코멘트로 반환해야 합니다. 거래 시스템에서 아무것도 반환하지 않게 하려면 우리는 다른 것이 필요합니다.

다음 그래프는 MA 전략 청사진이 포함된 BW MFI에 대한 그래프입니다:

MA 청사진이 있는 BW MFI

BW MFI 거래 시스템

이제 살펴본 각각의 전략을 수행하는 트레이딩 시스템 구축을 시작하겠습니다. 우리는 른 전략의 기초로 사용하기 위해 차트에 BW MFI 현재 수치를 멘트를 반환하는 간단한 거래 시스템을 만들것 입니다. 이를 위한 단계는 다음과 같습니다:

실수 타입 중 하나인 더블 함수를 사용하여 분수 값을 반환하는 BWMFIArray의 배열을 만듭니다.

double BWMFIArray[];

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

  • array[]: 생성된 배열이 BMWFIArray인지 확인합니다.
  • flag: 배열 인덱싱 방향을 참으로 설정합니다.
ArraySetAsSeries(BWMFIArray,true);

BWMFIDef에 대한 정수 변수를 만들고 "iBWMFI" 함수를 사용하여 빌 윌리엄스 시장 활성화 지수를 정의합니다. 지표 핸들 과 매개 변수를 반환합니다:

  • symbol: 원하는 심볼을 결정하기 위해 현재 심볼에 적용될 (_symbol)을 사용합니다.
  • period: 기간을 결정하기 위해 현재 기간에 적용될(_PERIOD)을 사용합니다.
  • applied_volume: 볼륨 유형을 결정하기 위해 (VOLUME_TICK)을 사용합니다.
int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);

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

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

BWMFIVal에 대한 더블 변수를 만든 후 BWMFI의 현재 값을 가져옵니다. 그런 다음 반올림을 위해 (NormalizeDouble) 함수를 사용합니다.

  • value: 현재 값으로 BWMFIArray[0]을 사용하겠습니다.
  • digits: 소수점 뒤의 자리수는 (5)를 사용합니다.
double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);

(Comment) 함수를 사용하여 현재 BW MFI 값의 값을 표시합니다.

Comment("BW MFI Value = ",BWMFIVal);

다음은 이 거래 시스템의 한 블록에 포함된 전체 코드입니다:

//+------------------------------------------------------------------+
//|                             Simple Market Facilitation Index.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   ArraySetAsSeries(BWMFIArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   Comment("BW MFI Value = ",BWMFIVal);
  }
//+------------------------------------------------------------------+

이전 코드 줄을 오류 없이 컴파일하면 MetaTrader 5 트레이딩 터미널의 EA 폴더 아래 내비게이터 창에서 다음과 같이 이 EA를 찾을 수 있습니다:

BW MFI 탐색

단순 시장 활성화 지수 EA를 원하는 차트에 끌어다 놓으면 다음과 같이 이 EA의 창을 찾을 수 있습니다:

BW MFI 윈

알고리즘 거래 허용 옆에 체크 표시를 하고 확인을 누르면 아래와 같이 EA가 첨부된 것을 확인할 수 있습니다:

단순 BW MFI 부착

이제 테스트를 하면 다음 예제와 같은 신호를 받을 수 있습니다:

간단한 BW MFI 신호

이전 차트에서 볼 수 있듯이 이 트레이딩 전략에 기반한 신호가 왼쪽 상단에 현재 BW MFI 값과 함께 코멘트로 표시됩니다.

전략 1: BW MFI - 이동 상태

이러한 유형의 거래 시스템을 만들 수 있는 전체 코드는 다음과 같습니다:

//+------------------------------------------------------------------+
//|                                     BW MFI - Movement Status.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   if(BWMFIVal>BWMFIVal1&&volVal>volVal1)
     {
      Comment("Green State - Green Bar");
     }
   if(BWMFIVal<BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fade State - Brown Bar");
     }
   if(BWMFIVal>BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fake State - Blue Bar");
     }
   if(BWMFIVal<BWMFIVal1&&volVal>volVal1)
     {
      Comment("Squat State - Pink Bar");
     }
  }
//+------------------------------------------------------------------+

이 코드에서의 차이점:

(BWMFIArray) 및 (volArray)의 두 배열을 생성하고 "ArraySetAsSeries" 함수를 사용하여 이 배열의 데이터를 정렬합니다.

   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
BWMFIDef 및 volDef에 대한 정수 변수 생성. 빌 윌리엄스 시장 활성화 지수는 "iBWMFI" 함수를 사용하여 정의하고 거래량은 "iVolumes" 함수를 사용하여 정의합니다. 지표를 반환하기 위해 매개 변수는 두 가지 모두 동일하게 처리합니다:
  • symbol: 원하는 심볼을 결정하기 위해 현재 심볼에 적용될 (_symbol)을 사용합니다.
  • period: 기간을 결정하기 위해 현재 기간에 적용될(_PERIOD)을 사용합니다.
  • applied_volume: 볼륨 유형을 결정하기 위해 (VOLUME_TICK)을 사용합니다.
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

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

CopyBuffer(volDef,0,0,3,volArray);

BWMFI 및 볼륨의 현재 및 이전 값을 정의합니다:

   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);

전략의 조건:

녹색 바의 경우,

   if(BWMFIVal>BWMFIVal1&&volVal>volVal1)
     {
      Comment("Green State - Green Bar");
     }

갈색 바의 경우,

   if(BWMFIVal<BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fade State - Brown Bar");
     }

파란색 바의 경우,

   if(BWMFIVal>BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fake State - Blue Bar");
     }

분홍색 바의 경우,

   if(BWMFIVal<BWMFIVal1&&volVal>volVal1)
     {
      Comment("Squat State - Pink Bar");
     }

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

이동 상태 첨부

이전 그림의 오른쪽 상단 모서리에 EA가 첨부되어 있는 것을 볼 수 있습니다. 다음 테스트 예시와 동일하게 우리는 이제 이 트레이딩 시스템의 신호를 수신할 준비가 되었습니다:

녹색 상태 신호의 경우

이동 상태 - 녹색 신호

 

이전 그림에서 볼 수 있듯이 왼쪽 상단 모서리에 녹색 상태의 신호가 있습니다.

페이드 상태의 경우:

이동 상태 - 페이드 신호

이 전략을 기반으로 한 페이드 신호가 왼쪽 상단에 코멘트로 표시됩니다.

가짜 상태의 경우:

이동 상태 - 가짜 신호

이전 예제에서 이 거래 시스템을 기반으로 가짜 상태의 신호를 받은 것과 같습니다.

스쿼트 상태의 경우:

이동 상태 - 스쿼트 신호

이 트레이딩 전략에 따라 차트 왼쪽 상단에 스쿼트 상태의 신호가 코멘트로 표시됩니다. 

전략 2: BW MFI 신호

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

//+------------------------------------------------------------------+
//|                                               BW MFI Signals.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;
   
   if(greenState)
     {
      Comment("Find a good entry");
     }
   if(fadeState)
     {
      Comment("Find a good exit");
     }
   if(fakeState)
     {
      Comment("False breakout Probability");
     }
   if(squatState)
     {
      Comment("Market is Balanced");
     }
  }
//+------------------------------------------------------------------+

이 코드의 차이점:

녹색, 페이드, 페이크, 스쿼트의 네 가지 상태에 대한 부울 변수를 모든 상태의 특정 조건에 맞게 선언합니다,

   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;

전략의 조건:

녹색 상태의 경우

   if(greenState)
     {
      Comment("Find a good entry");
     }

페이드 상태의 경우

   if(fadeState)
     {
      Comment("Find a good exit");
     }

가짜 상태의 경우

   if(fakeState)
     {
      Comment("False breakout Probability");
     }

스쿼트 상태의 경우

   if(squatState)
     {
      Comment("Market is Balanced");
     }

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

BW MFI 신호 첨부

오른쪽 상단의 차트에 BW MFI EA가 첨부되어 있는 것을 볼 수 있습니다. 이제 우리는 이 트레이딩 시스템을 기반으로 다음과 같은 신호를 받을 수 있습니다:

좋은 진입 신호를 찾는 경우:

좋은 진입 신호 찾기

차트 왼쪽 상단 모서리에 코멘트로 좋은 항목을 찾았다는 신호를 표시합니다.

좋은 청산 신호를 찾는 경우:

좋은 청산 신호 찾기

차트 왼쪽 상단에 좋은 청산을 찾았다는 신호가 코멘트로 표시되도록 할 수 있습니다.

잘못된 돌파 확률 신호의 경우:

BW MFI 신호 - 잘못된 브레이크아웃 신호

차트 왼쪽 상단에 잘못된 돌파 확률에 대한 시그널을 코멘트로 표시할 수 있습니다.

시장이 균형 신호인 경우:

BW MFI 신호 - 균형 신호

차트 왼쪽 상단에 코멘트로 시장의 균형이 잡혔다는 신호를 표시할 수 있습니다.

전략 3: MA가 있는 BW MFI:

다음은 BW MFI와 이동평균을 결합하는 전략을 기반으로 한 이 트레이딩 시스템의 전체 코드입니다.

//+------------------------------------------------------------------+
//|                                               BW MFI with MA.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   double maArray[];
   MqlRates pArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   ArraySetAsSeries(maArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   int maDef=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);
   int data=CopyRates(_Symbol,_Period,0,10,pArray);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   CopyBuffer(maDef,0,0,3,maArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   double maVal=NormalizeDouble(maArray[0],5);
   double closingPrice=pArray[0].close;
   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;
   if(closingPrice>maVal&&greenState)
     {
      Comment("Buy Signal");
     }
   else
      if(closingPrice<maVal&&greenState)
        {
         Comment("Sell signal");
        }
      else
         Comment("");
  }
//+------------------------------------------------------------------+

이 코드에서의 차이점:

이중 함수를 사용하여 maArray에 대해 두 개의 배열을 더 만들고 MqlRates 함수를 사용하여 pArray에 대해 두 개의 배열을 더 만듭니다,

   double maArray[];
   MqlRates pArray[];

"ArraySetAsSeries" 함수를 사용하여 maArray의 데이터를 정렬합니다:

ArraySetAsSeries(maArray,true);

maDef에 대한 정수 변수를 만들고 "iMA" 함수를 사용하여 지표 핸들 및 해당 매개 변수를 반환하는 이동 평균을 정의합니다:

  • symbol: 심볼 이름을 결정합니다. 이를 통해 우리는 현재 차트에 적용할 (_SYMBOL)을 결정합니다.
  • period: 기간을 결정하기 위해 우리는 현재 기간에 적용될 (_PERIOD)를 사용하며 같은 목적으로 (PERIOD_CURRENT)를 사용할 수도 있습니다.
  • ma_period: 평균 기간을 결정하기 위해 (10)을 사용합니다.
  • ma_shift: 필요한 경우 이를 통해 수평 이동을 결정합니다. 우리는 MA를 이동할 필요가 없으므로 (0)으로 설정하겠습니다.
  • ma_method: 이동 평균 유형을 결정하기 위해 SMA(단순 이동 평균)를 설정합니다.
  • applied_price: 계산에서 사용된 가격의 유형을 결정하기 위해 종가를 사용합니다.
int maDef=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

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

  • symbol_name: 심볼명을 결정하기 위해 현재 심볼에 적용되도록 하기 위해 (_Symbol)을 사용합니다.
  • timeframe: 현재 차트 주기에 적용되도록 하기 위해 (_Period)을 사용합니다.
  • start_pos: 시작점 또는 위치의 결정과 관련하여 현재 위치에서 시작하게 하기 위해 (0)을 사용합니다.
  • count: 복사할 개수를 결정하기 위해 (10)을 사용합니다.
  • rates_array[]: 복사할 배열의 대상을 결정하기 위해 (pArray)를 사용합니다.
int data=CopyRates(_Symbol,_Period,0,10,pArray);

BWMFIArray, volArray 및 maArray의 "CopyBuffer" 함수를 사용하여 데이터를 정의하고 결과를 저장합니다.

   int data=CopyRates(_Symbol,_Period,0,10,pArray);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   CopyBuffer(maDef,0,0,3,maArray);

현재 BW MFI, 거래량, 단순이동평균, 종가의 값과 이전 BW MFI 및 거래량 값을 추가로 가져옵니다.

   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   double maVal=NormalizeDouble(maArray[0],5);
   double closingPrice=pArray[0].close;

녹색, 페이드, 가짜, 스쿼트 상태의 부울 변수를 생성합니다:

   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;

이 전략의 조건:

매수 신호의 경우

   if(closingPrice>maVal&&greenState)
     {
      Comment("Buy Signal");
     }

매도 신호의 경우

   else
      if(closingPrice<maVal&&greenState)
        {
         Comment("Sell signal");
        }

기타

      else
         Comment("");

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

 MA가 부착된 BW MFI

매수 신호의 경우

MA가 있는 BW MFI - 매수 신호

왼쪽 상단에서 볼 수 있듯이 차트에 코멘트로 매수 신호가 있습니다.

매도 신호의 경우

MA가 있는 BW MFI - 매도 신호

왼쪽 상단에서 볼 수 있듯이 차트에 코멘트로 매도 신호가 있습니다. 우리는 이 글의 앞부분에서 살펴본 전략을 기반으로 다양한 트레이딩 시스템을 만드는 방법을 배웠습니다.

결론

이제 여러분은 빌 윌리엄스가 개발한 시장 활성화 지수 기술 지표의 주요 개념을 이해하셨을 것입니다. 이제 수동으로 계산하는 방법과 MetaTrader 5 트레이딩 플랫폼에서 차트에 삽입하는 방법, 판독값을 해석하는 방법을 알 수 있으실 것입니다. 우리는 지표를 사용하는 방법도 배웠습니다. 이를 위해 주요 개념에 기반한 몇 가지 간단한 전략을 살펴봤습니다:

  • BW MFI - 이동 상태 전략: 지표의 바를 차트의 신호(녹색, 페이드, 가짜, 스쿼트 상태)로 사용하여 시장 상태를 파악하는 데 사용했습니다.
  • BW MFI 신호 전략: BW MFI 지표를 기반으로 적절한 결정(좋은 진입, 좋은 청산 찾기, 잘못된 돌파 확률, 시장 균형)을 통해 차트에서 신호를 얻는 데 사용했습니다.
  • MA 전략이 있는 BW MFI: BW MFI와 단순 이동평균 지표를 기반으로 매매 신호를 얻는 데 사용했습니다.

저는 여러분이 더 나은 결과를 얻고 시장의 전체적인 관점을 파악하기 위해서는 다른 추가적인 기술 도구를 사용해야 한다고 조언 드리고자 합니다. 또한 이 글의 주요 개념은 교육 목적으로만 정보를 공유하는 것이므로 여러분은 실제 거래에 사용하기 전에 스스로 테스트하여 유용하게 사용할 수 있는지 확인해야 합니다. 우리는 각 전략에 대한 단계별 청사진을 설계하여 MetaTrader 5에서 쉽게 사용할 수 있는 트레이딩 시스템을 만들 수 있도록 했습니다. 우리는 MQL5 언어를 사용하여 학습하고 만들었습니다.

이 글이 도움이 되셨기를 바라며 해당 주제 또는 관련 주제에 대해 더 많은 인사이트를 얻어 트레이딩을 개선할 수 있으시기를 바랍니다. 또한 이 글에서 배운 내용을 직접 코드로 작성하여 적용해 보셨기를 바랍니다. 이는 MQL5 프로그래밍 기술을 향상시키고 싶다면 모든 학습 과정에서 매우 중요한 단계입니다. 가장 인기 있는 보조지표를 기반으로 트레이딩 시스템을 만드는 방법에 대한 유사한 글을 더 읽고 싶으시면 이 시리즈의 다른 글도 읽어보시면 도움이 될 것입니다.

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

새로운 기능: MQL5의 커스텀 인디케이터 새로운 기능: MQL5의 커스텀 인디케이터
MetaTrader5와 MQL5의 새로운 기능 전체를 나열하지는 않겠습니다. 종류도 많은 데다가, 별도의 설명이 필요한 기능들도 있거든요. 객체 지향 프로그래밍을 이용한 코드 작성법 또한 다음에 알아보도록 하겠습니다. 다른 기능들과 함께 설명하기에는 조금 어려운 이야기일 수 있으니까요. 이 글에서는 인디케이터와 인디케이터의 구조, 드로잉 타입과 프로그래밍 디테일을 MQL4와 비교해 볼게요. 초보자 분들께 많은 도움이 되면 좋겠고 기존에 사용하시던 개발자 분들도 뭔가 새로운 걸 얻어 가실 수 있길 바랍니다.
게이토 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기 게이토 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기
인기 보조지표를 기반으로 트레이딩 시스템을 설계하는 방법을 알아보는 시리즈의 새로운 글, 게이터 오실레이터 보조지표와 간단한 전략을 통해 트레이딩 시스템을 만드는 방법
새 MetaTrader 와 MQL5를 소개해드립니다 새 MetaTrader 와 MQL5를 소개해드립니다
본 문서는 MetaTrader5의 간략 리뷰입니다. 짧은 시간 내에 시스템의 모든 세부 사항을 안내해드리기는 어렵습니다 - 테스트는 2009.09.09에 시작되었습니다. 이는 상징적인 일자로, 전 이것이 행운의 숫자가 될거라 믿어 의심치않습니다. 제가 새 MetaTrader 5 터미널과 MQL5 베타버전을 받은지 며칠이 지났습니다. 아직 모든 기능을 사용해본 것은 아니지만, 벌써부터 감명깊네요.
MQL5에서 라인을 다루는 방법 MQL5에서 라인을 다루는 방법
이 글에서는 추세선, 지지선, 저항선과 같은 가장 중요한 선을 MQL5로 다루는 방법을 알아보세요.