English Deutsch
preview
知っておくべきMQL5ウィザードのテクニック(第53回):MFI (Market Facilitation Index)

知っておくべきMQL5ウィザードのテクニック(第53回):MFI (Market Facilitation Index)

MetaTrader 5トレーディング | 11 6月 2025, 08:15
63 5
Stephen Njuki
Stephen Njuki

はじめに

本来であれば、これまでの記事の流れを受けて機械学習について執筆する予定でしたが、次回の機械学習に関する記事に必要な資料の一部がまだ整っていないため、今回は取引指標に焦点を当てることにしました。準備が整い次第、機械学習に関する記事も公開する予定です。 

MFI(Market Facilitation Index、マーケットファシリテーションインデックス)は、一定の時間枠内で価格を変動させる市場の「効率性」を示す指標です。この指標をより理解するために、前回の記事で紹介した別のビル・ウィリアムズ指標「Awesome Oscillator (AO)」と比較してみると良いでしょう。まず、目的・焦点の違いに注目します。AOは、34期間と5期間の中央値価格の差を使ってモメンタムを可視化する指標です。変化の大きさがモメンタムの強さを示すという前提に基づいています。一方で、MFIは価格変動に対する出来高の影響、つまり「出来高がxであれば価格はどの程度動くのか?」という効率性に焦点を当てています。

AOはゼロラインを基準にモメンタムの方向性を判断します。実際、これまで取り上げたビル・ウィリアムズのインジケーターはいずれもゼロラインを活用していますが、MFIはゼロラインを使用しません。MFIは、価格レンジと出来高から絶対値を算出し、その変化を直接比較することで分析をおこないます。利用目的にも違いがあります。MFIは、特に他のインジケーターと組み合わせることで、ブレイクアウトの確認や市場効率の把握に優れています。一方、AOはトレンドフォロー戦略において、フラクタルやモメンタムの転換点を見つけるのに適しています。


ここで

  • High:選択された時間枠における最高価格
  • Low:選択された時間枠における最低価格
  • Volume:その時間枠における総取引量

MFI自体はインジケーターの数値を提供しますが、その真価は、市場の状況やボラティリティの違いに応じた変化を追跡することにあります。このインジケーターは「正の値のみを持つヒストグラム型オシレーター」であり、いくつかの重要な色分けが存在する点も注目すべきポイントです。 

緑色は次のことを意味します。

青色は次のことを意味します。

茶色は次のことを意味します。

ピンク色は次のことを意味します。

MQL5では次のように色を決定または設定します。

   color             Color(int ind)
   {  //
      return(
               (Volume(ind) > Volume(ind + 1) && MFI(ind) > MFI(ind + 1)) ? clrGreen :
               ((Volume(ind) < Volume(ind + 1) && MFI(ind) < MFI(ind + 1)) ? clrBrown :
                ((Volume(ind) < Volume(ind + 1) && MFI(ind) > MFI(ind + 1)) ? clrBlue :
                 ((Volume(ind) > Volume(ind + 1) && MFI(ind) < MFI(ind + 1)) ? clrPink : clrNONE
                 ))));
   }

取引量を判断する際には、ティック出来高に依存しています。というのも、外国為替市場では実際の取引量のデータが一般に提供されていないためです。ただし、株式を取引しており、その情報が利用可能である場合は、代わりに実際の取引量を使用するべきです。


ティック出来高vs実出来高

MFIに関連するティック出来高の最も簡単な定義は、一定の時間枠内での価格変動の回数です。ただし、これはあくまで単純化された説明です。というのも、通常ティックは価格の変動だけでなく、スワップレートや取引停止レベルなど、取引されている証券の契約情報の変更も含まれる場合があるからです。しかし外国為替取引では、市場が分散化されているため、ほとんどのブローカーでは実出来高のデータを提供しておらず、ティック出来高が実質的に最適な代替手段となっています。

一方で、実出来高は、一定の時間枠内に実際に取引された契約数またはロット数を示します。これは、株式や先物などの中央集権的な市場では一般的ですが、FX市場では非常に稀です。ただし、複数の研究により、ティック出来高と実出来高の間には高い相関関係があることが確認されており、本記事で使用しているティック出来高は、理想的な指標から大きく外れているわけではありません。

加えて、システム開発において特定のブローカーのティック出来高を使用することで、エキスパートアドバイザー(EA)が他のブローカーでも使いやすくなるという利点もあります。というのも、ティック出来高はほとんどのブローカーで取得可能であり、実出来高のようにブローカーごとの違いによってパフォーマンスが大きく左右されることが少ないためです。また、ティック出来高は市場の活発さとの強い正の相関関係があり、データ取得コストも低いため、実用面でも優れています。

もちろん、ティック出来高にも限界があります。特に問題となるのは、価格変動や契約情報の変更が過度に反映される点です。たとえば、価格が短時間で2つの水準の間を行ったり来たりするような場合、実際に価格が進展していなくても、そのたびにティックとしてカウントされ、出来高が増加したように見えてしまいます。これは市場参加者の活動量を測るという観点では有意義ですが、一方で、たとえばある1人のトレーダーが大量の取引をおこない、価格が大きく動いたとしても、それは1ティックとしてしか記録されないこともあります。 

さらに、ティックデータは多くのブローカーで取得可能とはいえ、ブローカーごとに異なる流動性プロバイダーを利用しているため、同一の時間帯であっても記録されるティック数が大きく異なる場合があります。したがって、実運用前には対象のブローカーのデータで十分にテストすることが重要です。また、ボラティリティの低い市場では、小さな価格の変動でもティック出来高が不自然に急増することがあり、誤解を招く可能性もあります。

まとめると、株式や先物などの中央集権市場で取引をおこなう場合は、実出来高の方が市場参加の実態をより正確に捉えることができるため、ティック出来高よりも好ましいといえます。実出来高は、ダイバージェンス(乖離)のような重要なパターンの検出にも向いており、価格のノイズの影響を受けにくいというメリットもあります。一方で、外国為替市場においては、実出来高の提供自体が限られており、提供しているブローカーでもプレミアムアカウントが必要であったり、データの品質や一貫性がブローカーごとに異なるなどの課題があるため、現実的にはティック出来高の利用が主流となっています。


絶対値の重要性

MFIにはもう一つの特徴があります。その絶対値自体はあまり重要ではないということです。RSIやコモディティチャネルインデックスなどの他のオシレーターでは、絶対値が重要な閾値となり、例えばRSIが30を超えたときに重要な判断材料となります。

しかし、MFIの場合は、絶対値がそれほど重要でないばかりか、皮肉にも短い時間枠では値が大きくなり、長い時間枠では読み取り値がかなり小さくなります。ノイズを避けて主に長い時間枠に注目するトレーダーにとって、これはMFIの絶対値単独ではあまり意味がないというヒントになるでしょう。

重要なのは、隣り合うバー同士の相対的な変化であり、値そのものではありません。


緑のシグナル(パターン0)

最初のパターンは基本的な緑のシグナルで、エントリーシグナルとして緑色のヒストグラムを探します。このパターンおよび以降のすべてのパターンでわかるように、強気または弱気の特定のトレンドを推測するには、MFIを価格変動や他のインジケーターと組み合わせる必要があります。

したがって、強気シグナルでは、価格変動と出来高に正の相関があることを示す緑色のヒストグラムと、終値が一般的な移動平均を上回っていることが必要です。インジケーター期間は8を使用しており、この値は最適化していませんが、変更は読者の判断に任せます。このパターンをMQL5で実装すると次のようになります。

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

このパターンは、これまでの記事と同様に「パターン0」としてラベリングされており、最初のパターンです。このパターンのみをテストするには、入力パラメーター「Patterns Used Bitmap」に値「1」を設定するだけです。この設定で、2023年の1年間を対象にEUR/JPYの12分足チャートで最適化テストを実行すると、いくつかの妥当な入力設定に基づく以下のテスト結果が得られます。

r0

今回テストしているのは、カスタムシグナルクラスのコードに基づいてウィザードで組み立てたEAです。そのため、通常はオープンおよびクローズの閾値、エントリー価格のデルタ値、未決済注文の有効期限、そしてもちろん、テスト対象/選択されたパターンの閾値について最適化をおこないます。閾値は0から100の範囲で指定されます。初心者の読者の方には、記事の末尾に添付されたコードを使用してMQL5ウィザード経由でエキスパートアドバイザーを組み立てる方法についてのガイドがこちらこちらにありますので、そちらを参照してください。

パターン0はトレンド確認に最適であり、トレンドフォロー戦略との相性が良いパターンと言えます。


失速パターン(パターン1)

次のパターン(パターン1)は、価格がトレンドを継続しているにもかかわらず、MFIがモメンタムの低下を示している状況を指します。これは通常、買いまたは売りの圧力が弱まっていることを意味し、反転や市場の持ち合いを予測するために用いられます。失速パターンを特定する最も代表的な方法はダイバージェンスです。たとえば、価格が上昇を続けているにもかかわらずMFIがピンク色でシグナルを出している場合(弱気のダイバージェンス)や、価格が下落しているのにMFIがピンク色を示している場合(強気のダイバージェンス)などです。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrPink)
   {  if(T == POSITION_TYPE_BUY && Close(X()) < MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) > MA(X()))
      {  return(true);
      }
   }
   return(false);
}

パターン1は、価格のピーク後に横ばいになる動きでも確認されます。上記のピンク色の条件式からもわかるように、ピンクパターンは主に出来高の減少によって引き起こされます。出来高が減少すると、現在のトレンドを維持する力が弱まり、その結果として反転や持ち合いが発生しやすくなります。先ほどと同じ通貨ペア(EUR/JPY)、12分足の時間枠でテストを実施したところ、以下のようなレポートが得られました。  

r1

このテストで使用した入力パラメーターは、前述の通り、オープンおよびクローズの閾値、エントリー価格のダイバージェンス幅、未決注文の有効期限、そしてパターンの閾値です。今回はパターン1のみに限定してテストをおこなっているため、使用するパターンのビットマップ入力値は2の1乗、すなわち「2」になります。

このパターンが現れる主な原因としては、出来高の減少以外にも、トレーダーによる利益確定やモメンタムの消耗が考えられます。その結果としての意味合いも多岐にわたります。たとえば、反転の初期兆候として機能する可能性があり、その場合は現在保有中のポジションの手仕舞いや、逆方向へのエントリー準備として活用できます。あるいは、ボラティリティやダイバージェンスを伴わない場合には、レンジ相場への移行(保合い)の警告と捉えることもできます。

ただし、「失速」パターンが価格のダイバージェンスとともに現れる場合には、その信頼性は一段と高まります。これは反転の可能性が高いサインと見なされるためです。このような場合、リスク管理の一環としてストップロスをタイトに設定することで、ポジション調整への備えとすることができます。また、ボリンジャーバンドや移動平均線と組み合わせて使用することで、押し目や戻りの確認に役立ち、シグナルの精度向上にもつながります。


騙しのシグナル(パターン2)

パターン2は、MFIが青色で示されることからも分かるように、「騙しのシグナル」として知られています。ここで「騙し」とは、チャート上の価格変動が出来高によって裏付けられていないことを意味します。このパターンはトレーダーを早期のエントリーに誘導し、その結果損失を被ることが多いため、注意が必要です。このシグナルは、主にダマシのブレイクアウトや転換が頻発する、レンジ相場やボラティリティの低い相場環境でよく見られます。以下に、このパターンをMQL5で実装する方法を示します。

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBlue)
   {  if(T == POSITION_TYPE_BUY && Close(X()) < MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) > MA(X()))
      {  return(true);
      }
   }
   return(false);
}

まず最初に、MFIヒストグラムの色が青であることを確認します。これは先に紹介した式からも分かるように、「価格レンジが拡大しているにもかかわらず、出来高が減少している」ことを意味します。青色が確認されたら、強気パターン(買いの騙しシグナル)は終値が移動平均線より下にある場合、逆に終値が移動平均線より上にある場合は弱気パターン(売りの騙しシグナル)となります。

この実装の中心となる考え方は、「現在の価格変動が実際の市場トレンドを反映していない」というものであり、その乖離が近いうちに修正される可能性が高いと見ています。先ほどまでの2つのパターンと同様に、EUR/JPYペアの12分足チャートを使い、2023年の期間で最適化テストをおこないました。その中でも良好な最適化パラメータによって得られたテスト結果は以下の通りです。

r2

パターン2は、取引量の少なさや流動性の低さに起因しており、それによって信頼性の低いシグナルが生じることがよくあります。一般的に、ニュースイベントや市場操作による突発的な出来高のスパイクが短期的なノイズを生み出し、MFIのシグナルが誤ったものとなる可能性があります。また、騙しのパターンが大きなトレンド中の押し目の調整に過ぎない場合、それは強力なトレンド継続シグナルとして機能することもあります。MFIだけに頼ると、取引回数が増えるだけでなく、損失につながる可能性もあるため、サポートとなるインジケーターを併用することが重要です。そこで、パターン2の判断においてMFIと組み合わせる移動平均線インジケーターに加えて、価格チャネルのような代替インジケーターを使用することで、強いトレンドの中で頻繁に発生する押し目の形での騙しのパターンをフィルタリングすることが可能です。

ボリンジャーバンドのようなチャネル系インジケーターのほか、サポート・レジスタンスレベルと組み合わせたローソク足パターンも活用できます。そして、こういった低確率パターンに対しては、常に確認シグナルを待つこと、また分析にはより上位の時間軸を使用することが重要です。


スクワットパターン(パターン3)

パターン3、スクワットパターンは、価格が大きく動いたりボラティリティが高いにもかかわらず、MFIが頻繁に方向を変えたり平坦化したりする場合に現れます。これは買いと売りの圧力がほぼ拮抗しているため、市場が「スクワット」状態となり、その後のブレイクアウトや反転が起こる前兆を示すサインです。

茶色で示されているこのパターンは、以下のようにMQL5で実装しています。

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBrown)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) <= MA(X()+1) && Close(X()) >= MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) >= MA(X()+1) && Close(X()) <= MA(X()))
      {  return(true);
      }
   }
   return(false);
}

上記のコードからわかるように、このパターンの最初の前提条件は、MFIの茶色のヒストグラムです。これは冒頭の数式で定義されている通り、MFIと出来高がともに下降している状態を示します。したがって、この不確実性の大きい状況の中での潜在的な強気パターンは、最初の茶色のMFIヒストグラムが現れ、かつ価格が移動平均線を下から上へ抜けて終値がそれを上回ることで示されます。

一方で、弱気パターンもMFIのブラウンヒストグラムが必要ですが、価格は移動平均線を上から下へ抜けて終値がそれを下回ることが条件となります。上述したパターン0~2と同様に、このパターン単独で最適化をおこなう場合、Bitmapの入力値を2の3乗(8)に設定すると、以下のような有利な入力設定による結果が得られます。

r3

パターン3は、取引量の減少局面にしばしば見られる出来高の圧縮によって生じ、市場の確信の欠如を示します。スクワットパターンは通常、価格の大きな動きに先行し、市場がレンジ相場から新たなトレンドへ移行する局面で現れます。スクワットパターンの前段階には、トレーダーや機関投資家が買い・売りポジションのバランスを取るためにポジションの蓄積や分配をおこなうことが多く見られます。

また、この低ボラティリティの期間は、経済指標の発表や地政学的なイベントといった市場の材料を待つ期間であることもあります。したがって、これらの茶色のMFI領域は、価格の重要なサポート・レジスタンス帯を形成しやすい「移行ゾーン」と考えることができます。この意味は非常に重要で、主にスクワットパターンは市場が「巻き付き」状態にあり、間もなく大きなボラティリティが訪れることを示唆しています。スクワット自体はブレイクアウトの方向性を示すわけではありませんが、先に示したMQL5の実装のように他の指標や価格変動と組み合わせることで、次の動きを見極める手助けとなります。

また、パターン3は、最近の価格の極値付近にタイトなストップロスを設定する良い機会を提供し、リスク管理に役立ちます。さらに、今回の実装以外にも、このパターンから発展させられるエントリー戦略としては、騙しのシグナルのフィルタリングを中心に考えられます。たとえば、価格のブレイクアウト後に出来高の上昇を確認してからエントリーすることで、価格変動だけでなく2つのシグナルを頼りに取引判断をおこなう方法などが挙げられます。


ダイバージャンスパターン(パターン4)

パターン4は、MFIと価格変動の間に見られるダイバージェンスに基づいています。すでに述べたように、MFIは出来高あたりの価格変動を測定し、市場がどれだけ効果的に流動性を吸収しているかを示す指標です。そのため、MFIの方向性は一見すると分かりにくい場合があります。価格のトレンドは二択で考えることができ、強気トレンドか弱気トレンドのどちらかですので、この点はシンプルです。

しかし、MFIの場合は増加方向に動いているだけでは意味がありません。なぜなら、強気トレンドであれば(価格上昇とMFI上昇が並行しているため)ダイバージェンスにはならず、弱気の大暴落時でも同様に同調して動くためです。一方で、MFIが減少している場合には、市場の主要なトレンドとのダイバージェンスが容易に識別できます。

たとえば、MFIが低下しているにもかかわらず価格がさらに安値を更新している場合、これは強い弱気トレンドと勢いの弱いMFIとのダイバージェンスを示します。逆に、価格が高値を更新しているのにMFIが下落している場合も、価格の上昇幅が縮小していることを示すため、これもダイバージェンスに該当します。以上を踏まえ、このパターンをMQL5で以下のように実装しています。

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()+1) > Low(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()+1) < High(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   return(false);
}

上記のリストから、今回はカラーコードは特に考慮していません。しかし、前述の通り、単に安値の切り下げを強気シグナルとして、高値の切り上げを弱気シグナルとして判断しています。そしてすでに述べたように、いずれの場合もMFIが低下している必要があります。前回のパターンと同様に最適化作業をおこなった結果、以下のように有望な入力値によるレポートが得られました。

r4

MFIの出来高コンポーネントは、このパターンにおける核心的な要素となっているようです。というのも、出来高の減少を伴うダイバージェンスは、しばしば反転シグナルを強めるため、理論上は説得力のある根拠となります。しかし、今回我々が検証しているのは、価格レンジがMFIの絶対値において低下している一方で、出来高が増加または一定であるというケースです。一見すると新しい試みに見えるかもしれませんが、上記のテスト結果は有望です。とはいえ、読者の方々は付属のソースコードを自由に改変し、MFIが上昇するシナリオ(高値更新・安値更新)における弱気および強気のセットアップについても実験することができます。

この「パターン4」は、しばしば他のビル・ウィリアムズ系インジケーター(たとえばAwesome OscillatorやAccelerator Oscillator)と組み合わせて使うことが推奨されています。さらに、価格構造(サポート/レジスタンスなど)との合流が見られると、このパターンの信頼性は大幅に高まります。。また、強いトレンド相場においては、ダイバージェンスが完全な反転ではなく、調整にとどまることが多い点にも注意が必要です。一方で、レンジ相場においては、MFIのダイバージェンスはより信頼性が高くなります。すでに述べたように、このパターンではストップロスの設定などの管理もより効率的に行うことが可能です。


ブレイクアウトシグナル(パターン5)

パターン5はパターン1に似ていますが、ここではブレイクアウトを狙うという点が異なります。したがって、非常にシンプルであり、MQL5での実装は以下の通りです。

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) < MA(X()+1) && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) > MA(X()+1) && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

上記のコードから明らかなように、このパターンを定義する際に移動平均線のクロスオーバー(MAクロス)に対するチェックを追加しただけです。上記のパターンで行ったのと同様の最適化実行から選択した入力設定を使ってテストを実行した結果、以下のレポートが得られました。

価格が重要なレベル(サポートまたはレジスタンス)を突破し、かつMFIの緑色のバーが伴う場合、これは有効なブレイクアウトを示すことが多いです。重要なサポート/レジスタンスレベルの厳密な定義は、裁定取引では自明であることが多い一方で、戦略を自動化する際にはそうとは限りません。そのため、このパターンを厳密に適用する場合は、銘柄ごとに調整をおこなうことが選択肢として考えられます。高確率のセットアップであるにもかかわらず、出来高のサポートが欠けている場合があり、それが偽の動きのリスクとなる可能性があります。

「出来高の欠如」は、本記事冒頭の導入部分で紹介したMFIの計算式に由来します。式の中で出来高の要素が分母にあるため、MFIが上昇し緑色のヒストグラムが出ても、出来高が比例して増加しているとは限りません。そのため、ボリンジャーバンドと組み合わせることで、出来高不足によるブレイクアウトの騙しのシグナルに対するある程度の保険をかけることが可能です。

また、フラクタルやRSIを使用することで、勢いがブレイクアウトやクロスオーバーと一致しているかを検証するのに役立ちます。


トレンド継続(パターン6)

パターン6は、パターン5の延長として機能しており、上記の1本のグリーンMFIバーに加えて、連続した2本の緑色のMFIバーを必要とします。この2本バーの条件は、強気・弱気の両セットアップを包含しています。さらに、強気パターンは終値が移動平均線(MA)を上抜けることで定義され、弱気パターンは終値が逆方向へ向かうことで示されます。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_6(ENUM_POSITION_TYPE T)
{  if(Color(X()+1) == clrGreen && Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) > MA(X()+1) && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) < MA(X()+1) && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

上記ですでに説明したパターンと同様の設定で最適化を実行すると、次のレポートが生成されます。

これはパターン5の単純な拡張であり、解釈に関する既に述べられた注意点やパターンの欠点を含む傾向があります。


レンジ取引のセットアップ(パターン7)

8番目で最後のパターンであるパターン7は、茶色のMFIのレンジ(保合い)局面を、RSIと組み合わせて活用しようとします。ここで「レンジ取引」と呼んでいるのは、上でパターン3でも述べたように、ボラティリティのブレイクアウトに備えるための方法です。MQL5の実装は次のとおりです。

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBrown)
   {  if(T == POSITION_TYPE_BUY && RSI(X()+1) <= 30.0 && RSI(X()) >= 30.0)
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && RSI(X()+1) >= 70.0 && RSI(X()) <= 70.0)
      {  return(true);
      }
   }
   return(false);
}

茶色のMFIバーを基準に、RSIが30以下から上に抜けてクローズした場合、強気のパターンを探します。同様に、RSIが70以上から下に抜けてクローズした場合は、弱気のパターンとして解釈されます。このパターンだけでテストをおこなう場合、使用するビットマップの入力値を128(2^7)に設定する必要があり、このパターンのみで最適化を実行した結果、以下のレポートが得られました。

r7

私は、トレーダーが一度に一つのパターンだけをテストし、その中から1つ(または最大で2つ)を選んでさらにテストや実運用に使う方が良いと主張してきました。すべてのパターンを一度にテストしようとすると、多くのパターン同士が互いに打ち消し合い、各パターンの真のパフォーマンスが見えにくくなり、ウォークフォワードテストが難しくなる可能性があります。それにもかかわらず、情報提供の目的で、すべてのパターンの閾値を最適化しながら、同時にテストターゲットを最大化するようなパターンのビットマップを探してみました。これを実施し、いくつかの最良設定から得られた結果を以下に示します。

r_oll

c_oll



結論

本連載の慣例に従い、私たちはビル・ウィリアムズのもう一つの指標であるMFIをパターンベースで検証しました。この指標はあまり一般的ではなく、またシグナルを生成するためには他のインジケーターと組み合わせて使う必要があるタイプですが、よく使われる指標とは異なる視点を提供し、新たな戦略を模索するトレーダーにとっては優位性をもたらす可能性があります。

ファイル名 説明
SignalWZ_53.mqh カスタムシグナルクラスファイル
wz_53.mq5 使用されたファイルを表示するヘッダーを備えた、ウィザードで組み立てられたEA

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

添付されたファイル |
SignalWZ_53.mqh (17.07 KB)
wz_53.mq5 (7.41 KB)
最後のコメント | ディスカッションに移動 (5)
Daniel Opoku
Daniel Opoku | 11 3月 2025 において 13:51

MFIについての見識をありがとう。もう一度見直してテストしてみます。この戦略をテストする際のリスク・リワード・レシオはどうでしたか?

.

Too Chee Ng
Too Chee Ng | 18 3月 2025 において 23:22
良い記事だ。ありがとう。
Too Chee Ng
Too Chee Ng | 11 4月 2025 において 11:22
//+------------------------------------------------------------------+
//| パターン4をチェックする。|
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()+1) > Low(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()+1) < High(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   return(false);
}
ハイライトされている
MFI(X()+1) > MFI(X()

は疑わしい(特に他のパターンのアルゴリズムと比較して)!!

そのうちの一つは

MFI(X()+1) < MFI(X()
Daniel Opoku
Daniel Opoku | 24 4月 2025 において 08:19
Too Chee Ng #:
以下について:ハイライトされた

は疑わしい(特に他のパターンのアルゴリズムと比較して)!!

そのうちのひとつは

MFI(X()+1) < MFI(X()

この条件を成立させるには、両方のケースにおいて 以前のMFIが 現在のMFIより 大きくなければならない。

MFI(X()+1) > MFI(X()

そのような場合、彼は測定している;

MFIの強さは低下しているが、弱気トレンドの下限は上昇している場合

 MFI(X()+1) > MFI(X()  &&  Low(X()+1) > Low(X()) 

MFI強度は低下しているが、強気トレンドでは高値を更新している

 MFI(X()+1) > MFI(X() &&  High(X()+1) < High(X()) 
参考になれば幸いである。
Too Chee Ng
Too Chee Ng | 29 4月 2025 において 09:18
Daniel Opoku #:

筆者が言いたいのは、この条件が成立するためには、どちらのケースでも 以前のMFIが 現在のMFIより 大きくなければならないということだ。

そのような場合、彼は測定している;

MFIの強さは低下しているが、弱気トレンドの下限は上昇している場合

MFI強度は低下しているが、強気トレンドでは高値を更新している

参考になれば幸いです。

ご説明ありがとうございます。

そうですね。

トレンドフォロー戦略のためのLSTMによるトレンド予測 トレンドフォロー戦略のためのLSTMによるトレンド予測
長・短期記憶(LSTM: Long Short-Term Memory)は、長期的な依存関係を捉える能力に優れ、勾配消失問題にも対処できる、時系列データ処理に特化した再帰型ニューラルネットワーク(RNN: Recurrent Neural Network)の一種です。本記事では、LSTMを活用して将来のトレンドを予測し、トレンドフォロー型戦略のパフォーマンスを向上させる方法について解説します。内容は、主要な概念と開発の背景の紹介、MetaTrader 5からのデータ取得、そのデータを用いたPythonでのモデル学習、学習済みモデルのMQL5への統合、そして統計的なバックテストに基づく結果の分析と今後の展望までを含みます。
MQL5での取引戦略の自動化(第5回):Adaptive Crossover RSI Trading Suite戦略の開発 MQL5での取引戦略の自動化(第5回):Adaptive Crossover RSI Trading Suite戦略の開発
この記事では、14期間および50期間の移動平均クロスオーバーをシグナルとして使用し、14期間RSIフィルターで確認するAdaptive Crossover RSI Trading Suiteシステムを開発します。本システムには取引日フィルター、注釈付きのシグナル矢印、監視用のリアルタイムダッシュボードが含まれており、このアプローチにより自動取引の精度と適応性が向上します。
プライスアクション分析ツールキットの開発(第11回):Heikin Ashi Signal EA プライスアクション分析ツールキットの開発(第11回):Heikin Ashi Signal EA
MQL5は、ユーザーの好みに合わせてカスタマイズ可能な自動売買システムを開発するための無限の可能性を提供します。複雑な数値計算も実行できることをご存知でしょうか。この記事では、自動売買戦略として日本の平均足手法を紹介します。
データサイエンスとML(第33回):MQL5におけるPandas DataFrame、ML使用のためのデータ収集が簡単に データサイエンスとML(第33回):MQL5におけるPandas DataFrame、ML使用のためのデータ収集が簡単に
機械学習モデルを使用する際は、学習・検証・テストに使用するデータの一貫性を確保することが重要です。この記事では、MQL5の外部(多くの学習がおこなわれる環境)とMQL5内部の両方で同じデータを利用できるようにするため、MQL5で独自のPandasライブラリを作成します。