English
preview
知っておくべきMQL5ウィザードのテクニック(第71回):MACDとOBVのパターンの使用

知っておくべきMQL5ウィザードのテクニック(第71回):MACDとOBVのパターンの使用

MetaTrader 5トレーディングシステム |
18 0
Stephen Njuki
Stephen Njuki

はじめに

移動平均収束拡散法(MACD)オシレーターはトレンドを追跡するオシレーターであり、オンバランスボリューム(OBV)オシレーターと組み合わせて使用します。これら2つは、一方がトレンドを確認し、もう一方が出来高を測定するため、相互に補完し合います。テストはGBP/JPYを対象に、2023年を学習(最適化)期間、2024年をフォワードウォーク検証の期間として実施します。2023年の「学習」または最適化においては、理想的なパターンシグナルの重みを探索するだけでなく、エントリー時の価格ギャップやテイクプロフィット目標も追求します。なお、ストップロスは一切使用せず、カスタムシグナルクラスのクローズ閾値重みにのみ依存して、建玉が当初の仮説に沿わなくなった場合にポジションをクローズする仕組みとしています。

以下に示すテストレポートは、概ね利益を示していますが、必ずしもフォワードウォークが成功していることを意味するものではありません。なぜなら、テスト期間にはEAが最適化された期間も含まれているためです。 このアプローチはこれまで一貫して使用しており、今後も継続する予定です。そのため、非常に短いテスト期間であることとあわせて、この点を考慮して結果を解釈していただく必要があります。 

テストでは10種類のシグナルパターンを1つずつ検証しています。ルールは以下のとおりです。

インデックスは0から9まで割り当てており、EAが利用するマップ値を計算しやすくしています。たとえばインデックスが1の場合、パラメータPatternsUsedを2¹=2に設定します。インデックスが4の場合は2⁴=16です。同様に続きます。パターンは10個しか存在しないため、このパラメータに意味を持って設定できる最大値は1023です。0〜1023の値のうち、2の累乗ではない数値は複数のパターンを組み合わせたものを表します。


MACD

MACDは2つの指数移動平均線の差を測定するための指標です。主にトレンド方向を示しますが、モメンタムを追跡しているとも解釈できます。MACDライン(ヒストグラムとも呼ばれる)がこのインジケーターの中核です。さらに「シグナルライン」と呼ばれる追加バッファは、MACDライン(ヒストグラム)を平滑化したものに過ぎません。これはインジケーターの転換点を見つけやすくし、売買シグナルを示す助けとなります。ヒストグラムの値が正であれば強気トレンドを、負であれば弱気トレンドを示します。 

このインジケーターの利用方法としては、ヒストグラムとシグナルラインのクロスオーバー(主要な売買シグナル)、ヒストグラムのゼロライン交差(トレンド転換の示唆)、価格トレンドとヒストグラムのトレンドの乖離などがあります。典型的な設定値は、短期EMA期間を12、長期EMA期間を26とし、シグナルラインの平滑化期間を9とするものです。本テストにおいてはこれらのデフォルト設定を使用していますが、必要に応じて調整することも可能です。特に、MACDを他のインジケーターと組み合わせて使用する場合、異なるが重要な期間設定を持つ場合には検討の余地があります。その計算式は以下の通りです。

もし


であれば、次が成り立ちます。

ここで

  • tは現在の時間ステップまたはバーインデックス
  • EMA12(t)は終値に基づく12期間の指数移動平均
  • EMA26(t)は終値に基づく26期間の指数移動平均
  • MACD(t)は短期EMAと長期EMAの差
  • EMA9(MACD(t))はMACDの9期間指数移動平均(シグナルライン)


OBV

このオシレーターの主な目的は、累積的な出来高を考慮することで売り買いの圧力を測定することです。その基本的な考え方は、価格が前日より高く引けた場合、それは強気の圧力の兆候であり、その分の出来高がOBVに加算されるというものです。逆に価格が下落して引けた場合は、その出来高が差し引かれます。価格に変化がなければ、インジケーターは変化しません。したがって解釈は比較的シンプルで、OBVが上昇していれば上昇トレンドを確認し、下降していれば弱気トレンドを示すというものです。また、OBVと価格の間に乖離が見られる場合は、トレンド反転の可能性を示すこともあります。

OBVは本質的に累積型であり、通常はゼロから始まり、その後時間の経過とともに出来高の変化を積み上げていきます。FXトレーダーの場合、この累積に用いられる出来高は「ティックボリューム」であり、現物の出来高ではありません。これはFX取引が「非中央集権的(分散型)」であることに起因します。トレーダーにとっての主な利用方法は、トレンドの確認、乖離の検出、そして出来高水準に基づくエントリーやイグジットの精度向上です。このインジケーターの数式は次のとおりです。

ここで

  • OBV(t)は時刻tにおけるオンバランスボリューム
  • OBV(t-1)は直前の時刻におけるオンバランスボリューム
  • Vtは時刻tにおける出来高
  • Ctは時刻tにおける終値

インジケーターの定義が完了したので、次にシグナルパターンを見ていきます。


MACDクロスオーバーとトレンドOBV(Pattern_0)

最初のパターンは、MACDのクロスオーバーとOBVのトレンド方向を組み合わせた戦略です。MACDクロスオーバーは潜在的なトレンド反転を見つけるうえで重要です。OBVトレンド方向は出来高に基づく確認として機能し、MACDのダマしシグナルをフィルタリングします。強気シグナルは、MACDがUターンしてヒストグラムがシグナルラインを上抜けして確定する際に発生します。直前のバーでヒストグラムがシグナルの下にあった場合に成立します。同時にOBVが上昇していれば、出来高が強気方向に積み上がっていることを示し、ロングの根拠が強化されます。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD_UP(X()) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD_DN(X()) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

売りシグナルのロジックもクロスオーバーであり、MACDがシグナルラインを下抜けした場合(直前のバーでシグナルの上にあった場合)に発生します。これは弱気クロスオーバーです。このときOBVが下降していれば、出来高の分布がネガティブであることを示し、ショートの根拠を強化します。このパターンはトレンド/ブレイクアウト相場でモメンタムと出来高に裏付けられたセットアップを見つけることを目的としています。また、出来高を利用することでレンジ/横ばい相場におけるMACDのノイズをフィルタリングすることもできます。

注意すべきエッジケースとして、出来高が少ないセッションではOBVが誤った方向を示す可能性があります。またMACDは急激な反転局面では遅れることがあり、その場合エントリーが遅れるリスクがあります。2023年を最適化対象とし、2023.01.01から2025.01.01までのテストをこのパターンのみで実施した結果(PatternsUsedパラメータを1に設定)、以下のレポートが得られました。このパターンはフォワードウォークに対して有効ではありませんでした。

r0

以下は、使用時の推奨事項を表形式でまとめたものです。

側面

推奨事項

時間足

1時間〜4時間足が最も有効。分足での使用は上位時間足のインジケーターと組み合わせない限り避けるべき。

インジケーターの設定

MACDは(12,26,9)の典型設定を推奨。OBVについては可能であれば実出来高データを使用。

エントリールール

エントリーは基本的にローソク足確定時におこない、特に短期足でのローソク途中でのエントリーは避ける。

ストップロス

直近スイング高値/安値に設定可能。ATRを利用して動的に設定することも有効。

テイクプロフィット

リスクリワード1:1.5を目安にトレーリングストップを設定し利益を確保。

確認

追加の確認用インジケーターとしてRSIや移動平均の傾きが考えられる。

ニュースフィルター

影響の大きいニュース前のエントリーは可能な限り回避する。

バックテスト

出来高構造に大きく依存するため、広範なバックテストが不可欠。

上記推奨事項に加えて、さらなる改良も可能です。例として、ダイバージェンスフィルターを追加する(ただしこれは別のパターンで検討)、また、クールダウン期間やデバウンス期間を設け、連続的にシグナルが出ないよう制御することも考えられます。たとえば「x本のローソクにつき1回のシグナルのみ許可」といった形です。最後に、シグナル発生時にMACDやOBVが横ばい状態でないことを確認するため、傾きや変化率を条件に追加する方法も有効です。


MACDセンターラインクロスオーバー+OBVブレイクアウト(Pattern_1)

次のパターンは、OBVで記録された出来高圧力の極端値をフィルターとして用いたMACDゼロライン交差を検知することを目的としています。この組み合わせは、ロングまたはショートの出来高状況に裏付けられた初期のトレンド反転を示します。買いシグナルはMACDヒストグラムがゼロラインを下から上にクロスし、その上で確定したときに発生します。これは「強気ゼロラインクロスオーバー」とも呼ばれ、ヒストグラムが負の値から正の値に変わる局面を意味し、モメンタムのシフトを示します。

MACDはこのシグナルを頻繁に発するため、OBVのチェックが重要です。具体的には、OBVがMACDの短期期間(12)に遡って算出した最高値と同等以上であることを確認する必要があります。言い換えると、現在のOBVが過去12期間の最大値以上でなければなりません。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_1(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_obv.Refresh(-1);
   if(T == POSITION_TYPE_BUY && MACD(X()) > 0.0 && MACD(X() + 1) < 0.0 && OBV(X()) >= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < 0.0 && MACD(X() + 1) > 0.0 && OBV(X()) <= m_obv.MinValue(0, X(), 12, _index))
   {  return(true);
   }
   return(false);
}

同様に、売りシグナル条件はMACDがゼロラインを上から下にクロスし、その下で確定したときに発生します。これはモメンタムが正から負へ移行する局面です。このときOBVも底打ちしており、現在のOBVが過去12期間の最小値以下である必要があります。これは強い売り圧力の兆候です。この戦略から得られる洞察としては、MACDのゼロライン交差はシグナルライン交差よりも強力であり、それが純粋な方向性のシフトを表す点にあります。さらに、OBVのレンジフィルタリングは、出来高が単に方向を持つだけでなく十分に大きいことを確認することで有効性を高めます。そして、この組み合わせはブレイクアウトやスイングといった新しいトレンドの初期段階におけるエントリーポイントを早期に捉えるよう設計されています。このパターンのテスト結果は以下のとおりです。このパターンはフォワードウォークに対して有効ではありませんでした。

r1

以下は、使用時の推奨事項を表形式でまとめたものです。

側面

推奨事項

時間足

1時間足、4時間足、日足に最適。低時間足ではダマしシグナルが多発するため不向き。

相場環境

トレンド反転局面や初期トレンド形成局面に有効。レンジの狭い相場には不適。

ストップロス戦略

ロングの場合は直近のスイングロー、ショートの場合は直近のスイングハイを使用し、動的に設定する。

ポジションサイズ

初期シグナルは一時的な場合が多いため、段階的かつ漸進的に建てることを推奨。

確認

RSIや移動平均の傾きを追加で確認指標とすることで、より精度の高いエントリーが可能。

過学習回避

OBVの期間(ここでは12)は短く保つことでダイナミックさを維持する。

ニュースフィルター

影響の大きいニュースは出来高を歪める可能性があるため、発表の30分前後のエントリーは避ける。

バックテストウィンドウ

出来高依存度が高いため、異なるボラティリティ環境でのテストが重要。


MACDダイバージェンス + OBV上昇トレンド(Pattern_2)

3つ目のパターンは、MACDの方向性とOBVの出来高圧力で価格の反発を確認することで、小規模な強気・弱気の反転を検出します。ここで注目するのは絶対値ではなく、前回との相対変化です(Pattern_1で扱った内容と同様です)。買いシグナル条件は、価格が安値を更新(低い安値を形成)し、MACDヒストグラムが上昇し、かつOBVの出来高圧力が増加することです。これら3つの指標が揃うことで、強気ダイバージェンスのシナリオが形成されます。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()) < Low(X() + 1) && MACD(X()) > MACD(X() + 1) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()) > High(X() + 1) && MACD(X()) < MACD(X() + 1) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

同様に、売りシグナル条件は、価格が高値を更新(高い高値を形成)し、MACDが低下(強気の勢いが弱まる)し、OBVが低下することです。繰り返しになりますが、価格が高値を更新しても、勢いと出来高が伴わない場合、弱気ダイバージェンスとして判断されます。このパターンからいくつかの取引上の知見を得ることができます。まず、このパターンは短期的な反転の力尽きサインであり、出来高とモメンタムの確認を単純に利用しています。次に、トレンドの一時的な停滞ゾーン、たとえばエリオット波の第3波や重要なサポート・レジスタンス付近で有効です。また、フェードトレードや平均回帰型のセットアップに最適です。テストでは、このパターン単独では必ずしもポジティブなフォワードウォークの結果を示していません。以下はレポートです。

r2

使用に関する推奨事項のリストを以下に記載します。

側面

推奨事項

時間足

短期反転トレードには30分足や1時間足が適しており、スイングセットアップでは日足が有効です。

シグナルの文脈

直近の高値・安値や重要なサポート・レジスタンスゾーン付近で活用するのが最も効果的です。 

確認ローソク足

ハンマーや流れ星などの逆転ローソク足を待つことで、エントリーの精度を高めることができます。

ストップロス戦略

ロングの場合は直近安値の下、ショートの場合は直近高値の上に設定します。

利益目標

エントリーポイントに応じて、チャネル中間や直近の構造レベルで設定可能です。

トレンド中の注意点

これは逆トレンドシグナルなので、強いトレンド中での逆張りは避けるべきです。

RSIとの併用

RSIのダイバージェンスと組み合わせることで、エントリー精度をさらに高められます。

ボラティリティの高い資産のバックテスト

主にコモディティや一部のコモディティ連動指数に適しています。


MACDヒストグラム反転 + OBVサポート(Pattern_3)

4つ目のシグナルパターンは、MACDモメンタムの一時的な調整後に短期的なトレンド継続を捉えることを目的としています。モメンタムの押し戻しがOBVの方向性で確認されることに注目しています。買いシグナル条件は、MACDヒストグラムが前回の値よりも増加しており、前回の値もその前のMACDより低い場合です。このときOBVは上昇しています。この強気の継続パターンは、モメンタムの一時的な下落と回復を示し、出来高が回復を支えていることを確認できる、典型的なトレンド継続のサインです。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X()) > MACD(X() + 1) && MACD(X() + 1) < MACD(X() + 2) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < MACD(X() + 1) && MACD(X() + 1) > MACD(X() + 2) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

逆に、売りシグナル条件は、MACDが下落しており、前のバーではMACDが上昇していた場合で、OBVが売り圧力によって低下しているときです。この弱気パターンは、下降トレンド中の短期的な強気の押し戻しが抑えられ、再び売り勢力が支配したことを示唆します。このパターンから得られる知見は、トレンド方向への戻りを捉えるものであり、トレンドフォロワーやスキャルパーに有用です。ブレイクアウトではなく、トレンド再開時のエントリーを狙います。トレンドが明確で値動きの乱れが少ない相場で効果的です。ただし、フォワードウォークではプラスの結果は出ていません。そのテストレポートは以下のとおりです。

r3

以下に、このパターンを微調整する際の追加の利用推奨事項を示します。基本的には単独で使用することが推奨されます。

側面

推奨事項

時間足

15分足から1時間足のトレンドフォローシステムに適しています

相場環境

確立した方向性のある相場で適用すべきであり、レンジ相場は避けます。

エントリータイミング

丸坊主や包み足など、明確なローソク足形成を待つことが望ましいです。

SL/TP戦略

ストップロスは押し戻しレベルの少し先に設定し、利益目標はこのストップ距離の倍程度を目安にします。

出来高フィルター

OBVの上昇・下降が平坦ではなく、十分な動きがあることを確認すると長期的に有効です。

繰り返し使用の注意

トレンドがない状態でパターンが繰り返される場合の再エントリーは避けます。

MAフィルターとの併用

補助フィルターとしてEMAを使い、トレンド確認に役立てます。

ボラティリティフィルター

ATRやボリンジャーバンドを用いてトレンドの強さを測ることも有効です。


MACDの保ち合い + OBVの急上昇(Pattern_4)

5つ目は、ゼロライン付近でのMACDホバーを検知し、OBV方向のブレイクアウトと組み合わせて機能するシグナルです。MACDが中立状態にある期間、つまり強気と弱気のバランスが取れている状態を特定し、その後に出来高主導の大きなブレイクアウトが発生したかどうかを確認します。  買いシグナルの解釈は、MACDがゼロ付近で狭いレンジ内で山と谷を形成した場合です。この状態を確認した後、OBVが前回値より少なくとも0.5%以上上昇しているかどうかを確認します。このパターンは、保ち合い後にスマートマネーの蓄積によって価格が上昇し始める可能性を示唆しています。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_4(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_macd.Refresh(-1);
   if(m_macd.MaxValue(0, X(), 3, _index) >= 0.0 && m_macd.MinValue(0, X(), 3, _index) <= 0.0)// && fabs(m_macd.MinValue(0, X(), 3, _index) - m_macd.MaxValue(0, X(), 3, _index)) <= High(X()) - Low(X()))
   {  if(T == POSITION_TYPE_BUY && OBV(X()) >= 1.005 * OBV(X() + 1))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && OBV(X()) <= 0.995 * OBV(X() + 1))
      {  return(true);
      }
   }
   return(false);
}

売りシグナルも買いと同様に、MACDがゼロ付近でトレンドの明確な方向性を示さない場合に成立します。その後、OBVが前回値より0.5%低下することが、強い売り圧力の兆候となります。これらの事象は、レンジ内での下落の前兆と解釈されます。このパターンの特徴は、出来高確認によるラグがあるため、低遅延でトリガーされる点にあります。また、シグナルが少ないため、価格のみのブレイクアウトシステムにおけるフェイクアウトを回避しやすい利点があります。テストでは、取引回数は少なく、フォワードウォークではプラスの結果は出ていません。

r4

以下に、このパターンの利用推奨事項を示します。

側面

推奨事項

相場環境

ブレイクアウト前の保ち合い相場で有効です。

時間足

より「クリーン」なシグナルを得るために、1時間足から4時間足が適しています。

確認

ローソク足ブレイクアウトやボリンジャーバンドの拡張と組み合わせて使用可能です。

出来高の品質

OBVが平坦でノイズが多くないことを確認することが重要です。滑らかなトレンドが望ましいです。

リスク管理

ストップロスはレンジの安値付近(買いの場合)や高値付近(売りの場合)に設定します。

ボラティリティフィルター

ATRや価格圧縮ロジックを併用することで、レンジの特定に役立ちます。


MACDゼロ付近 + OBVラリー(Pattern_5)

次に紹介するのは、出来高を伴ったカウンタートレンドのシグナルパターンです。このパターンの特徴は、MACDが価格トレンドと逆方向に動き、そのゼロ付近の位置が考慮される点です。また、OBVが動きを支持していることを確認する必要があります。このパターンは、MACDヒストグラムが依然として反対側にあることを踏まえつつ、早期のモメンタム変化を捉えることを目的としています。買いシグナルは、MACDが上昇していることです。これはロングのモメンタムが増している兆候ですが、値がゼロ未満である点に注意が必要です。これは市場が依然として弱気相場にあることを意味します。一方、OBVが上昇している場合は、買い手が蓄積していることを示しています。このことから、弱気の文脈の中での強気の回復と解釈できます。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X()) > MACD(X() + 1) && MACD(X()) < 0.0 && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < MACD(X() + 1) && MACD(X()) > 0.0 && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

売りシグナル(カウンターブリッシュ)は、MACDが下降している一方で正の領域にあり、OBVも減少している場合です。これは、強気相場における弱気のフェードと解釈できます。このパターンは、出来高を根拠に慎重に早期の反転を狙う設計で、完全なクロスオーバーは必要ありません。他の手法と組み合わせて使用することも可能です。ただし、限られたテストでは将来のフォワードウォークは確認されていません。その結果は以下の通りです。

r5

局面

推奨事項

時間足

H1や4時間足でも機能しますが、日足はノイズを避け、より明確なトレンド状況を示します。

出来高フィルター

OBVが横ばいの場合に必要となることがあります。

変動の激しい相場は回避

本パターンは、非常にボラティリティの高い相場には適していません。

トレンドフィルターとの併用

MAやADXを用いてトレンド状況を確認することが推奨されます。

エントリータイミング

ローソク足の確認や、重要な安値・高値を突破したタイミングでのエントリーが望ましいです。

取引管理

反転狙いの性質上、タイトなストップロスや部分決済を用いると安全です。


MACDがゼロラインに沿った安定トレンド + OBV極値(Pattern_6)

7つ目のパターンは、トレンドと出来高のクライマックス検出パターンです。このパターンは、MACDがゼロラインの片側に張り付いて強いトレンドを示す局面を見つけ、それをOBVの出来高ピークと組み合わせます。目的はトレンドの継続を捉えることです。買いシグナルは、MACDが12本のローソク足で正の値を維持しているときに、同時にOBVが12本の高値近くかそれ以上である場合に登録されます。これは、買い手が積極的にポジションを積み上げていることを意味し、市場が安定した強気モメンタムにあると解釈できます。ボリュームがトレンド継続を示唆している状態です。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_6(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_macd.Refresh(-1);
   m_obv.Refresh(-1);
   if(T == POSITION_TYPE_BUY && m_macd.MinValue(0, X(), 12, _index) > 0.0 && OBV(X()) >= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && m_macd.MinValue(0, X(), 12, _index) < 0.0 && OBV(X()) <= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   return(false);
}

売りシグナルはその逆です。MACDが12本以上ゼロ以下で推移し、OBVも12本の安値近くかそれ以下のときに発生します。これは市場が安定した弱気状態にあることを示し、OBVが出来高を伴って売り手が価格を押し下げていることを確認できます。このパターンはフォワードテストでも成功しませんでした。この指標ペアリングで失敗したパターンはこれで合計7つとなります。レポートは以下の通りです。

r6

パターン使用に関する推奨事項も以下に示します。

局面

推奨事項

トレンド市場での使用

強い方向性のあるトレンド市場で使用します。レンジ相場やフラット市場では使用を避けてください。

モメンタムの強さ

任意のフィルターとしてADXを使い、25以上であることを条件にするとより安全です。

プライスアクションとの組み合わせ

ブレイクアウトキャンドル、インサイドバー、またはS/Rゾーンでのピンバー反発を考慮できます。

ボリュームの有効期限

OBVは安定した傾きで、極端に尖ったりフラットなパターンがないことが望ましいです。

エグジット戦略

トレーリングストップやフィボナッチエクステンションでの利確も考えられます。


MACD隠れダイバージェンス+OBV極値(Pattern_7)

8つ目のシグナルパターンは、買いの特徴が価格の安値の下落、MACDの上昇、OBVの上昇傾向によって決まります。これは、価格は十分に下がらなかったものの、出来高は増加しており、MACDによって示されるように強気のモメンタムが働いていたと解釈できます。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()) > Low(X() + 1) && MACD(X()) < MACD(X() + 1) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()) < High(X() + 1) && MACD(X()) > MACD(X() + 1) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

売りのセットアップは逆に、高値が上昇し、MACDが下落、OBVも下落します。買い同様に、隠れダイバージェンスを示します。10個のシグナルパターンの中で、このパターンだけがフォワードテストで利益を上げています。そのテストレポートを以下に共有します。

r7

このパターンをさらに微調整または改善するための推奨事項も以下に示します。

局面

ベストプラクティス

構造で確認

トレンドライン、サポート/レジスタンス、フィボナッチゾーンでトレードを開くとパターンを鋭くできます。

他のシグナルと組み合わせ

RSIダイバージェンスやハンマー、包み足などのローソク足の反転パターンを組み合わせると不利な値動きを最小化できます。

強いトレンドでは避ける

このパターンはトレンドフォロー型ではないため、スキャルパーは避けるべきです。

ストップロスを賢く使う

ストップロスを直近のスイング高値/安値の外に置くことで、短期的な反応を想定し、長期的なトレンド変化ではないと見なすことができます。


MACDシグナルクロスオーバーとOBVサポート(Pattern_8)

最後から2つ目のシグナルパターンは、MACDがUターンして上向きになり、0以上になったときに買い条件が満たされます。これに加えて、OBVがポジティブな出来高の流れを示している場合も同様です。これは出来高の拡大によって確認される、強気のモメンタムの変化を意味します。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_8(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X() + 1) > 0.0 && MACD_UP(X())  && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X() + 1) < 0.0 && MACD_DN(X())  && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

売りシグナルは、MACDがベア領域、すなわち0以下でnターンして下向きになったときに発生します。OBVも売り圧力によって下落している状態です。残念ながら、このパターンもこの記事で紹介したほとんどのパターンと同様に、フォワードテストでは利益を上げることができませんでした。テストレポートは以下に示します。

r8

パフォーマンス改善のために取れる可能性のある対策は、以下の表にまとめました。

注目領域

提案

エントリータイミング

MACDクロスオーバー直後にOBVが同意している場合のみ取引します。遅れを避けます。

出来高検証

OBVがクロスオーバーと矛盾したり、ずれてはいけません。フラットまたは乖離しているOBVは避けます。

価格体系との組み合わせ

多くのシグナルと同様、このパターンは主要なサポート/レジスタンスレベルでより有効です。

レンジ回避

横ばい市場では、OBV確認があってもMACDクロスオーバーはノイズになりやすいです。トレンド資産で取引します。

ストップ配置

ATRや直近のローソク足の高値/安値を用いて動的なストップロスを設定します。パターンはトレンドの開始を示唆しており、単なる反発ではありません。


MACDゼロラインクロスとOBV急騰(Pattern_9)

最後のパターン、パターン9は、トレンド反転のシグナルで、新しいトレンドの始まりを捉えようとするものです。トレンド変化の直後に早めにエントリーすることで、利益の最大化を狙いますが、常に逆行リスクには注意する必要があります。買いシグナルは、MACDがゼロを下から上にクロスし、Uターン中にゼロ以上でクローズした場合に発生します。OBVも同時に5%以上上昇していることが条件です。これをMQL5で以下のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 9.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_9(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X() + 1) < 0.0 && MACD(X()) > 0.0 && MACD_UP(X())  && OBV(X()) >= 1.005 * OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X() + 1) > 0.0 && MACD(X()) < 0.0 && MACD_UP(X())  && OBV(X()) <= 0.995 * OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

買いパターンと逆の売りパターンでは、MACDがゼロを上から下にクロスしてnターンでクローズします。OBVも同時に大幅に下落します。この閾値として5%を使用していますが、市場によっては異なる値を試すことも可能です。残念ながら、2年間という短期のテスト期間では、このパターンもフォワードテストで利益を上げることはできませんでした。テストレポートは以下に示します。

r9

このパターンは、以下の方法で改善できる可能性があります。他の9つのパターンと同様の議論が当てはまります。

側面 ベストプラクティス

資産選択

日々の取引量が多い銘柄での使用が最適です。主要なFX通貨ペア、株価指数、流動性の高い株式や暗号資産などが対象です。

相場環境

横ばい市場では、MACDゼロラインクロスが多くの偽シグナルを生む可能性があります。ADXなどのトレンド指標との組み合わせが有効です。

出来高の閾値

OBVフィルター(例:0.5%)は市場に応じて調整可能です。暗号資産のようにボラティリティの高い資産では高い閾値を採用できます。

取引管理

ATRやスイング高値/安値に基づく動的なストップロスを設定できます。リスクリワード比(例:1:2)に基づく初期利確も検討可能です。

ノイズのフィルタリング

信頼性向上のため、他のシグナルパターンと同様にローソク足の確認と組み合わせることが有効です。



結論

この記事では、トレンド指標と出来高指標のペアリングを導入しましたが、テスト結果は芳しくありませんでした。テストデータを50-50に分割してのフォワードウォークは、今回のようにテストデータ期間が非常に短い場合には常に厳しいものです。しかし、過去に検討した他の指標ペアリングと比較すると、今回の結果は明らかに劣っていました。通常、指標ペアリングの導入後は、教師あり学習の応用をおこないます。そして、前回の反復結果に基づき、フォワードウォークに失敗したパターンを検討することになったため、次回の記事では選択肢に事欠くことはありません。


名前 説明
WZ-71.mq5 ヘッダには使用されたファイルが記載されているMQL5ウィザードで作成されたEA
SignalWZ-71.mqh インジケーターペアリングのカスタムシグナルクラスファイル

添付ファイルは、MQL5ウィザードを使ってEAとして組み立てることを目的としています。新しい読者向けの組み立て方法のガイドはこちらです。

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

添付されたファイル |
SignalWZ_71.mqh (19.94 KB)
WZ-71.mq5 (7.94 KB)
ログレコードをマスターする(第8回):自己翻訳するエラーレコード ログレコードをマスターする(第8回):自己翻訳するエラーレコード
「ログレコードをマスターする」第8回では、MQL5向けの強力なログライブラリであるLogifyにおける多言語エラーメッセージの実装について探っていきます。本記事では、コンテキストを含めたエラー構造の作り方、メッセージを複数言語に翻訳する方法、そして重大度レベルに応じたログの動的フォーマット方法について学びます。これらはすべて、クリーンで拡張可能であり、本番環境でも利用可能な設計にします。
MQL5 Algo Forgeへの移行(第3回):外部コードを自分のプロジェクトに統合する MQL5 Algo Forgeへの移行(第3回):外部コードを自分のプロジェクトに統合する
MQL5 Algo Forgeストレージにある任意のリポジトリから外部コードを自分のプロジェクトへ統合する方法を見ていきましょう。本記事ではいよいよ、有望でありながらもより複雑な課題に踏み込みます。すなわち、MQL5 Algo Forge内のサードパーティ製リポジトリからライブラリを実際に接続し、活用する方法についてです。
初心者からエキスパートへ:MQL5を使ったアニメーションニュース見出し(II) 初心者からエキスパートへ:MQL5を使ったアニメーションニュース見出し(II)
本日は、外部ニュースAPIを統合し、News Headline EAの見出し取得元として活用する新たなステップに進みます。このフェーズでは、既存の大手ニュースソースから新興の情報源まで幅広く取り上げ、それぞれのAPIに効果的にアクセスする方法を学びます。さらに、取得したデータをパースし、エキスパートアドバイザー(EA)内での表示に最適化された形式へ変換する手法についても解説します。ニュース見出しや経済指標カレンダーをチャート上に直接表示できることには、大きなメリットがあります。コンパクトで邪魔にならないインターフェースを通じて、取引中でも効率的に情報を確認できるようになるのです。
初心者からエキスパートへ:MQL5を使ったアニメーションニュース見出し(I) 初心者からエキスパートへ:MQL5を使ったアニメーションニュース見出し(I)
MetaTrader 5ターミナルでの取引において、ニュースのアクセス性は非常に重要な要素です。数多くのニュースAPIが存在するものの、多くのトレーダーはそれらを効果的に取引環境に統合することに課題を抱えています。本記事では、ニュースを最も必要とする場所であるチャート上に直接表示する、効率的なソリューションの構築を目指します。その実現のために、APIソースからのリアルタイムニュースを監視し、表示するNews Headline EA(エキスパートアドバイザー)を作成します。