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

MFI로 거래 시스템을 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 20 1월 2023, 15:26
421 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이 기사에서 가장 인기 있는 기술 지표를 기반으로 MQL5 코딩을 배우는 데 도움이 되는 간단한 거래 시스템을 설계하는 방법에 대한 시리즈를 계속합니다. 이 새로운 기사에서는 MFI(Money Flow Index)라는 새로운 기술 지표를 살펴볼 것입니다. 우리는 이 지표에 대해 자세히 배우고 그 뒤에 있는 주요 개념을 기반으로 간단한 거래 시스템을 개발하는 방법을 알아볼 것입니다. 다음과 같은 주제를 통해 이 지표를 다루어 볼 것입니다.

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

시리즈의 다른 기사를 읽어보면 거래 및 MQL5 코딩과 관련한 새로운 개념을 배우기 위해 다뤄진 새로운 전략에 따라 지표에 대한 새로운 정보와 몇 가지 새로운 코드가 있는 동일한 주제들이 있다는 사실을 알 수 있을 것입니다. 우리는 MFI 지표가 무엇인지, 무엇을 측정하는지 그리고 그 이면의 개념을 알아보기 위해 수동으로 계산하는 방법을 배울 것입니다. 그런 다음 MFI 지표를 계산하는 예를 알아 볼 것입니다. 물론 이것들은 기본에 불과합니다. 기본 개념을 알아보고 간단한 전략에서 지표를 어떻게 사용하는지에 대해 더 배워야 합니다. 그런 다음 알아본 모든 전략에 대한 단계별 청사진을 설계하여 거래 시스템을 설계하는 데 도움이 되도록 할 것입니다. 가장 흥미로운 주제는 MetaTrader 5 거래 플랫폼에서 사용하기 위해 어떻게 우리가 MQL5로 이러한 전략을 수행하는 거래 시스템을 만드냐 하는 것입니다.

성공적인 거래 전략을 기반으로 자신만의 거래 시스템을 만들 수 있으려면 전체 코딩을 직접 하는 것이 좋습니다. 읽는 것만으로 다된 것이라 생각하지 말고 읽은 내용을 적용하고 코드 하나하나 직접 코딩해보세요. 함수와 프로그래밍과 관련한 개념을 검색해서 그에 대해 더 많이 이해하게 되면 점점 더 많이 알 수 있으므로 더 좋습니다. 성공적인 프로그래머의 가장 중요한 기술 중 하나는 효과적으로 검색하는 방법을 아는 것입니다. 연습은 말할 것도 없고 검색도 역시 학습과 개발 프로세스에서 매우 중요한 기술입니다.

또한 주요 목적이 교육적인 경우에는 전략을 사용하기 전에 테스트해야 합니다. 모든 사람에게 공통으로 맞는 전략은 없습니다. 따라서 나에게 유용한 것이 다른 사람에게는 유용하지 않을 수 있습니다.

이 기사를 통해 MetaQuotes Language(MQL5)를 사용하여 MetaTrader 5에 내장된 MetaEditor에서 전략 코드를 작성할 것입니다. 다운로드 방법과 MetaEditor 사용 방법을 알고 싶다면 이전 기사에서 메타에디터에서 MQL5 코드 작성하는 법이란 글을 읽어보세요.

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

이제 새로운 거래 도구를 배우기 위해 주제를 살펴보겠습니다.


MFI 정의

이번 섹션에서는 MFI(Money Flow Index) 지표에 대해 자세히 설명하고 볼륨 기반의 지표 중 하나인 이 지표의 개념에 대해 살펴보겠습니다. MFI 지표가 무엇인지 무엇을 측정하는지 배운 다음 예제를 분석하며 수동으로 계산하는 방법을 배웁니다.

이전 기사에서 이미 언급했듯이 볼륨은 거래에서 중요한 요소입니다. 시장에 영향을 주는 많은 것들이 있습니다. 이중 볼륨 분석을 통해 우리는 거래에서 우위를 점할 수 있습니다. 더 많은 것들을 이해할수록 더 나은 결정을 내릴 수 있습니다. 습득한 지식은 결정을 내리기 위한 방향으로 우리를 안내하는 이유를 더욱 강화하기 때문입니다.

대량 매수 및 매도가 발생하는 자산이 있는 경우 해당 자산은 볼륨이 적은 자산에 비해 더 중요합니다. 금융 시장에서 볼륨은 일정 기간 동안 거래된 주식 또는 계약의 수입니다. 가격이 상승 추세에서 저항을 돌파하거나 하락 추세에서 지지를 돌파할 때 높은 볼륨을 보게 되는 것이 좋습니다. 이것은 움직임의 강도를 나타내는 중요한 신호 중 하나이기 때문입니다. 볼륨이 상승추세에서는 상승, 조정시 하락, 하락시 하락, 조정시 상승하는 추세로 움직일 때 더 좋습니다. 추세와 함께 볼륨이 움직이는 것을 보게 된다면 이것은 현재 추세를 확인하는 중요한 신호 중 하나입니다.

MFI(Money Flow Index) 지표는 Gene Quong과 Avrum Soudack이 만들었습니다. 볼륨 기반의 지표이지만 매수 및 매도의 세기를 측정하기 위해 계산 시 가격과 볼륨을 사용합니다. MFI는 0과 100 사이에서 움직입니다. MFI 지표의 증가는 매수의 압력이 있다는 것을 의미하고 그 반대의 경우도 마찬가지입니다. MFI의 감소는 매도의 압력이 있음을 의미합니다. MFI는 추세의 방향을 확인하거나 반전에 대한 경고를 줄 수 있습니다. 추세에 대해 더 알고 싶다면 이전 기사에서 추세 정의란 주제에서 알아볼 수 있습니다.

MFI를 수동으로 계산하는 것은 여러 단계로 구성됩니다:

  • Typical price(TP) 계산 = (고가+저가+종가)/3
  • raw money flow 계산 = 볼륨 * TP
  • TP의 움직임 결정: 위 또는 아래. 현재 TP > 이전 TP = up, 현재 TP < 이전 TP = down.
  • 계산 1+MF = 상승 기간의 raw MF
  • 계산 1-MF = 하락 기간의 raw MF
  • 계산 14 +MF = 14의 합(1+MF)
  • 계산 14 -MF = 14의 합(1-MF)
  • 14 MF 비율 계산 = 14+MF / 14-MF
  • MFI 계산 = 100-100/(1+MF 비율)

어느 종목에 대해 다음과 같은 데이터가 있는 경우 이 계산을 적용하는 예를 살펴보겠습니다.

날짜 고가 저가 종가 볼륨
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

이전 데이터에서 MFI 지표를 계산해야 하는 경우 다음과 같은 단계를 수행합니다:

Typical price(TP) 계산 = (고가+저가+종가)/3

그리고 다음은 계산 후 TP를 얻기 위한 것입니다:

 MFI 계산2

raw money flow 계산 = 볼륨 * TP

MFI 계산3

TP의 움직임 결정: 위 또는 아래.

MFI 계산4

계산 1+MF = 상승 기간의 raw MF

계산 1-MF = 하락 기간의 raw MF

 MFI 계산5

계산 14+MF = 14의 합(1+MF)

계산 14-MF = 14의 합(1-MF)

MFI 계산6

14 MF 비율 계산 = 14+MF/14-MF

 MFI 계산7

MFI 계산 = 100-100/(1+MF 비율)

MFI 계산8

앞에서는 MFI 지표를 수동으로 계산했지만 요즘에는 그럴 필요가 없습니다. 이제 지표의 개념을 배웠으므로 MetaTrader 5에 내장된 지표를 사용할 수 있습니다. 여러분은 지표 중에서 볼륨을 선택하기만 하면 됩니다:

MetaTrader 5 --> 삽입 탭 클릭 --> 지표 --> 볼륨 --> Money Flow Index

MFI 인서트

MFI를 선택하면 지표의 매개변수가 나타납니다:

MFI 매개변수 창

1. 원하는 지표 기간.

2. 볼륨 타입(Tick 또는 Real).

3. MFI 라인 색상.

4. 라인 유형.

5. MFI 선 두께.

확인을 클릭하면 MFI 지표가 차트에 첨부됩니다.

 MFI 부착


MFI 전략

이 섹션에서는 MFI 지표가 무엇인지, 무엇을 측정하는지, 그 이면의 주요 개념을 확인한 후 MFI 지표를 어떻게 사용할 수 있는지에 대해 알아봅니다. 이제 사용할 수 있는 몇 가지 간단한 전략을 배웁니다.

  • 전략 1: MFI - OB 및 OS:

이 전략에 따라 과매수(OB) 및 과매도(OS) 영역을 식별합니다. MFI가 20레벨에 접근하면 OS이고, 80레벨에 접근하면 OB입니다. 과매도 지역은 상승 가능성을 높이고, 과매수 지역은 하락 가능성을 높입니다.

다음과 같이 정리 할 수 있습니다: 

MFI <= 20 --> OS

MFI >= 80 --> OB

  • 전략 2: MFI - 상승추세 - 매수:

이 전략에 따르면 매수 신호가 트리거 되는 것을 보기 위해 우리는 MFI가 레벨 50 이하가 될 때까지 기다릴 것입니다. 레벨 70에 접근하면 이익 실현 신호가 됩니다. 이 전략의 근거는 대부분의 경우 MFI가 상승 추세 동안 50에서 70 사이에서 움직인다는 것입니다.

요약하면,

MFI <= 50 --> 매수 신호

MFI >= 70 --> 이익 실현 신호

  • 전략 3: MFI - 하락추세 - 매도:

이 전략은 이전 전략(MFI - 상승추세 - 매수)과 반대가 될 것입니다. MFI가 50 이상이 되었을 때 매도 신호가 트리거 되고 MFI가 레벨 30 이하일때 이익 실현 신호가 됩니다. 그 근거는 대부분의 경우 MFI가 하락세 동안 50에서 30 수준 사이에서 움직인다는 것입니다.

요약하면,

MFI >=50 --> 매도 신호

MFI <= 30 --> 이익 실현

  • 전략 4: MFI - 상승추세 또는 다이버전스:

이 전략에 따르면 현재의 움직임이 강한 지 여부를 확인하는 지표가 필요합니다. 현재 및 이전 MFI 값과 현재 및 이전 고점을 비교하여 현재 움직임이 강하거나 다이버전스가 있는지 확인할 수 있습니다. 따라서 상승추세에서 현재 MFI가 이전 MFI보다 크고 현재 고점이 이전 고점보다 크다면 이는 현재 움직임이 강하지만 현재 MFI가 이전 MFI보다 작고 현재 고점 이전 고점보다 높으면 지표가 약세 다이버전스가 있음을 의미합니다. 지표가 가격 움직임을 확인하지 않기 때문입니다. 여러분은 값의 길이를 조정하여 개념을 이해하는 데 도움이 되는 값을 비교할 수 있습니다.

요약하면,

현재 MFI > 이전 MFI 및 현재 고가 > 이전 고가 --> 강세 움직임

현재 MFI < 이전 MFI 및 현재 고가 > 이전 고가 --> 약세 움직임

  • 전략 5: MFI - 하락추세 또는 다이버전스:

이 전략은 이전 전략(MFI - 상승추세 또는 다이버전스)과 반대입니다. 현재 움직임이 강한 지 또는 두 값만 비교하여 단순한 형태의 다이버전스가 있는지 확인하기 위해 지표가 필요하기 때문입니다. 따라서 현재 MFI가 이전보다 작고 현재 저점이 이전보다 작다면 이는 현재 하락세가 강하지만 현재 MFI가 이전 MFI보다 크고 현재 저점이 이전 저점보다 작으면 이것은 강세 다이버전스가 있음을 의미합니다.

간단히 하면,

현재 MFI < 이전 MFI 및 현재 저점 < 이전 저점 --> 강한 하향 움직임

현재 MFI > 이전 MFI 및 현재 저점 < 이전 저점 --> 강세 다이버전스


MFI 전략 청사진

이 섹션에서는 각 전략을 수행하는 거래 시스템을 만들 때 도움이 되는 각 전략에 대한 청사진을 설계합니다. 그전에 먼저 언급된 모든 거래 전략의 기반이 될 간단한 거래 시스템에 대한 청사진을 설계합니다. 이 간단한 시스템은 차트에 주석으로 MFI의 현재 값을 표시합니다. 따라서 매 틱마다 MFI 값을 확인하고 이 값을 주석으로 차트에 표시하게 하려면 컴퓨터가 필요합니다. 이를 위한 청사진은 다음과 같습니다:

간단한 MFI 청사진

이 부분에서는 각 전략과 관련한 청사진을 설계합니다.

  • 전략 1: MFI - OB 및 OS:

이 전략을 기반으로 매 틱에서 MFI 값을 확인하고 이 값을 특정 수준(20 및 80)과 비교하고 이 비교에 따라 결과를 결정하거나 차트에 주석으로 반환하도록 거래 시스템에 지시해야 합니다. MFI가 20보다 작거나 같으면 과매도와 현재 MFI 값을 차트에 주석으로 반환하고 각 주석은 별도의 줄에 표시되도록 합니다. MFI가 80보다 크거나 같으면 과매수라는 것과 현재 MFI를 차트에 주석으로 반환하고 각각 별도의 줄에 표시되도록 합니다. MFI가 20보다 크고 80보다 작으면 MFI 현재 값만 반환합니다. 이를 위한 청사진은 다음과 같습니다:

MFI -OB-OS 청사진

  • 전략 2: MFI - 상승추세 - 매수:

이 전략에 따르면 MFI가 50보다 작거나 같으면 매수 신호를 반환해야 합니다. 이를 결정하기 위해 매 틱에서 MFI 값, 50 및 70 수준을 확인하는 거래 시스템이 필요합니다. MFI가 70보다 크거나 같으면 시스템은 이익 실현 신호를 반환해야 하며 다음은 이를 위한 청사진입니다.

 MFI - Uptrend - 청사진 구매

  • 전략 3: MFI - 하락추세 - 매도:

이 전략에 따르면 MFI, 50 및 30 값 간의 비교를 기반으로 생성된 신호에 따라 알림을 주는 거래 프로그램이 필요합니다. MFI가 50보다 크거나 같으면 매도 신호를 반환해야 하고 MFI가 30보다 작거나 같으면 이익실현 신호를 반환해야 합니다. 이를 위한 청사진은 다음과 같습니다:

MFI - 하락세 - 청사진 매도

  • 전략 4: MFI - 상승추세 또는 다이버전스:

이 전략에 따르면 매 틱마다 4가지 값(현재 MFI, 이전 MFI, 현재 고가, 이전 고가)을 확인하고 어떤 신호를 생성할지를 결정하는 거래 시스템을 설계해야 합니다.

현재 MFI > 이전 MFI 및 현재 고가 > 이전 고가 --> 강한 강세 신호

현재 MFI < 이전 MFI 및 현재 고가 > 이전 고가 --> 약세 다이버전스

이를 위한 청사진은 다음과 같습니다:

 MFI - 상승 추세 또는 발산 청사진

 

  • 전략 5: MFI - 하락추세 또는 다이버전스:

이 전략은 이전의 전략과 반대입니다. 이 전략에 따르면 매 틱마다 4가지 값(현재 MFI, 이전 MFI, 현재 고가, 이전 고가)을 확인하고 어떤 신호를 생성할지를 결정하는 거래 시스템을 설계해야 합니다.

현재 MFI < 이전 MFI 및 현재 저점 < 이전 저점 --> 강한 하락 신호

현재 MFI > 이전 MFI 및 현재 저점 < 이전 저점 --> 강세 다이버전스

이를 위한 청사진은 다음과 같습니다:

MFI - 하락추세 또는 발산 청사진


MFI 거래 시스템

이 섹션에서는 앞에서 살펴본 각 전략을 MQL5에서 코드로 작성하여 MetaTrader 5에서 실행되는 거래 시스템을 설계합니다. 우선 MFI 현재 값으로 차트에 주석을 생성하는 간단한 MFI부터 시작하겠습니다.

  • 분수인 값을 나타내기 위해 'double' 함수를 사용하여 MFI용 배열을 만듭니다.
double MFIArray[];
  • boolean 결과(true 또는 false)를 반환하는 ArraySetAsSeries 함수를 사용하여 현재 데이터에서 MFI 배열을 정렬합니다. 이 매개 변수는 배열[] 및 플래그입니다.
ArraySetAsSeries(MFIArray,true);
  • MFIdef에 대한 정수 변수를 생성한 후 iMFI 함수를 사용하여 MFI를 정의합니다. iMFI 함수는 MFI 지표의 핸들을 반환하며 해당 매개변수는 (symbol, period, ma period and applied volume)입니다.
int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
  • MFI 지표에서 데이터를 가져오려면 CopyBuffer 함수를 사용하여 배열을 채웁니다.
CopyBuffer(MFIDef,0,0,3,MFIArray);
  • Double 변수 MFI 값을 생성한 후 NormalizeDouble을 사용하여 Double 유형의 값을 반환하여 현재 MFI 값을 계산합니다.
double MFIValue=NormalizeDouble(MFIArray[0],5);
  • 주석 함수를 사용하여 차트에 주석을 나타냅니다.
Comment("MFI Value is: ",MFIValue);

그러면 전체 코드는 다음과 같을 것입니다:

//+------------------------------------------------------------------+
//|                                                   Simple MFI.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()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);

//creating a comment with MFI value
   Comment("MFI Value is: ",MFIValue);
  }
//+------------------------------------------------------------------+

컴파일 하면 탐색기 창에서 Expert Advisor를 찾을 수 있습니다:

MFI nav1

더블 클릭하면 다음과 같은 창이 나타납니다:

단순 MFI 창

확인을 클릭하면 EA가 차트에 첨부됩니다:

간이 MFI 부착

다음은 테스팅을 통해 생성된 신호의 예입니다:

단순 MFI - 신호

생성된 MFI 값이 내장 지표의 MFI 값과 동일한지 확인하려면 다음을 수행하십시오:

단순 MFI - 동일한 신호

  • 전략 1: MFI - OB 및 OS:

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

//+------------------------------------------------------------------+
//|                                                  MFI - OB&OS.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()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   }   
  }
//+------------------------------------------------------------------+

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

과매도 및 과매수 조건:
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   } 

이 코드를 컴파일하면 탐색기 창에서 EA를 찾을 수 있습니다:

MFI 탐색 2

차트로 드래그 앤 드롭하여 창을 엽니다:

 MFI - OB_OS 창

확인을 클릭하면 EA가 차트에 첨부됩니다:

 MFI - OB_OS 연결됨

다음은 이 거래 시스템 의해 생성된 신호의 예입니다.

과매도 신호:

단순 MFI - OB_OS - OS

과매수 신호:

단순 MFI - 
OB_OS - OS

신호 없음:

단순 MFI - OB_OS - 신호 없음

  • 전략 2: MFI - 상승추세 - 매수:

다음은 이 전략의 코드를 작성하는 방법입니다:

//+------------------------------------------------------------------+
//|                                          MFI - Uptrend - Buy.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()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }
   
   //TP
   if(MFIValue>=70)
   {
   Comment("Take profit");
   }
  }
//+------------------------------------------------------------------+

이 코드와의 차이점:

신호의 조건:

매수 신호:

//Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }

이익 실현 신호:

//TP
   if(MFIValue>=70)
     {
      Comment("Take profit");
     }

컴파일을 하면 EA가 탐색기 창에 나타납니다.

MFI nav3

EA 창은 다음과 같습니다:

MFI - 상승 추세 - 매수 창

확인을 클릭하면 EA가 차트에 첨부됩니다:

 MFI - Uptrend - 연결된 구매

다음은 테스팅을 통해 생성된 신호의 예입니다:

매수 신호:

 MFI - 상승 추세 - 매수 신호

이익 실현 신호:

MFI - 상승 추세 - 이익 실현 신호

  • 전략 3: MFI - 하락추세 - 매도:

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

//+------------------------------------------------------------------+
//|                                      MFI - Downtrend - Short.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()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);


//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }
  }
//+------------------------------------------------------------------+

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

신호의 조건:

매도 신호:

//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

수익 실현 신호:

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }

컴파일 후 탐색기에서 더블 클릭하여 실행할 수 있습니다.


더블 클릭하면 창은 다음과 같습니다.

 MFI - 하락세 - 단기 기간

확인을 클릭하면 EA가 차트에 첨부됩니다:

MFI - 하락추세 - 매도 첨부

다음은 테스팅을 했을때 MFI - 하락추세 - 매도 전략을 기반으로 생성된 신호의 예입니다.

매도 신호:

SAR 하락 추세 - 매도 신호

수익 실현 신호:

MFI - 하락세 - 이익 실현 신호

  • 전략 4: MFI - 상승추세 또는 다이버전스:

다음은 MFI의 전체 코드입니다 - 테스트에서 상승 추세 또는 다이버전스 전략:

//+------------------------------------------------------------------+
//|                                  MFI - Uptrend 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()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the MFI array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

//conditions of strong move or divergence
//strong up
   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

//bearish divergence
   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }
  }
//+------------------------------------------------------------------+

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

가격 볼륨 및 스프레드 정보를 저장하는 MqlRates 함수를 사용하여 MFI 및 가격에 대한 배열 생성:

   double MFIArray[];
   MqlRates PriceArray[];

배열 정렬:

MFI의 경우 ArraySetAsSeries 함수를 사용하는 방법은 앞에서 언급한 것과 동일합니다.

가격의 경우 CopyRates 함수를 사용하여 MqlRates의 과거 데이터를 가져오고 이때 매개변수는 (symbol name, timeframe, start time, stop time and rates array)입니다.

   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

현재 및 이전 MFI 값 계산:

   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

현재 및 이전 고점 계산:

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

MFI의 조건 - 상승 추세 또는 다이버전스 전략:

강력한 강세:

   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

다이버전스:

   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }

이 코드를 컴파일하면 탐색기의 Expert Advisors에서 찾을 수 있습니다:

 MFI nav5

EA를 실행하는 경우에도 마찬가지입니다. 드래그 앤 드롭하거나 더블 클릭하여 창을 엽니다:

 MFI - 상승 추세 또는 발산 창

그런 다음 확인을 클릭하여 차트에 첨부합니다:

MFI - 상승추세 또는 발산 첨부

다음은 이 전략을 기반으로 데이터 창에서 생성된 신호의 예입니다:

현재 데이터 창과 강한 강세 신호:

MFI - 상승추세 또는 발산 - 강세 - 현재

이전 데이터 창과 강력한 강세 신호:

MFI - 상승추세 또는 발산 - 강세 - 이전

현재 데이터 창과 다이버전스 신호:

MFI - 상승 추세 또는 발산 - 약세 발산 - 현재

이전 데이터 창과 다이버전스 신호:


  • 전략 5: MFI - 하락추세 또는 다이버전스:

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

//+------------------------------------------------------------------+
//|                                MFI - Downtrend 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()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);

//conditions of strong move or divergence
//strong down
   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

//bullish divergence
   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }
  }
//+------------------------------------------------------------------+

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

이 전략을 기반으로 생성된 신호의 조건:

강한 하향 이동 신호:

   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

강세 다이버전스:

   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }

컴파일 후 탐색기 창은 다음과 같이 표시됩니다:

MFI nav6

실행 시 창은 다음과 같이 표시됩니다:

MFI - 하락추세 또는 발산 창

확인을 클릭하면 EA가 차트에 첨부됩니다:

MFI - 하락추세 또는 발산 첨부

다음은 테스팅에서의 값을 기반으로 생성된 신호를 표시하기 위한 데이터 창과 생성된 신호의 예입니다:

현재 데이터 창에서 강력한 약세 이동:

MFI - 상승추세 또는 발산 - 강세 - 현재

이전 데이터 창에서 강력한 약세 이동:

MFI - 상승추세 또는 발산 - 강세 - 이전

현재 데이터 창에서 강세 다이버전스:

MFI - 하락추세 또는 발산 - 강세 발산 - 현재

이전 데이터 창에서 강세 다이버전스:

MFI - 하락추세 또는 발산 - 강세 발산 - 이전

결론

이상 MFI(Money Flow Index) 지표에 대한 주제를 다뤘습니다. 이제 내장 MFI 지표를 MetaTrader 5에 삽입하는 방법을 배우는 것 외에도 볼륨이 무엇인지, 거래에서 왜 이것이 매우 중요한지, MFI 지표가 무엇인지, 무엇을 측정하는지, 수동으로 계산해 보았습니다. 이를 통해 여러분의 거래를 향상시킬 수 있는 새로운 정보를 얻으셨기를 바랍니다. MFI 지표의 기본을 배우고 그 뒤에 있는 기본 개념을 파악한 후 우리는 몇 가지 간단한 전략을 배웠습니다: 전략의 내용은 다음과 같습니다. 상품의 과매수 및 과매도 영역을 드러낼 수 있는 과매수 및 과매도 전략 그리고 MFI 상승 추세 전략의 경우는 MFI 지표를 기반으로 상승세에서 매수와 수익 실현을 감지하는 것이고 MFI 하락 추세 전략의 경우는 MFI 지표를 기반으로 하락세에서 매도와 수익 실현의 신호를 감지하는 데 사용할 수 있는 전략이었습니다. MFI - 상승 추세 또는 다이버전스 전략은 상승 추세 동안 상승 움직임의 강도를 확인하거나 약세 다이버전에 대한 신호를 얻는 데 사용되며, MFI - 하락 추세 또는 다이버전스 전략은 현재의 하락 추세가 강한지 여부와 강세 다이버전스가 있을지에 대한 신호를 얻기 위한 것이었습니다.

그 외에도 우리는 단계별 청사진을 설계하여 MetaTrader 5에서 자동으로 신호를 생성하는 거래 시스템이 동작하도록 각 전략에 대한 청사진을 개발했습니다. 그 후 우리는 MQL5를 통해 메타트레이더 5 거래 플랫폼에서 실행될 각 전략을 수행하는 거래 시스템을 만들어 인간의 개입 없이 자동으로 정확하게 작동하여 거래를 쉽게 하고 시간을 절약하고 일을 효율적으로 수행할 수 있도록 하였습니다.

이 기사를 통해 배운 내용을 여러분이 직접 적용하고 실천해 보셨기를 바랍니다. 또한 이 기사를 통해 이 글의 주제 또는 관련된 다른 주제에 관한 유용한 통찰력을 얻으셨으면 하는 바람입니다. 이미 말씀드렸듯이 이 기사의 주요 목적은 초보자가 스스로 간단한 거래 전략을 코딩하는 방법을 배울 수 있도록 정보를 제공하는 것입니다. 그러므로 실제 계정에서 사용하기 전에 전략을 테스트하십시오. 이러한 전략을 최적화 하거나 조정을 하고 다른 기술 도구와 결합하면 더 좋을 수 있음을 알 수 있을 것입니다. 이러한 방법은 좋은 결정을 내릴 수 있도록 여러 필수 기술 도구를 결합하는 유용한 접근 방식입니다. 이러한 도구를 결합한 후 간단한 거래 시스템에서 복잡한 거래 시스템에 이르기까지 모든 유형의 거래 시스템을 만들 수도 있습니다. 이를 통해 거래 목표를 달성하기 위해 장애물이 되는 주관성의 문제를 극복하면서 필요한 것을 정확하게 수행할 수 있습니다. 프로그래밍은 필요한 일을 쉽고 정확하고 원활하게 처리할 수 있도록 도와주는 놀라운 도구입니다. 프로그래밍은 매번 동일한 작업을 수행하지 않도록 해줍니다. 이외에도 다른 많은 좋은 면이 있습니다.

이 기사가 유용하다고 생각하고 유사한 기사를 더 읽어보고 싶으실 경우 가장 인기 있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법을 다루는 이 시리즈의 다른 기사들도 읽어 보시기 바랍니다. 좋은 기사들이 당신의 거래 결과를 향상시키는 데 도움이 되기를 바랍니다.

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

Expert Advisor 개발 기초부터 (파트 15): 웹에서 데이터 액세스 하기(I) Expert Advisor 개발 기초부터 (파트 15): 웹에서 데이터 액세스 하기(I)
MetaTrader 5를 통해 온라인 데이터에 어떻게 액세스할 수 있을까요? 웹에는 엄청난 양의 정보를 제공하는 많은 웹사이트가 있습니다. 여러분이 알아야 할 것은 어디에서 이 정보를 가장 잘 사용할 수 있을까 하는 점입니다.
Expert Advisor 개발 기초부터 (파트 14): 가격에 볼륨 추가 (II) Expert Advisor 개발 기초부터 (파트 14): 가격에 볼륨 추가 (II)
오늘 우리는 EA에 더 많은 리소스를 추가할 것입니다. 이 흥미로운 기사는 정보를 표시하는 새로운 아이디어와 방법을 제공합니다. 동시에 프로젝트의 사소한 결함을 수정하는 데에도 도움이 될 수 있습니다.
일목균형 지표로 트레이딩 시스템을 설계하는 방법 알아보기 일목균형 지표로 트레이딩 시스템을 설계하는 방법 알아보기
다음은 가장 인기 있는 지표인 거래 시스템을 설계하는 방법에 대한 시리즈의 새로운 기사입니다. 일목균형 지표에 대해 자세히 설명하고 이 지표로 거래 시스템을 설계하는 방법에 대해 설명합니다.
Expert Advisor 개발 기초부터 (파트 13): Time and Trade (II) Expert Advisor 개발 기초부터 (파트 13): Time and Trade (II)
오늘은 시장 분석을 위한 Times & Trade 시스템의 두 번째 부분입니다. 이전 기사 "Times & Trade (I)"에서 우리는 시장에서 실행된 거래에 대해 가능한 가장 빠른 해석을 가능하게 하는 지표를 가질 수 있는 차트 구성 시스템에 대해 알아보았습니다.