English
preview
プライスアクション分析ツールキットの開発(第48回):加重バイアスダッシュボードを備えた多時間軸ハーモニー指数

プライスアクション分析ツールキットの開発(第48回):加重バイアスダッシュボードを備えた多時間軸ハーモニー指数

MetaTrader 5 |
9 3
Christian Benjamin
Christian Benjamin

内容


はじめに

プライスアクショントレーダーとして、私たちは市場の構造的な明確さに依存しています。エントリーする前に、異なる時間軸での市場の動きを理解することが不可欠です。しかし、多時間軸分析における永続的な課題のひとつは、各時間軸間で一貫性を保つことです。たとえば、H4では強気に見えるチャートが、H1では迷いを示し、M15では完全に反転している場合、トレーダーはトレンド傾向の矛盾に直面し、自信を持てなくなります。  

連載第48回では、この課題を解決するために「多時間軸ハーモニー指数(HI)」を開発しました。HIは、複数の時間軸間の合意水準を数学的に表現し、単一の正規化された値として出力します。複数の構造的トレンド傾向をまとめて表示することで、トレーダーはダッシュボード上で、市場が「調和しているか」あるいは「不協和か」を一目で把握できます。 

本記事では、HIの概念的な基礎、三本足構造ロジックに基づく検出アルゴリズム、各時間軸の寄与を加重および平滑化する方法、さらに実際の取引に活用できる操作機能について解説します。HIの多層設計は、裁量トレーダー向けの視覚的ツールであると同時に、MetaTrader 5上のアルゴリズムシステム用の定量的フィルタとしても機能します。本記事を読み終える頃には、HIを実装し、色分けされたダッシュボード、アラート、シグナルマーカーを正しく解釈して、多時間軸環境でより正確かつ自信を持って判断できるようになるでしょう。


概念とアルゴリズム

多時間軸のプライスアクショントレードにおける課題は、個別チャート上のトレンドを正確に把握し、それらのシグナルを統合して統一された方向性バイアスを導くことにあります。M15やH1のような下位時間軸は、細かい値動きや早期エントリーの手がかりを捉えるのに不可欠です。一方、H4やD1のような上位時間軸は、支配的なトレンドや重要な構造レベルを定義します。しかし、相場が急速に動く場合、これらの時間軸はしばしば方向性が一致しません。合意水準を数値化する体系的な手法がなければ、トレーダーは主観的で時間のかかる判断を強いられます。多時間軸ハーモニー指数(HI)は、この問題に対処するため、各時間軸の構造的バイアスを–1.0~+1.0の単一の正規化された数値に集約します。リアルタイムで計算されるこの指標により、意思決定が簡略化され、ダッシュボードで視覚的に把握できるほか、アラートや自動シグナル生成も可能になります。

バイアス検出ロジック

バイアスの検出はGetStructureBias()関数から始まります。各有効な時間軸について、直近の確定足を3本確認します。

3バー階段ルール


厳格な階段条件が満たされない場合は、終値ルールにフォールバックします。

最後に、両方の条件が失敗する、またはデータが不完全な場合は、直近2本の終値の比較によりバイアスを判定します。この多層的アプローチにより、明確で持続的なトレンドは厳格ルールで認識され、微妙なバイアス変化も終値ベースのフォールバックで検出されます。未確定足に依存せず、高ボラティリティ環境での誤った中立判定を減らせます。

HIの加重計算

各時間軸のバイアス値(+1+1+1 = 強気、000 = 中立、−1−1−1 = 弱気)が計算されたら、HIは以下のように加重集計されます。

ここで、weight(i)はユーザー定義の時間軸の重要度です。集計結果は [–1.0, +1.0]に正規化され、加重の大小に関わらずスケールが一貫します。

たとえば、次の場合を考えてみましょう。

  • M15:バイアス = +1、重み = 0.10 → 貢献度 = +0.10
  • H1:バイアス = +1、重み = 0.20 → 貢献度 = +0.20
  • H4:バイアス = 0、重み = 0.30 → 貢献度 = 0.00
  • D1:バイアス = +1、重み = 0.40 → 貢献度 = +0.40

WeightedSum = 0.10+0.20+0.00+0.40 = 0.70、TotalWeight = 1.0

  • ハーモニー指数(HI) = (0.70/1.0) = 0.70

HIが0.70であることは、上昇方向への合意水準が比較的高い状態を示しており、強いバイアスの閾値を0.8に設定した場合、その直下に位置します。

HIのEMA平滑化

特に短期足では、市場状況によりHIの値が急激に変動することがあります。シグナルのノイズを抑えるため、HIでは指数移動平均(EMA)による平滑化を適用します。

EMAによる平滑化により、より滑らかなトレンドバイアスの読み取りが可能になります。

  • 短期間のEMA → 反応が早く、スキャルピング向きです。
  • 長期間のEMA → より安定し、スイングトレードに適しています。

EMA平滑化は、ホイップソー(だまし)シグナルを低減し、閾値を超えた際の信頼性を高めます。

閾値ベースの状態分類

HIは正確な数値を生成しますが、その数値を実践的な取引判断に変換するには、明確な分類ルールが必要です。生の小数値は分析者にとって有益ですが、チャート上では瞬時に意味を伝える必要があります。そのため、HIでは、強気と弱気の両方に対して「強い判定状態」と「中程度の判定状態」を定義する2層の閾値システムを適用します。

StrongThresholdは、有効化された複数の時間足で合意水準が高い信頼度に達したことを示します。たとえば、StrongThresholdを0.8に設定した場合、指数がこの値を超えるには、ほとんどの加重時間足が明確に同じ方向に揃う必要があります。これは、多時間軸の整合性が非常に高く、多くのトレーダーが積極的なポジションを取ることが妥当な市場環境であることを示しています。ModerateThresholdはStrongThresholdより低く設定され、たとえば0.4です。中程度の合意水準を示し、バイアスの方向性が形成されつつあるが、まだ高い確信度には達していない状況を特定します。  

数学的には、この分類ロジックは以下のように表現されます。

チャートダッシュボード上では、これらの状態が直感的な色分けによって視覚的に強調されます。強い上昇方向の合意が形成されている場合、HI値は鮮やかな緑で表示されます。一方、強い下降方向の合意が形成されている場合は、明るい赤で表示されます。中程度の強気または弱気の状態では、柔らかい緑または赤を使用して、潜在的な機会を示しつつ慎重さを促します。弱いまたは中立のゾーンでは黄色で表示され、明確な多時間軸トレンドが存在しないことや判断保留の状態を示します。この色と状態の連携は非常に重要であり、特に相場が急速に動く場合でも、トレーダーは価格アクション分析に気を取られることなく、視覚的な手がかりだけでHIの状態を把握できます。  

アラートおよびシグナルロジック

HIの強力な機能の一つは、バイアスコンセンサスをリアルタイムで計算および表示するだけでなく、意味のある変化が発生した際にトレーダーに積極的に通知できる点です。アラートやチャート上のシグナルを組み込むことで、HIは単なる分析ツールから、意思決定の自動化や視覚的な売買シグナルをサポートする応答型の戦術的ツールへと進化します。  

アラートシステムは主に2つの重要なイベントに注目します。1つ目はHIの閾値クロスであり、これはHIが強い上昇バイアスの閾値を下から上に突破した場合、または強い下降バイアスの閾値を上から下に突破した場合に発生します。これらのイベントは、通常、合意水準の大きな変化を示しており、多くの時間足における不確実性から高い確信度への移行を示すことが多いです。2つ目は上位時間足のバイアス反転で、H4やD1のバイアスが正負反転する場合を指します。たとえば強気から弱気、あるいはその逆への反転です。上位時間足は多くの戦略で市場に大きな影響を持つため、このような反転は、HIが強いバイアスの閾値をまだ突破していなくても、主要な構造変化の前兆としてトレーダーの注意を引く重要なシグナルとなります。  

シグナルプロットはアラートを補完し、強いバイアスの閾値のクロスが発生した際に買いまたは売りの矢印を直接チャート上に表示します。たとえば、HIが強い上昇バイアスの閾値を上抜けした場合、直近の確定バーの安値の少し下に緑の買い矢印を描画します。逆に、HIが強い下降バイアスの閾値を下抜けした場合は、そのバーの高値の少し上に赤の売り矢印を表示します。このオフセット配置により、ローソク足の実体付近の視認性が確保され、チャートが混雑するのを防ぎます。誤作動や過剰なシグナルを防ぐため、EAでは重複排除機構を採用しており、同じ方向の矢印が当該バーにすでに描画されていないかを確認します。また、ユーザー定義のMaxSignalsパラメータに従い、チャート上に表示される矢印の最大数を制限します。  

数学的には、矢印のトリガー条件は以下のように要約できます。

システム統合のためのデータエクスポート

HIは、裁量取引向けの独立したダッシュボードとして設計されているだけでなく、より大規模なアルゴリズム取引システムのモジュールとしても機能します。これを可能にするため、HIは計算結果をMetaTrader 5のグローバル変数に出力し、他のEA、カスタムインジケーター、または同時に稼働しているスクリプトからアクセスできるようにしています。  

このエクスポートメカニズムにはいくつかの実用的な利点があります。まず、他の自動化モジュールがHIをトレンドフィルタとして活用できる点です。たとえば、ブレイクアウトトレードを実行する前にHIが特定の閾値を上回っていることを条件にすることが可能です。2つ目に、複数チャート間での協調的な意思決定を可能にします。たとえば、ある通貨ペアを監視するEAが、別の相関ペアや上位時間足チャートのHI値に応じて反応することができます。3つ目に、HIが多様な銘柄にわたる合意水準のトレンドを検出することに基づき、ポートフォリオ戦略での配分、ヘッジ、リスクスケーリングの判断をおこなうなど、高度な運用戦略をサポートします。  


機能の概要

多時間軸ハーモニー指数(HI)は、単なる数値出力にとどまらず、裁量トレーダー、半自動戦略、完全自動アルゴリズムシステムのいずれにも対応できる、フル機能の取引モジュールです。その設計思想は、明確性、適応性、相互運用性に根ざしており、トレーダーが市場の合意水準を視覚的に把握し、自信とスピードをもって行動できるように設計されています。以下に、主要な機能の詳細を解説します。  

設定可能な時間足と重み付け

HIの中核は、合意水準の計算に含める時間足を選択できること、そして各時間足に対して自分の取引スタイルに応じた個別の重みを設定できることです。短期時間足(M15、H1)は、日中の値動きを捉えたいアクティブデイトレーダー向けに強調することが可能です。一方で、スイングトレーダーやポジショントレーダーはH4やD1により重い重みを割り当て、指数がマクロトレンドを反映し、短期的な逆行を無視するように設定できます。時間足ごとに独立したブール型トグルで有効化と無効化を切り替えられるため、HIはスキャルピングから長期投資まで、固定的な構造に縛られることなく多様な取引スタイルに適応します。この柔軟性により、合意水準の計算は、自身の市場参加リズムに即した意味のある指標として機能します。

//--- user inputs
input bool Use_M15  = true;
input bool Use_H1   = true;
input bool Use_H4   = true;
input bool Use_D1   = true;

input double Weight_M15 = 1.0;
input double Weight_H1  = 1.5;
input double Weight_H4  = 2.0;
input double Weight_D1  = 2.5;

//--- example bias retrieval for selected TF
double GetBias(string symbol, ENUM_TIMEFRAMES tf)
{
   double close_now = iClose(symbol, tf, 0);
   double close_prev= iClose(symbol, tf, 1);
   if(close_now > close_prev) return  1; // bullish
   if(close_now < close_prev) return -1; // bearish
   return 0; // neutral
}

//--- example weighted calculation
double weighted_sum = 0;
double total_weight = 0;
if(Use_M15) { weighted_sum += GetBias(_Symbol, PERIOD_M15) * Weight_M15; total_weight += Weight_M15; }
if(Use_H1)  { weighted_sum += GetBias(_Symbol, PERIOD_H1)  * Weight_H1;  total_weight += Weight_H1;  }
if(Use_H4)  { weighted_sum += GetBias(_Symbol, PERIOD_H4)  * Weight_H4;  total_weight += Weight_H4;  }
if(Use_D1)  { weighted_sum += GetBias(_Symbol, PERIOD_D1)  * Weight_D1;  total_weight += Weight_D1;  }

double harmony_index = (total_weight > 0) ? weighted_sum / total_weight : 0;

ダッシュボードパネル表示とUIの柔軟性

実際の市場において明確な情報を把握することは、もはや必須条件です。HIは、以下の要素を表示する、鮮明で統合されたチャートパネルを通じてこれを実現します。

  • 最新のHI値およびそのEMA平滑化バージョン
  • 時間足ごとのバイアス内訳を表示し、強気、弱気、中立のいずれの状態にあるかを一目で確認可能
  • 各時間足の加重貢献値を示すことで、個々の時間足が合意にどの程度影響しているかを即座に把握可能

//--- Creating a chart label for HI values
string panelName = "HI_Dashboard";
if(!ObjectCreate(0, panelName, OBJ_LABEL, 0, 0, 0))
   Print("Failed to create dashboard label");

ObjectSetInteger(0, panelName, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, panelName, OBJPROP_XDISTANCE, 10);
ObjectSetInteger(0, panelName, OBJPROP_YDISTANCE, 20);

string panelText = StringFormat("HI: %.2f\nEMA: %.2f", harmony_index, harmony_index_ema);
ObjectSetString(0, panelName, OBJPROP_TEXT, panelText);
ObjectSetInteger(0, panelName, OBJPROP_FONTSIZE, 12);
ObjectSetInteger(0, panelName, OBJPROP_COLOR, clrWhite);

パネルは、バイアスの信頼度を示すカラーテーマ付きの矩形ラベルとして構築可能です。互換性の問題が発生した場合、EAは自動的にラベルベースのフォールバックブロックに切り替え、すべてのプラットフォームビルドで安定して表示されるようになっています。ユーザー設定により、パネルの位置、サイズ、余白、フォント、色などを細かく調整できるため、既存のチャートレイアウトに違和感なく統合できます。  

信頼度の色分け

HIは、数値計算を視覚的に補強する直感的な配色を採用しています。色は前のセクションで説明した合意水準の分類と直接対応しています。

鮮やかな緑 → 強い上昇バイアス、HI ≥ StrongThreshold
鮮やかな赤 → 強い下降バイアス、HI ≤ −StrongThreshold
淡い緑 / 淡い赤 → 中程度の判定状態、ModerateThresholdとStrongThresholdの間
黄色 → 弱いまたは中立の合意水準

color GetHIColor(double hi, double strongThr, double moderateThr)
{
   if(hi >= strongThr)   return clrLime;      // strong bullish
   if(hi <= -strongThr)  return clrRed;       // strong bearish
   if(hi >= moderateThr) return clrLightGreen;// moderate bullish
   if(hi <= -moderateThr)return clrLightCoral;// moderate bearish
   return clrYellow;                          // neutral
}

ObjectSetInteger(0, panelName, OBJPROP_COLOR, GetHIColor(harmony_index, 0.7, 0.3));

この色と状態の対応付けにより、トレーダーはパネルを一目見るだけで市場の方向性を把握でき、取引の最中に各数値を頭の中で計算する必要がなくなります。  

閾値に基づくアラート

急速に変動する市場での迅速な判断を支援するため、HIには特定の重要条件で発動するアラートシステムが組み込まれています。  

  • 強いバイアスの閾値クロス:HIが弱い状態から、強い上昇バイアスまたは下降バイアスの閾値を上抜け/下抜けした場合に発生します。
  • 上位時間足のバイアス反転:H4またはD1のバイアスが正負反転したときに発生し、主要トレンドの変化の可能性を示します。

//--- once per bar check
static datetime lastAlertTime = 0;
if(Time[0] != lastAlertTime)
{
   if(harmony_index >= strong_threshold && prev_hi < strong_threshold)
      Alert("Strong Bullish Threshold Crossed on ", _Symbol);
      
   if(harmony_index <= -strong_threshold && prev_hi > -strong_threshold)
      Alert("Strong Bearish Threshold Crossed on ", _Symbol);
   
   lastAlertTime = Time[0];
}

アラートはMetaTrader 5のAlert()システム、ログ出力、任意のプッシュ通知を通じて配信されます。これにより、チャートの前にいる場合でも、遠隔でモニタリングしている場合でも、確実に通知を受け取ることができます。  

自動売買シグナルのプロット

視覚的なトリガーを好むトレーダー向けに、HIは強いバイアスの閾値クロスに基づき、チャート上に自動で買い矢印と売り矢印をプロットする機能を備えています。HIが強い上昇バイアスに転じた場合、直近確定バーの安値の少し下に買い矢印を描画します。HIが強い下降バイアスに転じた場合は、直近確定バーの高値の少し上に売り矢印を描画します。同一バー上での重複シグナルを防ぐ重複排除機能や、表示するシグナルの最大数を制限する設定により、チャートが乱雑になるのを防ぎます。これにより、閾値イベントの歴史的な記録がきれいに残り、ライブ取引だけでなく、セッション後の分析にも役立ちます。 

void PlotSignal(bool buy)
{
   string arrowName = "HI_Signal_" + IntegerToString(Time[0]);
   ObjectCreate(0, arrowName, OBJ_ARROW, 0, Time[0], buy ? Low[0] : High[0]);
   ObjectSetInteger(0, arrowName, OBJPROP_COLOR, buy ? clrLime : clrRed);
   ObjectSetInteger(0, arrowName, OBJPROP_ARROWCODE, buy ? 241 : 242); // Wingdings up/down arrow
}

if(harmony_index >= strong_threshold && prev_hi < strong_threshold)
   PlotSignal(true);

if(harmony_index <= -strong_threshold && prev_hi > -strong_threshold)
   PlotSignal(false);

ノイズ低減のためのEMA平滑化

HI_EMA_Periodをユーザーが調整可能なパラメータとして組み込むことで、シグナルの反応性と安定性のバランスを正確に調整できます。値を低く設定するとバイアス変化への反応が素早くなり、スキャルピング環境に適しています。一方、値を高く設定すると変化が滑らかで緩やかになり、長期構造に沿ったトレンド判断に理想的です。パネルでは、生のHI値とEMA平滑化済みのHI値の両方が表示され、トレーダーは即時の市場心理と、フィルタリングされたトレンドに沿った合意水準を比較しながら判断できます。

//--- standard EMA smoothing formula
double alpha = 2.0 / (HI_EMA_Period + 1);
harmony_index_ema = harmony_index_ema + alpha * (harmony_index - harmony_index_ema);

グローバル変数によるデータのエクスポート

HIは相互運用性を重視して設計されています。生のHI値、平滑化済みHI値、時間足ごとのバイアスなど、主要な出力はすべてMetaTrader 5のグローバル変数に格納されます。これにより、以下の用途で即座に活用可能です。  

  • HIをトレンドフィルタとして使用する外部EA
  • 合意状況に応じてポジションサイズを調整するリスク/取引管理モジュール
  • 複数チャートや複数通貨ペアのデータを統合する多銘柄戦略

//--- store outputs as global vars
GlobalVariableSet("HI_Raw_"+_Symbol, harmony_index);
GlobalVariableSet("HI_EMA_"+_Symbol, harmony_index_ema);
GlobalVariableSet("HI_Bias_M15_"+_Symbol, (double)GetBias(_Symbol, PERIOD_M15));
GlobalVariableSet("HI_Bias_H1_"+_Symbol,  (double)GetBias(_Symbol, PERIOD_H1));
GlobalVariableSet("HI_Bias_H4_"+_Symbol,  (double)GetBias(_Symbol, PERIOD_H4));
GlobalVariableSet("HI_Bias_D1_"+_Symbol,  (double)GetBias(_Symbol, PERIOD_D1));

この仕組みにより、HIは単独のダッシュボード指標としてだけでなく、より広範なアルゴリズムトレードシステムのモジュールとしても活用できます。  


コード構造の説明

多時間軸ハーモニー指数(HI) EAは、モジュール構造で構築されており、設定、コアロジック、ユーザーインターフェースの描画、補助ユーティリティが明確に分離されています。この構成により、EAは高い柔軟性を持つと同時に、将来的な保守や拡張も容易になります。全体構造は、自然な取引ロジックの流れに沿って設計されています。

EAの柔軟性の中核は、スクリプトの先頭で宣言される入力パラメータにあります。サポートされる各時間足(M15、H1、H4、D1)には、有効化スイッチと重み値が設定されています。有効化スイッチはその時間足をHIの計算に貢献させるかどうかを決定し、重み値はその時間足が合意水準の計算にどの程度影響するかを指定します。これらの制御に加え、解釈用の閾値、平滑化設定、アラートやチャートシグナルの有効/無効を切り替えるスイッチも用意されています。この設計により、スキャルパー、スイングトレーダー、ポジショントレーダーなど、さまざまな取引スタイルに合わせてEAを柔軟にカスタマイズすることが可能です。

input bool   Use_M15 = true;  input double Weight_M15 = 0.10;
input bool   Use_H1  = true;  input double Weight_H1  = 0.20;
input bool   Use_H4  = true;  input double Weight_H4  = 0.30;
input bool   Use_D1  = true;  input double Weight_D1  = 0.40;

input double StrongThreshold   = 0.8;
input double ModerateThreshold = 0.4;

input int    HI_EMA_Period = 8;

input bool   EnableAlerts  = true;
input bool   EnableSignals = true;

EAが起動されると、OnInit()関数がその動作環境を準備します。有効化された時間足とそれぞれのパラメータは、構造体配列(tfs[])に格納されます。これにより、後続の計算処理で簡単にループ処理がおこなえるようになります。その後、EAはダッシュボードパネルの構築を開始します。まず矩形ラベルオブジェクトの描画を試み、失敗した場合は互換性のためにラベルブロック背景にフォールバックします。次に、タイトル、HI値、各時間足のラベルが順次作成され、複数インスタンスが同時に稼働しても干渉しないようにユニークなオブジェクト名が生成されます。初期化の最後には、定期実行用のタイマーが設定され、同時にUpdateHarmony()が呼び出されることで、パネル上に即座に有効なデータが表示されるようになっています。

ArrayResize(tfs,4);
tfs[0].tf = PERIOD_M15; tfs[0].enabled = Use_M15; tfs[0].weight = Weight_M15; tfs[0].name = "M15";
tfs[1].tf = PERIOD_H1;  tfs[1].enabled = Use_H1;  tfs[1].weight = Weight_H1;  tfs[1].name = "H1";
tfs[2].tf = PERIOD_H4;  tfs[2].enabled = Use_H4;  tfs[2].weight = Weight_H4;  tfs[2].name = "H4";
tfs[3].tf = PERIOD_D1;  tfs[3].enabled = Use_D1;  tfs[3].weight = Weight_D1;  tfs[3].name = "D1";

bool rect_created = TryCreateRectangle(...);
if(!rect_created) CreateBackgroundBlock(...);

EventSetTimer(MathMax(1, UpdateIntervalSec));
UpdateHarmony();

EAが稼働状態になると、動作サイクルはイベントタイマーによって制御されます。各タイマー間隔ごとにOnTimer()UpdateHarmony()を呼び出し、各時間足のバイアスを再計算し、加重HIを算出、EMAで平滑化します。その後、UIを更新し、閾値をチェックしてアラートを発動し、さらに他のシステムとの統合のためにグローバル変数へデータを書き込みます。

void OnTimer()
{
   UpdateHarmony();
}

for(int i=0; i<4; i++)
{
    if(!tfs[i].enabled || tfs[i].weight <= 0.0) { biases[i] = 0; continue; }
    int b = GetStructureBias(tfs[i].tf);
    biases[i] = b;
    sumWeighted += (double)b * tfs[i].weight;
    sumWeights += tfs[i].weight;
}

double hi = (sumWeights != 0.0) ? (sumWeighted / sumWeights) : 0.0;
double alpha = 2.0 / (HI_EMA_Period + 1.0);
if(hi_ema == 0.0) hi_ema = hi;
else hi_ema = (hi - hi_ema) * alpha + hi_ema;

GetStructureBias()内のバイアス検出ロジックは、インジケーターの派生値ではなく、プライスアクションの構造に基づいて構築されています。各時間足の直近3本の確定バーを確認し、高値と安値が一貫して上昇階段状を形成していれば強気バイアス、下降階段状を形成していれば弱気バイアスと判定します。もし階段状の構造が検出されない場合は、関数はローソク足の終値を比較する方法にフォールバックし、厳密な構造パターンを作らない場合でも勢いの変化を捉えられるようになっています。

int GetStructureBias(ENUM_TIMEFRAMES tf)
{
   MqlRates rates[];
   int copied = CopyRates(_Symbol, tf, 1, 4, rates);

   if(copied >= 3)
   {
      if(rates[0].high > rates[1].high && rates[1].high > rates[2].high &&
         rates[0].low  > rates[1].low  && rates[1].low  > rates[2].low)
         return +1;

      if(rates[0].high < rates[1].high && rates[1].high < rates[2].high &&
         rates[0].low  < rates[1].low  && rates[1].low  < rates[2].low)
         return -1;
   }
   return 0;
}

ユーザーインターフェースの描画は、ダッシュボードコンポーネントの作成やスタイリングを担当するヘルパー関数に抽象化されています。このカプセル化により、パネルの見た目を変更しても計算ロジックには影響を与えません。また、プラットフォームの制約により希望する矩形ラベルが描画できない場合でも、EAは自動的によりシンプルなラベルブロック背景に切り替わり、機能的な整合性を維持します。

bool TryCreateRectangle(...);
bool CreateBackgroundBlock(...);
bool CreateLabel(...);

アラートとシグナルプロットのサブシステムにより、トレーダーは重要な市場合意水準の変化を即座に把握できます。アラートはターミナルのアラートシステムを通じて配信され、MetaTrader 5でプッシュ通知が有効になっている場合は、モバイル端末などにも送信されます。チャート上の矢印は、強い上昇バイアスまたは下降バイアスの閾値を実際にクロスした箇所を正確に示します。矢印はトリガーとなったバーの高値または安値に基づいて配置され、視認性を高めるためにわずかにオフセットされています。 

void SendAlert(string txt)
{
   Print("HarmonyIndexEA: ", txt);
   Alert(txt);
   SendNotification(txt);
}

void PlaceSignalArrow(bool isBuy, datetime barTime, double price)
{
    ObjectCreate(0, name, OBJ_ARROW, 0, barTime, price);
    ObjectSetInteger(0, name, OBJPROP_ARROWCODE, isBuy ? 233 : 234);
    ObjectSetInteger(0, name, OBJPROP_COLOR, isBuy ? clrGreen : clrRed);
}

EAがチャートから削除されると、OnDeinit()が作業環境を徹底的に整理します。ダッシュボードやシグナルに関連するすべてのチャートオブジェクトを削除し、タイマーを停止、さらに現在のEAインスタンスによって作成されたグローバル変数もすべて消去します。これにより、クリーンな状態が確保され、将来の分析や他のEAの動作への干渉を防ぐことができます。

void OnDeinit(const int reason)
{
   // Delete chart objects, arrows, globals
   EventKillTimer();
}

設定、初期化、タイマーによる再計算、UI描画、アラート発動、クリーンアップといった流れを通じて、多時間軸HIは完結型の分析・通知システムを形成しています。各コードブロックは特定の目的に沿って構築されつつも相互に連携しており、パフォーマンス、柔軟性、堅牢性のバランスを実現し、実務取引環境に適しています。


ユーザー入力とカスタマイズ

多時間軸ハーモニー指数は、複数の取引スタイル、市場状況、トレーダーの好みに適応できるよう、高度に設定可能な入力パラメータを備えています。これらの入力は、EAの動作全般を制御します。分析に貢献する時間足の選択、ダッシュボードの視覚表示、アクション可能なバイアス状態のルール、アラートやチャートシグナルの動作など、すべての側面がパラメータで管理可能です。まず、時間足の有効化スイッチと重みから設定が始まります。サポートされる各時間足(M15、H1、H4、D1)は個別にオン/オフを切り替えられます。有効化されている場合、その時間足はHIの計算において自身のバイアス値を貢献します。時間足に割り当てられた重みは、他の時間足に対する影響力の大きさを制御します。トレーダーは、短期時間足の重みを高めて反応性の高いシグナルを重視したり、長期時間足の重みを高めて構造的に安定したシグナルを重視したりすることが可能です。この細かい調整により、ミクロな整合性を狙うスキャルパーから、大きな構造的ピボットを待つスイングトレーダーまで、幅広いスタイルで活用できます。

閾値は、HIの生値を解釈する上で重要な役割を果たします。StrongThresholdは、HIの符号に応じて、強い上昇バイアスまたは下降バイアスと見なせるポイントを定義します。一方、ModerateThresholdは中間状態を示し、完全な強さに達する前のバイアスの形成過程を捉えるのに有用です。これらの閾値は、EMA平滑化済みのHI値と組み合わせて、ダッシュボードのカラーコードやアラート発動の判定に用いられます。EMA期間パラメータは平滑化の挙動を制御します。短い期間を設定するとHIはバイアス変化に素早く反応し、長い期間を設定すると下位時間足のノイズを抑えて緩やかで安定したシグナルを生成します。これにより、異なるボラティリティ環境にEAを適応させることが可能です。レンジ相場や荒い値動きの局面では、長めの平滑化期間が誤信号を除去し、トレンド相場では短めの期間で早期の参入機会を捉えることができます。

分析だけでなく、EAはアラートとチャート上シグナルの表示もオプションとして提供します。アラートを有効にすると、閾値クロスや上位時間足のバイアス反転が発生した際に、ユーザーに通知されます。シグナル表示を有効にすると、強いバイアスの閾値クロスが発生した瞬間にチャート上に買い/売り矢印が描画され、後でレビューする際の視覚的記録として活用できます。矢印のスタイル、配置、数は細かく調整可能で、チャートの混雑を避けつつ明瞭性を維持できます。すべてのパラメータは、EAをチャートに適用した際のMetaTraderの[Inputs]タブからアクセス可能で、再読み込み時に即座に反映されます。これにより、トレーダーはコードを一切編集することなく、HIを自身の戦略に合わせて迅速に調整することができます。

入力名 デフォルト 説明
Use_M15 bool true 15分足の分析を有効化する
Weight_M15
double 0.10 HI計算におけるM15の相対重み
Use_H1
bool true 1時間足の分析を有効化する
Weight_H1
double 0.20 HI計算におけるH1の相対重み
Use_H4
bool true 4時間足の分析を有効化する
Weight_H4
double 0.3 HI計算におけるH4の相対重み
Use_D1
bool true 日足の分析を有効化する
Weight_D1
double 0.40 HI計算におけるD1の相対重み
StrongThreshold
double 0.8 強い判定状態と見なすためのバイアス値
ModerateThreshold
double 0.4 中程度の判定状態と見なすためのバイアス値
HI_EMA_Period
int 8 HIに適用されるEMA平滑化の期間
EnableAlerts
bool true 閾値クロスや時間足反転アラートを有効化する
EnableSignals
bool true 強いバイアスの閾値クロス時に自動的にチャート矢印を表示する
UpdateIntervalSec
int 1 ダッシュボード更新および再計算の間隔(秒)
MaxSignals
int 100 チャート上に描画される矢印の最大数(混雑防止)

この豊富なパラメータセットとEAの柔軟なアーキテクチャを組み合わせることで、トレーダーはHIを多様な役割にカスタマイズできます。ある設定では、スキャルパー向けの迅速な整合ツールとして機能し、早期のバイアス変化に即座にアラートを発します。また別の設定では、ゆっくりとした安定したトレンドフィルタとして機能し、ポジショントレードの方向性を示しつつ、ノイズに過剰反応しないよう調整できます。この柔軟性はEAの最大の強みであり、各入力パラメータを自身の取引目的に沿って正しく理解することが重要です。


テストと結果

ハーモニー指数(HI)の実践的な有効性を評価するため、デモ口座でのライブ取引とストラテジーテスターによるバックテストの両方でテストを実施しました。

デモ口座のライブチャートテスト - ボラティリティ75(1秒足)指数

最初のテストは、Volatility 75(1秒足)指数のデモ口座のライブチャート上でおこないました。HIダッシュボードをリアルタイムで監視し、監視対象の時間足間でバイアスの整合が発生するたびに複数のシグナルが生成されました。

ダッシュボードには以下の情報が表示されました。

  • 現在のHI値(生値)およびEMA平滑化済みHI値
  • 監視対象時間足(M15、H1、H4、D1)ごとのバイアス
  • 各時間足に対応する重み付け
  • 最終的な加重HIの貢献度

このテスト中、システムは複数の弱気バイアス整合を検出しました。HIが強い下降バイアスの閾値をクロスした瞬間に売り矢印が正確に描画され、シグナルロジックが正しく機能していることが確認されました。

上図:Volatility 75(1秒足)指数のデモ口座のライブチャートテスト。複数の弱気バイアスシグナルとハーモニー指数ダッシュボードの出力を表示

バックテスト:GBPUSD (H1)

さらに、FX市場環境での有効性を確認するため、GBPUSD、H1にてストラテジーテスターによるバックテストを実施しました。バックテストの結果は良好で、多時間軸のバイアス整合を一貫して検出し、EMA平滑化済みのHI値も滑らかでした。これにより、HIが複数時間足にわたるプライスアクション分析において信頼性の高い指標となる可能性が改めて示されました。

上図:GBPUSD (H1)バックテストの例。ハーモニー指数ダッシュボードがバイアス状態を追跡し、買い/売りシグナルを生成。

デモライブテストおよびバックテストの両方で、バイアス分類の正確性とシグナル描画のタイミングの適切性が確認されました。異なる市場環境(合成指数:Volatility 75と主要通貨ペア:GBPUSD)においても、HIは方向性の一致を安定して測定し、裁量取引とアルゴリズム取引の両方に対して実行可能な洞察を提供できることが示されました。


結論

多時間軸ハーモニー指数(HI)は、プライスアクショントレーダーが多時間軸のトレンド整合を定量化および可視化する方法における大きな進化を示しています。複数の時間足における構造的バイアスを単一の加重指標に集約し、直感的なカラーコーディング、閾値に基づく状態分類、EMA平滑化を組み合わせることで、主観的判断を客観的で実行可能な情報へと変換します。異なるチャート間で断片的に判断するのではなく、トレーダーは1つの統合ダッシュボード上で、短期、中期、長期の構造が一致しているか、または対立しているかを一目で確認できます。この明確性により、意思決定の速度が向上し、トレードのフィルタリングが容易になり、自動売買戦略との統合もスムーズになります。柔軟性を重視して設計されたHIは、時間足、重み、閾値、平滑化パラメータを調整するだけで、高頻度スキャルピングからポジショントレードまで幅広い取引スタイルに対応可能です。

本連載の文脈において、このモジュールはその分析能力と相互運用性で際立っています。HIの値をグローバル変数に出力できるため、より大規模な取引システムのコアトレンドフィルタとして利用でき、アルゴリズム取引と裁量取引の両方に対応します。また、モジュール設計、堅牢なユーザーインターフェースロジック、徹底したクリーンアップ機能により、ライブ口座でも安定して扱いやすい構造となっています。最終的に、HIの強みは、構造化されたプライスアクション分析の精度と、リアルタイム自動化の効率性を融合できる点にあります。単独の意思決定支援ツールとしても、広範な取引アーキテクチャの一部としても利用でき、複雑な多時間軸評価を1つの読みやすいシグナルに集約し、そのシグナルに基づいて定量化された合意水準の自信をもって行動することを可能にします。

ハーモニー指数(HI)は、主に教育および研究目的での利用を意図しています。実際の取引では、ご自身の取引戦略およびリスク管理ルールと組み合わせて使用してください。過去のテスト結果は将来のパフォーマンスを保証するものではなく、ライブ市場で適用する前に、そのロジックを十分に理解することが推奨されます。
私の他の記事をご覧ください。

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

添付されたファイル |
最後のコメント | ディスカッションに移動 (3)
ayaghut
ayaghut | 4 11月 2025 において 09:46
スキャルピングの入力はどのように設定すればよいのでしょうか?
Christian Benjamin
Christian Benjamin | 4 11月 2025 において 10:54
ayaghut #:
スキャルピングの場合、インプットはどのように設定すべきですか?
スキャルピングでは、低い時間枠、例えばM1からM5の時間枠を使用し、これらの低い時間枠で高いウェイトを設定するようにしてください。
より速く反応させるために、スムージングの長さとバイアスのしきい値を少し減らしてください。
ayaghut
ayaghut | 4 11月 2025 において 17:39
Christian Benjamin #:
スキャルピングでは、低い時間枠、例えばM1からM5の時間枠を使用し、これらの低い時間枠に高いウェイトを設定するようにしてください。
より速く反応させるために、スムージングの長さとバイアスのしきい値を少し減らします。
どの項目を変更すべきか、またM1の正確な金額を教えてください。
EAのサンプル EAのサンプル
一般的なMACDを使ったEAを例として、MQL4開発の原則を紹介します。
MetaTrader 5機械学習の設計図(第4回):金融機械学習パイプラインの隠れた欠陥 - ラベルの同時発生 MetaTrader 5機械学習の設計図(第4回):金融機械学習パイプラインの隠れた欠陥 - ラベルの同時発生
金融機械学習における重大な欠陥であるラベルの同時発生が、過学習や実運用でのパフォーマンス低下を引き起こす問題をどのように修正するかを解説します。トリプルバリア法を使用すると、学習用ラベルが時間的に重複し、ほとんどの機械学習アルゴリズムにおける核心的な独立同分布(IID)の仮定に違反します。本記事では、サンプル重み付けを用いた実践的な解決策を提示します。具体的には、売買シグナル間の時間的重複を定量化し、各観測値が持つ固有情報を反映したサンプル重みを計算し、scikit-learnでこれらの重みを実装することで、より堅牢な分類器を構築する方法を学びます。これらの手法を習得することで、取引モデルの堅牢性、信頼性、収益性を向上させることができます。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
MQL5での取引戦略の自動化(第37回):ビジュアル指標付きレギュラーRSIダイバージェンス・コンバージェンス検出 MQL5での取引戦略の自動化(第37回):ビジュアル指標付きレギュラーRSIダイバージェンス・コンバージェンス検出
本記事では、スイングポイントの強さを考慮し、バー制限や許容幅のチェックを組み合わせて、レギュラーRSIダイバージェンスを検出するMQL5エキスパートアドバイザー(EA)を作成します。このEAは、強気または弱気シグナルに基づいて固定ロットでエントリーし、SL/TPをpips単位で設定でき、任意でトレーリングストップも適用可能です。視覚要素として、チャート上に色分けされたラインおよびラベル付きスイングポイントを表示し、戦略分析を強化します。