MFIによる取引システムの設計方法を学ぶ
はじめに
この記事は、MQL5コーディングを学ぶために、最も人気のあるテクニカル指標に基づいて簡単な取引システムを設計する方法についての連載の続きです。今回は、マネーフローインデックス(Money Flow Index、MFI)と呼ばれる新しいテクニカル指標についてご紹介します。この指標を詳しく学び、その主な概念に基づいて簡単な取引システムを開発する方法を見つけることができます。この指標を次のトピックを通して取り上げていきます。
この連載の他の記事をお読みになった方にはお馴染みのトピックの配置ですが、取引と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を取得するためのものです。
生のMF = 出来高 * 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比)を計算する
これまでの手順では、MFI指標を手動で計算していましたが、最近はその必要がありません。指標の概念は学んだので、MetaTrader 5に内蔵されている指標を使用してみましょう。使用できる指標から選ぶだけです。
MetaTrader 5を開き、[挿入]タブ→[インディケータ]→[ボリューム系]→[Money Flow Index]をクリックします。
[Money Flow Index]を選択すると、指標のパラメータが表示されます。
1.希望する指標期間
2.ボリュームタイプ(TickまたはReal)
3.AD線の色
4.線のタイプ
5.MFI線の太さ
[OK]をクリックすると、MFI指標がチャートに接続されます。
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値をチェックた後でこの値をコメントとしてチャートに表示する必要があります。そのための設計図を以下に示します。
次に、各戦略の設計図を作成していきます。
- 戦略1:MFI - OBとOS
この戦略では、MFI値を1ティックごとにチェックし、特定のレベル(20と80)と比較し、その比較結果に応じてチャートにコメントとして結果を決定または返すように取引システムに指示する必要があります。MFIが20以下の場合、売られすぎと現在のMFI値をチャート上にコメントとして返し、各コメントを別行で表示します。MFIが80以上の場合、買われすぎと現在のMFIをチャート上にコメントとして返し、それぞれを別行で表示します。MFIが20以上80以下の場合は、MFI現在値のみを返します。そのための設計図は次のようになります。
- 戦略2:MFI - Uptrend - Buy
この戦略では、MFI値、50、70のレベルを1ティックごとにチェックし、MFIが50以下であれば、買いシグナルを出すようにする必要があります。MFIが70以上であれば、利食いシグナルを返す必要があります。設計図は以下の通りです。
- 戦略3:MFI - Downtrend - Short:
この戦略では、MFI、50、30の値の比較に基づいて生成されたシグナルで警告する取引プログラムが必要です。MFIが50以上の場合は売りシグナルを、MFIが30以下の場合は利食いシグナルを返さなければなりません。そのための設計図を以下に示します。
- 戦略4:MFI - Uptrend or Divergence
この戦略では、4つの値(現在のMFI、前回のMFI、現在の高値、前回の高値)を1ティックごとにチェックし、どのシグナルを発生させるかを決定できる取引システムを設計する必要があります。
(現在のMFI > 前回のMFI)かつ(現在の高値 > 前回の高値)-> 強い上昇シグナル
(現在のMFI < 前回のMFI)かつ(現在の高値 > 前回の高値)-> ベアリッシュダイバージェンス
そのための設計図を以下に示します。
- 戦略5:MFI - Downtrend or Divergence:
この戦略は、先ほどとは逆です。それによると、4つの値(現在のMFI、前回のMFI、現在の安値、前回の安値)を1ティックごとにチェックし、どのシグナルを発生させるかを決めることができる取引システムを設計する必要があります。
(現在のMFI < 前回のMFI)かつ(現在の安値 < 前回の安値)-> 強い下降シグナル
(現在のMFI > 前回のMFI)かつ(現在の安値 < 前回の安値)-> ブリッシュダイバージェンス
そのための設計図を以下に示します。
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)を見つけることができます。
ダブルクリックすると、以下のウィンドウが表示されます。
[OK]をクリックすると、EAがチャートに接続されます。
以下は、テストによって生成されたシグナルの例です。
生成された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が表示されるようになります。
チャート上にドラッグ&ドロップすると、そのウィンドウが開きます。
[OK]をクリックすると、チャートに接続されます。
以下は、この取引システムにより生成されたシグナルの例です。
売られすぎのシグナル:
買われすぎのシグナル:
シグナルなし:
- 戦略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が表示されます。
EAウィンドウは、以下のようになります。
[OK]をクリックすると、チャートに接続されます。
以下は、テストによって生成されたシグナルの例です。
買いシグナル
利食いシグナル
- 戦略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"); }
コンパイルしたら、ナビゲータからダブルクリックして実行できます。
ダブルクリックすると、以下のようなウィンドウが表示されます。
[OK]をクリックすると、チャートに接続されます。
以下は、テスト中にMFI - Downtrend - Short戦略に基づいて生成されたシグナルの例です。
売りシグナル
利食いシグナル
- 戦略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にも表示されるようになります。
実行も同様です。ドラッグ&ドロップまたはダブルクリックすると、そのウィンドウが開きます。
その後、[OK]をクリックすると、チャートに添付されます。
この戦略に基づいてデータウィンドウで生成されたシグナルの例を以下に示します。
現在のデータウィンドウでの強い上昇シグナル:
前回のデータウィンドウでの強い上昇シグナル:
現在のデータウィンドウでのダイバージェンスシグナル:
前回のデータウィンドウでのダイバージェンスシグナル:
- 戦略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"); }
コンパイル後、ナビゲータウィンドウは以下のようになります。
実行すると、そのウィンドウは次のようになります。
[OK]をクリックすると、チャートに接続されます。
以下は、テスト時の値をもとに生成されたシグナルをデータウィンドウで表示した例です。
現在のデータウィンドウでの強い下向きの動き:
前回のデータウィンドウでの強い下向きの動き:
現在のデータウィンドウでのブリッシュダイバージェンス:
前回のデータウィンドウでのブリッシュダイバージェンス:
結論
マネーフローインデックス(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
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索