English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
MFIによる取引システムの設計方法を学ぶ

MFIによる取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 20 9月 2022, 09:30
236 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

この記事は、MQL5コーディングを学ぶために、最も人気のあるテクニカル指標に基づいて簡単な取引システムを設計する方法についての連載の続きです。今回は、マネーフローインデックス(Money Flow Index、MFI)と呼ばれる新しいテクニカル指標についてご紹介します。この指標を詳しく学び、その主な概念に基づいて簡単な取引システムを開発する方法を見つけることができます。この指標を次のトピックを通して取り上げていきます。

  1. MFIの定義
  2. MFI戦略
  3. MFI戦略の設計図
  4. MFI取引システム
  5. 結論

この連載の他の記事をお読みになった方にはお馴染みのトピックの配置ですが、取引とMQL5コーディングに関する新しい概念を学び、指標に関する新しい情報と新しい戦略、それに伴ういくつらの新しいコードが含まれます。MFI指標とは何か、何を測る指標なのか、どのように手動で計算すればいいのか、その考え方を学びます。続いて、MFI指標の算出例を見ていきます。もちろん、これらは基本に過ぎません。その基本的な概念を踏まえた上で、いかにシンプルな戦略で使うかという、より重要なテーマを学ぶ必要があります。その後、言及されたすべての戦略について、ステップバイステップの設計図を作成し、戦略の取引システムを設計するのに役立てます。最も興味深いトピックは、MQL5によってこれらの戦略による取引システムを作成し、MetaTrader 5取引プラットフォームで使用する方法を発見することです。

勝つための取引戦略をもとに自分だけの取引システムを作ることができるようになるためには、すべてのコードを自分で書くことをお勧めします。読んだだけで満足するのではなく、読んだことを応用して、1つ1つのコードを自分で書いてください。関数やプログラミングの概念を検索してより深く知ることができれば、よりよいでしょう。プログラマーが成功するのに最も重要なスキルの1つは、練習に加えて、効果的な検索方法を知っていることであるということを忘れてはいけません。

また、どんな戦略でも(特に教育目的の戦略は)使う前にテストする必要があります。すべての人に適した戦略はありません。私の役に立っても、あなたにの役には立たないかもしれません。

この記事では、MetaQuotes言語(MQL5)を使って、MetaTrader 5に組み込まれたMetaEditorで戦略のコードを書く方法を紹介します。MetaEditorをダウンロードする方法と使う方法を知りたい方は、前回の記事で「MetaEditorでMQL5コードを書く」トピックをお読みください。

免責条項:すべての情報は「現状有姿」で提供され、情報提供のみを目的としており、取引目的やアドバイスを目的としたものではありません。いかなる結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。

さて、トピックを直接見て、「取引カバン」の中の道具を増やすために、新しいツールを学んでみましょう。


MFIの定義

ここでは、マネーフローインデックス(Money Flow Index、MFI)指標について詳しく説明し、出来高指標の1つであるこの指標の考え方について見ていきます。それが何であるか、また何を測定するのかを学び、次に例を分析することによって手動で計算する方法を学びます。

前回の記事ですでに述べたように、取引において出来高は重要な要素です。市場には様々な側面が影響するため、徹底した出来高分析は取引の優位性を高めます。より多くの側面を理解すればするほど、獲得した知識によって決断を下すための特定の方向性を導く証拠の重みが増すので、より良い決断ができるようになります。

売買の多い資産があれば、その資産は売買の少ない資産に比べてより大きな意味を持ちます。金融市場では、一定期間に取引された株式や契約の数を出来高と呼びます。上昇トレンドの抵抗線や下降トレンドの支持線を突破したときの出来高は、動きの強さを示す重要なサインの1つです。より望ましいのは、上昇トレンドでは上昇してその調整トレンドでは下降し、下降トレンドでは下降してその調整トレンドでは上昇するように、出来高がトレンドと一緒に動くことです。トレンドと連動している出来高は現在のトレンドを確認する重要なサインの1つになります。

MFIは、Gene Quong氏とAvrum Soudack氏によって考案された指標です。出来高ベースの指標ですが計算には価格と出来高を使い、買い圧力と売り圧力を測定します。0から100の間で動きます。MFI指標が上昇すると買い圧力があり、逆に低下すると売り圧力があることが意味されます。トレンドの方向性を確認することもあれば、反転の警告を発することもあります。トレンドについてもっと知りたい方は、以前の記事の「トレンドの定義」トピックをお読みください。

MFIの手動計算は、複数の手順で構成されています。

  • 標準価格(TP) = (高値+安値+終値)/3を計算する
  • 生のMF = 出来高 * TPを計算する
  • TPの動き(アップ/ダウン)を判断する(アップ:現在のTP > 前回のTP、ダウン:現在のTP < 前回のTP )
  • 1+MF = アップ期間の生MFを計算する
  • 1-MF=ダウン期間の生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指標を算出する必要がある場合は、以下の手順でおこないます。

標準価格(TP) = (高値+安値+終値)/3を計算する

また、以下は計算後のTPを取得するためのものです。

MFI計算2

生のMF = 出来高 * TPを計算する

MFI計算3

TPの動きを判断する(アップ/ダウン)

MFI計算4

1+MF = アップ期間の生MFを計算する

1-MF=ダウン期間の生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の挿入

[Money Flow Index]を選択すると、指標のパラメータが表示されます。

MFI パラメータウィンドウ

1.希望する指標期間

2.ボリュームタイプ(TickまたはReal)

3.AD線の色

4.線のタイプ

5.MFI線の太さ

[OK]をクリックすると、MFI指標がチャートに接続されます。

MFの接続


MFI戦略

MFI指標とは何か、何を測る指標か、その主な概念を確認したので、ここではそれをどのように活用できるかを学びます。では、簡単に使用できる戦略を学んでいきます。

  • 戦略1:MFI - OBとOS

この戦略では、買われ過ぎ(OB)と売られ過ぎ(OS)の領域を特定します。MFIがレベル20に近づくとOS、レベル80に近づくとOBとなります。売られすぎ領域は上昇の可能性を高め、逆に売られすぎ領域は下降の可能性を高めます。

よって、次が言えます。

MFI <= 20 -> OS

MFI >= 80 -> OB

  • 戦略2:MFI - Uptrend - Buy

この戦略では、MFIが50を以下になるのを確認してから、買いシグナルが発生するのを待ちます。レベル70に近づくと利食いシグナルになります。この戦略の根拠は、ほとんどの場合、MFIは上昇トレンドの間、50から70の間で動くということです。

そこで、次のようになります。

MFI <= 50 -> 買いシグナル

MFI >= 70 -> 利食いシグナル

  • 戦略3:MFI - Downtrend - Short:

この戦略は、前作(MFI - Uptrend - Buy)の逆で、MFIがレベル50以上になると売りシグナルが発生し、MFIがレベル30以下になると利食いシグナルが発生することになります。根拠は、MFIは下降トレンドの時に50から30レベルの間で動くことが多いということです。

そこで、次のようになります。

MFI >=50 -> 売りシグナル

MFI <= 30 -> 利食いシグナル

  • 戦略4:MFI - Uptrend or Divergence

この戦略では、現在の動きが強いかどうかを確認するための指標が必要です。それは、現在と過去のMFI値、現在と過去の高値を比較し、現在の動きが強いことを確認するか、ダイバージェンスがあるかどうかを確認することでわかります。つまり、上昇トレンドの時に、現在のMFIが前回のMFIより大きく、現在の高値が前回の高値より大きければ、現在の動きが強いことを意味しますが、現在のMFIが前回より小さく、現在の高値が前回の高値より大きければ、値動きを確認できない指標なので、ベアリッシュダイバージェンスが発生していることを意味するのです。値の長さを調節して比較することができるので、概念の理解に役立ちます。

そこで、次のようになります。

(現在のMFI > 前回のMFI)かつ(現在の高値 > 前回の高値)-> 強い上昇の動き

(現在のMFI < 前回のMFI)かつ(現在の高値 > 前回の高値)-> ベアリッシュダイバージェンス

  • 戦略5:MFI - Downtrend or Divergence:

この戦略は、前のもの(MFI - Uptrend or Divergence)とは逆です。2つの値だけを比較して、現在の動きが強いか、またはその単純な形でダイバージェンスがあるかどうかを確認する指標も必要だからです。つまり、現在のMFIが前回よりも小さく、現在の安値が前回よりも小さければ、現在の下向きの動きが強いことを意味しますが、現在のMFIが前回よりも大きく、現在の安値が前回よりも小さければ、ブリッシュダイバージェンスがあることを意味します。

単純に言うと

(現在のMFI < 前回のMFI)かつ(現在の安値 < 前回の安値)-> 強い下向きの動き

(現在のMFI > 前回のMFI)かつ(現在の安値 < 前回の安値)-> ブリッシュダイバージェンス


MFI戦略の設計図

このセクションでは、各戦略の取引システムを作成する際に役立つように各戦略の設計図を作成します。まず、すべての言及された取引戦略のベースとなる単純な取引システムの設計図を作成します。このシンプルなシステムでは、MFI現在値をチャート上にコメントとして表示するだけです。コンピュータは、1ティックごとにMFI値をチェックた後でこの値をコメントとしてチャートに表示する必要があります。そのための設計図を以下に示します。

Simple MFIの設計図

次に、各戦略の設計図を作成していきます。

  • 戦略1:MFI - OBとOS

この戦略では、MFI値を1ティックごとにチェックし、特定のレベル(20と80)と比較し、その比較結果に応じてチャートにコメントとして結果を決定または返すように取引システムに指示する必要があります。MFIが20以下の場合、売られすぎと現在のMFI値をチャート上にコメントとして返し、各コメントを別行で表示します。MFIが80以上の場合、買われすぎと現在のMFIをチャート上にコメントとして返し、それぞれを別行で表示します。MFIが20以上80以下の場合は、MFI現在値のみを返します。そのための設計図は次のようになります。

MFI -OB-OSの設計図

  • 戦略2:MFI - Uptrend - Buy

この戦略では、MFI値、50、70のレベルを1ティックごとにチェックし、MFIが50以下であれば、買いシグナルを出すようにする必要があります。MFIが70以上であれば、利食いシグナルを返す必要があります。設計図は以下の通りです。

MFI - Uptrend - Buyの設計図

  • 戦略3:MFI - Downtrend - Short:

この戦略では、MFI、50、30の値の比較に基づいて生成されたシグナルで警告する取引プログラムが必要です。MFIが50以上の場合は売りシグナルを、MFIが30以下の場合は利食いシグナルを返さなければなりません。そのための設計図を以下に示します。

MFI - Downtrend - Shortの設計図

  • 戦略4:MFI - Uptrend or Divergence

この戦略では、4つの値(現在のMFI、前回のMFI、現在の高値、前回の高値)を1ティックごとにチェックし、どのシグナルを発生させるかを決定できる取引システムを設計する必要があります。

(現在のMFI > 前回のMFI)かつ(現在の高値 > 前回の高値)-> 強い上昇シグナル

(現在のMFI < 前回のMFI)かつ(現在の高値 > 前回の高値)-> ベアリッシュダイバージェンス

そのための設計図を以下に示します。

MFI - Uptrend or Divergenceの設計図

  • 戦略5:MFI - Downtrend or Divergence:

この戦略は、先ほどとは逆です。それによると、4つの値(現在のMFI、前回のMFI、現在の安値、前回の安値)を1ティックごとにチェックし、どのシグナルを発生させるかを決めることができる取引システムを設計する必要があります。

(現在のMFI < 前回のMFI)かつ(現在の安値 < 前回の安値)-> 強い下降シグナル

(現在のMFI > 前回のMFI)かつ(現在の安値 < 前回の安値)-> ブリッシュダイバージェンス

そのための設計図を以下に示します。

MFI - Downtrend or Divergenceの設計図


MFI取引システム

このセクションでは、MQL5でコードを記述し、MetaTrader 5で実行することによって、各戦略の取引システムを設計します。まずは、MFI現在値でチャートにコメントを生成するSimple MFIからご紹介します。

  • MFI用の配列を作成し、doubleで、小数点以下の値を表現します。
double MFIArray[];
  • ArraySetAsSeries関数を使用して、現在のデータからMFI配列を並び替え、ブール結果(trueまたはfalse)を返し、そのパラメータは(配列[]とフラグ)です。
ArraySetAsSeries(MFIArray,true);
  • MFIDefの整数型変数を作成した後、iMFI関数でMFIを定義します。iMFI関数は、MFI指標のハンドルを返し、そのパラメータは(銘柄、期間、MA期間、適用出来高)です。
int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
  • CopyBuffer関数を使ってMFI指標からデータを取得し、配列を埋めます。
CopyBuffer(MFIDef,0,0,3,MFIArray);
  • double型のMFI値を作成した後、NormalizeDoubleを使用して double型の値を返すことで、現在のMFI値を計算します。
double MFIValue=NormalizeDouble(MFIArray[0],5);
  • Comment関数でチャートにコメントを生成します。
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);
  }
//+------------------------------------------------------------------+

その後、ナビゲータウィンドウでエキスパートアドバイザー(EA)を見つけることができます。

MFIナビゲータ1

ダブルクリックすると、以下のウィンドウが表示されます。

Simple MFIのウィンドウ

[OK]をクリックすると、EAがチャートに接続されます。

Simple MFIの接続

以下は、テストによって生成されたシグナルの例です。

Simple MFIのシグナル

生成されたMFI値が内蔵指標のMFI値と同じであることを確認したい場合:

Simple 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のウィンドウ

[OK]をクリックすると、チャートに接続されます。

MFI - OB_OSの接続

以下は、この取引システムにより生成されたシグナルの例です。

売られすぎのシグナル:

Simple MFI - OB_OS - OS

買われすぎのシグナル:

Simple MFI - OB_OS - OB

シグナルなし:

Simple MFI - OB_OS - シグナルなし

  • 戦略2:MFI - Uptrend - Buy

以下は、この戦略のコードの書き方です。

//+------------------------------------------------------------------+
//|                                          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ナビゲータ3

EAウィンドウは、以下のようになります。

MFI - Uptrend - Buyのウィンドウ

[OK]をクリックすると、チャートに接続されます。

MFI - Uptrend - Buyの接続

以下は、テストによって生成されたシグナルの例です。

買いシグナル

MFI - Uptrend - Buyのシグナル

利食いシグナル

MFI - Uptrend - 利食いシグナル

  • 戦略3:MFI - Downtrend - Short:

以下は、この戦略の取引システムを作成するための完全なコードです。

//+------------------------------------------------------------------+
//|                                      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 - Downtrend - Shortのウィンドウ

[OK]をクリックすると、チャートに接続されます。

MFI - Downtrend - Shortの接続

以下は、テスト中にMFI - Downtrend - Short戦略に基づいて生成されたシグナルの例です。

売りシグナル

MFI - Downtrend - 売りシグナル

利食いシグナル

MFI - Downtrend - 利食いシグナル

  • 戦略4:MFI - Uptrend or Divergence

以下は、テストからのMFI - Uptrend or Divergence戦略のフルコードです。

//+------------------------------------------------------------------+
//|                                  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関数を使用することは、前述と同じです。

価格については、MqlRatesの履歴データを取得するCopyRates関数を使用し、そのパラメータは(銘柄名、時間枠、開始時刻、停止時刻、レート配列)です。

   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 - Uptrend or Divergence戦略の条件

強い上昇:

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

ダイバージェンス:

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

このコードをコンパイルすると、ナビゲータのEAにも表示されるようになります。

MFIナビゲータ5

実行も同様です。ドラッグ&ドロップまたはダブルクリックすると、そのウィンドウが開きます。

MFI - Uptrend or Divergenceウィンドウ

その後、[OK]をクリックすると、チャートに添付されます。

MFI - Uptrend or Divergenceの接続

この戦略に基づいてデータウィンドウで生成されたシグナルの例を以下に示します。

現在のデータウィンドウでの強い上昇シグナル:

MFI - Uptrend or Divergence:- 強い - 現在

前回のデータウィンドウでの強い上昇シグナル:

MFI - Uptrend or Divergence: - 強い - 前回

現在のデータウィンドウでのダイバージェンスシグナル:

MFI - Uptrend or Divergence - ベアリッシュダイバージェンス - 現在

前回のデータウィンドウでのダイバージェンスシグナル:


  • 戦略5:MFI - Downtrend or Divergence:

この戦略の完全なコードは以下の通りです。

//+------------------------------------------------------------------+
//|                                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ナビゲータ6

実行すると、そのウィンドウは次のようになります。

MFI - Downtrend or Divergenceのウィンドウ

[OK]をクリックすると、チャートに接続されます。

MFI - Downtrend or Divergenceの接続

以下は、テスト時の値をもとに生成されたシグナルをデータウィンドウで表示した例です。

現在のデータウィンドウでの強い下向きの動き:

MFI - Downtrend or Divergence - 強い - 現在

前回のデータウィンドウでの強い下向きの動き:

MFI - Downtrend or Divergence - 強い - 前回

現在のデータウィンドウでのブリッシュダイバージェンス:

MFI - Downtrend or Divergence - ブリッシュダイバージェンス - 現在

前回のデータウィンドウでのブリッシュダイバージェンス:

MFI - Downtrend or Divergence - ブリッシュダイバージェンス - 前

結論

マネーフローインデックス(Money Flow Index、MFI)のトピックをカバーして、取引を強化できる新しい情報を提供しました。ボリュームとは何か、取引でなぜそれが非常に重要なのか、MFI指標とは何か、それが何を測定するのかを知っているだけでなく、それを手動で計算して組み込みの MFI 指標をMetaTrader 5に挿入する方法を学びました。MFI指標の基本を学んでその背後にある基本的な概念を把握した後、いくつかの簡単な戦略を学びました。商品の買われすぎ領域と売られすぎ領域を明らかにする買い越し戦略と売り越し戦略、MFI指標に基づいて上昇トレンド中に買いシグナルと利食いシグナルを検出するMFI - Uptrend戦略、MFI指標に基づいて下降トレンド中に売りシグナルと利食いシグナルを生成するMFI - Downtrend戦略、上昇トレンド中の上昇の動きの強さを確認したり、弱気の発散を警告するために使用できるMFI - Uptrend or Divergence戦略と、現在の下降の動きが強いかどうかを確認したり、強気の発散を警告したりするために使用できるMFI - Downtrend or Divergence戦略です。

それに加えて、各戦略の設計図を段階的に作成することで、MetaTrader 5で自動的にシグナルを発生させる取引システムを作成することができるようにしました。その後、MQL5を用いて各戦略の取引システムを作成し、MetaTrader 5取引プラットフォームで実行することで、人手を介さずに自動的かつ正確に動作させて、取引を容易にして時間を節約し、効率的に物事を成し遂げられるようにしました。

この記事を通して学んだことを応用し、実践してみたのであれば幸いです。また、この記事が、今回のトピックに関連するものであれ、関連するトピックであれ、取引に関する有益な洞察を与えてくれることを願っています。この記事の主な目的は、初心者が簡単な取引戦略を自分でコーディングする方法を学ぶための情報を提供することに貢献することです。すでに述べたように、実際の口座で使用する前に必ず戦略をテストするようにしてください。そのため、これらの戦略の最適化や調整が必要なことや他のテクニカルツールと組み合わせたほうが良いことが判明するかもしれません。これは、必要な技術ツールを組み合わせて、適切な判断を下すための多角的な視点を明らかにするための有効なアプローチです。これらのツールを組み合わせた後、単純なものから複雑なものまであらゆるタイプの取引システムを見つけることができるので、取引システムを作成することもできます。これにより、取引目標を達成する上で障害となり得る主観性の問題を克服しながら、必要なことを正確におこなうことができます。プログラミングは、必要なことを簡単に、正確に、スムーズにおこなえるようにする素晴らしいツールです。同じ作業の繰り返しから解放されるだけでなく、多くの良い機能があります。

この記事が役に立ち、さらに同様の記事を読む必要がある場合は、この連載の他の記事を読んで、最も人気のあるテクニカル指標に基づいて取引システムを設計する方法について学んでください。取引の成果を高めるために、ぜひお役立てください。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/11037

Volumesによる取引システムの設計方法を学ぶ Volumesによる取引システムの設計方法を学ぶ
最も人気のあるテクニカル指標に基づいて取引システムを設計する方法を学ぶための連載の新しい記事です。今回は、Volumes指標について紹介します。出来高という概念は、金融市場の取引において非常に重要な要素の1つであり、注意を払う必要があります。この記事では、Volumes指標を使用した簡単な取引システムの設計方法について説明します。
ニューラルネットワークが簡単に(第17部):次元削減 ニューラルネットワークが簡単に(第17部):次元削減
今回は、人工知能モデルについて引き続き説明します。具体的には、教師なし学習アルゴリズムについて学びます。クラスタリングアルゴリズムの1つについては既に説明しました。今回は、次元削減に関連する問題を解決する方法のバリエーションを紹介します。
DoEasy - コントロール(第8部):カテゴリ(GroupBoxおよびCheckBoxのコントロール)による基本WinFormsオブジェクト DoEasy - コントロール(第8部):カテゴリ(GroupBoxおよびCheckBoxのコントロール)による基本WinFormsオブジェクト
この記事では、「GroupBox」および「CheckBox」WinFormsオブジェクトの作成、およびWinFormsオブジェクトカテゴリの基本オブジェクトの開発について検討します。作成されたすべてのオブジェクトはまだ静的で、マウスと対話することはできません。
価格変動モデルとその主な規定(第1回)。最もシンプルなモデルバージョンとその応用 価格変動モデルとその主な規定(第1回)。最もシンプルなモデルバージョンとその応用
この記事は、数学的に厳密な値動きと市場機能の理論の基礎を提供するものです。現在に至るまで、数学的に厳密な値動き理論は存在しません。その代わりに、「あるパターンの後に、ある方向に価格が動く」という経験則に基づいた仮定で対処する必要がありました。もちろん、これらの仮定は統計にも理論にも裏付けられていません。