プライスアクション分析ツールキットの開発(第53回):サポート・レジスタンスゾーン発見のためのPattern Density Heatmap
はじめに
連載「プライスアクション分析ツールキット開発」の第51回では、チャート上でローソク足パターンを直接スキャンして強調表示するツールを紹介しました。このツールのロジックはシンプルでありながら強力でした。パターン名を入力し、検索ボタンを押すと、指定した履歴期間内のすべての出現を特定し、監視を継続し、パターンが再形成されるとリアルタイムで通知されます。当時の目的は、あくまでパターンの特定にありました。しかし後になって、これらの過去検出結果が、より大きな目的に活用できることに気付きました。それは、市場が繰り返し反応した価格レベルを明らかにすることです。時間が経つにつれて、これらのレベルはサポート(価格が反発しやすい下値)やレジスタンス(価格が反転しやすい上値)として機能することが多く、事前に知っておくことで、トレーダーは市場の動きを予測し、エントリー・エグジットのタイミングを調整し、ストップを戦略的に配置し、反応の強いゾーンで無防備に取引するリスクを避けられます。
この認識に基づき、次に開発すべき論理的なステップは、過去のローソク足検出結果を価格密度ゾーンに変換し、今後の価格の動きとどのように相互作用するかを監視するシステムの構築です。これにより、トレーダーは統計的に有意な価格レベルに近づいた際に、遅れて反応するのではなく、事前に行動することが可能になります。
本記事では、Pattern Density Heatmapを紹介します。このツールは、過去のローソク足の活動から自動的に価格ゾーンを作成・可視化し、価格がこれらのゾーン付近でどのように動くかを追跡し、価格が各ゾーンに近づいた際にアラートを発生させます。記事の構成は、まず概要と目的を説明し、その後MQL5での実装を確認し、結果を考察し、最後に結論を述べる流れとなっています。
以下に目次を示し、その後に各セクションの詳細を順に解説します。
概要と目的
取引において、単一のローソク足パターンを認識することは有用ですが、同じ価格帯で繰り返し出現するパターンが語る物語こそが、より深い市場構造を明らかにします。

Pattern Density Heatmapは、その考えに基づいて構築されています。個々のパターンを単発のイベントとしてマークするのではなく、複数のパターンが時間をかけて集中した価格ゾーンを捉え、可視化します。

これらのクラスタは偶然に形成されることは稀で、注文の流れが一貫して変化した価格レベルの周辺に集まり、動的なサポートやレジスタンスとして機能する領域を形成します。ヒートマップは最近の市場行動に適応するため、参加者が過去にどの価格で強いポジションを取ったかを反映し、将来も同様の行動が起こる可能性を示します。
パターン検出から価格マッピングへ
従来の多くのパターン認識ツールは、個別ローソク足にパターンが出現した箇所を単純にマークするだけです。この「ポイント・アンド・マーク」方式は便利ですが、同じ価格レベルで類似反応がどのくらいの頻度で起こるかという深い市場コンテキストを提供できません。一方、Pattern Density Heatmapは膨大な過去データ(数千バーに及ぶこともあります)をスキャンし、複数パターンの検出価格をすべてログに記録します。これらの生データを価格ビンに集約することで、市場における繰り返し反応レベルを表すレンジとして整理します。
各ビンは以下に基づきスコア化されます。
- ビン内の検出回数
- 検出の新しさ(直近の反応に高い重みを付与)

これにより、単なる視覚的なパターン検出を、統計的に裏付けられた市場反応マップへと変換できます。
これらのゾーンが重要な理由
繰り返し反応した価格ゾーンは、単発のパターン検出では得られない以下の利点をもたらします。

- 反応よりも先読み:高密度ゾーンに価格が近づく際、反発やブレイクアウトの可能性を事前に把握でき、エントリーやエグジットの計画が立てやすくなります。
- リスクの配置の改善:強力なゾーンの外側にストップを置くことで、ランダムな価格変動に巻き込まれにくくなり、取引の生存率やリスク調整後のリターンが向上します。
- 他のツールとの相乗効果:統計的に強いゾーンは、フィボナッチリトレースメント、移動平均、ピボットポイント、トレンドラインなどと自然に重なることがあり、コンフルエンス(相乗効果)によってゾーンの信頼性が高まります。
- 客観性:これらのゾーンは、主観的な目視ラインではなく、過去の市場反応に基づくデータから形成されるため、バイアスを低減できます。初心者から上級者まで、同じデータに基づいたレベルを参照可能です。
上位時間足での統合
市場構造は多層的で、広い時間軸での重要レベルは、短期の動きに対して支配的な影響を与えることがあります。ヒートマップは、上位時間足(HTF)で検出されたローソク足パターンを用いてゾーンを検証可能です。たとえば、H1チャートで確認されたゾーンが日足で一致する場合、そのゾーンはより重要性を持ちます。この多時間軸のコンフルエンスは、異なる市場参加者による注文集中の強さを示す重要な要素で、プロの取引計画において決定的になることもあります。
取引スタイル別の活用
パラメータ駆動かつ出力形式に依存しないため、Pattern Density Heatmapは様々な取引アプローチに適応可能です。
1. スイングトレード
- 日足や4時間足のチャートで広範囲の履歴データをスキャンし、中期的な市場反応ゾーンをマッピングします。アラート機能により、価格がゾーンに接近する際に数時間〜数日前から通知されるため、ポジションのエントリーやエグジットを計画する余裕があります。
2. スキャルピング
- 短期トレーダーは、更新の速い密度ゾーンを日中チャートで利用できます。これにより、大きな時間軸では見えない高確率の反転ポイントを特定でき、素早い取引判断に活用できます。
3.アルゴリズム取引
- 検出された全データセットをCSV形式でエクスポートできるため、システマティックなモデリングや定量分析に非常に適しています。定量開発者は、エクスポートしたデータを統計エンジンや機械学習モデルに取り込み、ゾーンのスコアリング、エントリーの最適化、アルゴリズム取引ロジックへの統合が可能です。
| スタイル | LookbackBars | BinCount | HTF確認 | メリット |
|---|---|---|---|---|
| スイングトレーダー | 2000 | 40 | はい | 数日前から計画可能 |
| スキャルパー | 500 | 25 | No | 日中の反転ポイント把握 |
| アルゴトレーダー | 3000 | 50 | はい | 定量分析への統合 |
主観からデータ駆動型への移行
Pattern Density Heatmapの最も価値ある特徴は、サポートやレジスタンスのマッピングにおける推測を排除できる点です。従来の裁量取引では、過去高値や安値を目視で判断することが多いですが、このツールは価格履歴における繰り返し反応を定量的に測定したデータからレベルを生成します。トレーダーはヒートマップの直感的な視覚情報を利用できますが、各ハイライトされたバンドやゾーンの背後には、市場がどのくらいの頻度で、どのくらい最近、どのパターンで反応したかの数値記録が存在します。
このように、統計的厳密性を視覚的なプライスアクション分析に組み込むことで、古典的なプライスアクショントレードと現代的な定量分析を橋渡しし、次に市場が重要に反応する価格帯を再現性高く示すことが可能になります。
MQL5での実装
Pattern Density HeatmapをMQL5でEAとして開発する際は、体系的な設計から始めます。具体的には、ユーザー設定可能なパラメータの定義、実行環境の準備、チャート上で操作可能なインターフェースの構築、パターンスキャンエンジンの実装、さらに高時間足での確認、リアルタイムアラート、正確な視覚表示、任意のデータエクスポート機能のサポートが含まれます。ソースコードはこれらのワークフローに従い、明確に分割された関数群によってシームレスに動作する構造となっています。
開発はMetaTrader 5のMetaEditorから開始します(F4ショートカットで起動)。まず、新しいエキスパートアドバイザーのテンプレートを作成し、PatternDensityHeatmap.mq5と名付け、#propertyディレクティブを用いて著作権、リンク、バージョンなどの基本プロパティを設定します。これらのメタデータは、知的財産の表示、バージョン管理、MQL5.com上での更新や作者ページへのリンクに重要です。
#property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com/ja/users/lynnchris" #property version "1.00"
次に、EAの入力パラメータを設定します。これらは、トレーダーがチャートにEAをアタッチする前にプロパティダイアログから調整できる項目です。パラメータは機能ごとにグループ化され、ユーザーが理解しやすい構造に整理されています。検出関連の入力には、複数のパターン識別子をカンマ区切りで指定できるPatternName文字列(例:「hammer,doji」)、検索する履歴バー数を指定する整数型のLookbackBars、価格範囲を離散的なビンに分割する解像度を決めるBinCountがあります。また、MinHitsToShowは、ビンを可視化可能なゾーンとして扱うために必要な最小パターンヒット数の閾値を設定します。
input string PatternName = "hammer,doji"; input int LookbackBars = 2000; input int BinCount = 40; input int MinHitsToShow= 2;
表示および重み付けコントロールでは、結果として得られるゾーンの表示方法を指定します。ベーストーンを指定するZoneBaseColorから、各パターンタイプを個別に表示するShowSeparateLayers、そして、古い検出よりも最近の検出を優先する統計的減衰重み付けを適用するUseRecencyDecayとDecayHalfLifeまで、様々なオプションがあります。
input color ZoneBaseColor = clrDodgerBlue; input bool ShowSeparateLayers = true; input bool UseRecencyDecay = true; input double DecayHalfLife = 250.0;
上位時間足およびアラート関連のパラメータでは、任意のマルチタイムフレーム確認を設定するHTF_TimeframeとHTF_ConfirmZones、ゾーン接近感度を決めるApproachThresholdPips、およびアラートのクールダウン時間を指定するZoneAlertCooldownが定義されています。
input ENUM_TIMEFRAMES HTF_Timeframe = PERIOD_H1; input bool HTF_ConfirmZones = false; input int ApproachThresholdPips = 8; input int ZoneAlertCooldown = 300;
マーカースタイリング関連の入力パラメータでは、ShowPatternMarkers、MarkerColor、MarkerOpacityなどがあり、パターン検出時に描画されるローソク足マーカーの見た目を調整できます。最後に、エクスポートオプションとしてExportCSV、CSVFileName、AppendCSVがあり、EAが検出記録をオフライン解析用に保存する際、既存データに追加するか上書きするかを指定できます。
input bool ShowPatternMarkers = true; input color MarkerColor = clrGold; input int MarkerOpacity = 30; input bool ExportCSV = true; input string CSVFileName = "pattern_detections.csv"; input bool AppendCSV = true;
パラメータ宣言の後、コードは実行時変数を設定して現在の状態を保持します。これには、入力パラメータに対応するブール型のトグルが含まれ、チャート上のボタンで機能をON/OFFした際に、EAを再アタッチせずとも即座に変更が反映されるようになっています。市場データを格納するMqlRates g_rates[]、検出されたパターン名を保持するg_patterns[]、パターンごとのヒットカウンタg_pattern_hits[]、ビン集計用のg_bins_flat[]などの配列も宣言されます。検出ログはDetection g_detections[]構造体で管理され、各パターンの名前、時刻、価格、減衰重みが格納されます。また、アラート履歴をg_alert_sent[]配列で追跡し、同一ゾーンへの通知がティックごとに重複しないよう制御します。
bool runtime_UseRecencyDecay; MqlRates g_rates[]; string g_patterns[]; int g_pattern_hits[]; int g_bins_flat[]; Detection g_detections[]; bool g_alert_sent[];
EA起動時にOnInit()初期化ルーチンが呼び出されます。まず、実行時トグルを入力パラメータで設定された値と同期させ、アラート追跡用の配列を最大表示可能ゾーン数に合わせて調整します。次にParsePatternList()を呼び出し、カンマ区切りのパターン文字列を小文字の配列に変換し、各パターンにプリセットパレットから異なる色を割り当てます。その後、CreateCompactUI()を呼んでチャート上に操作パネルを構築します。パネルにはチャート端に小さなクリック可能ボタンが配置され、トレーダーは再スキャン、ゾーンのクリア、機能の切り替え、凡例やマーカーの表示/非表示を自由に操作できます。AutoRescanOnStartオプションが有効な場合、EAはチャートの準備を待つために短時間スリープした後、スキャンエンジンを即座に実行し、アタッチ直後から結果を表示します。
int OnInit() { runtime_UseRecencyDecay = UseRecencyDecay; ArrayResize(g_alert_sent, MaxZonesToDraw); ParsePatternList(); CreateCompactUI(); if(AutoRescanOnStart) { Sleep(100); ScanAndDraw(); } return INIT_SUCCEEDED; }
インタラクティブ操作はOnChartEvent()によって処理されます。この関数はオブジェクトのクリックイベントを監視し、OBJ_BTN_RESCANやOBJ_TG_DECAYなど既知のボタン名と照合します。一致が見つかると、対応する実行時トグルが反転され、ステータステキストが更新されます。また、ユーザーがトグル変更時の即時再スキャンを有効にしていれば、AutoRescanIfAllowed()が実行されます。この設計により、EAはライブでユーザー主導のシステムとなり、プロパティダイアログに戻らずとも、チャート上からセッション中に各パラメータを変更できるようになります。
void OnChartEvent(int id, const long &lparam, const double &dparam, const string &sparam) { if(sparam == OBJ_BTN_RESCAN) ScanAndDraw(); else if(sparam == OBJ_TG_DECAY) { runtime_UseRecencyDecay = !runtime_UseRecencyDecay; AutoRescanIfAllowed(); } }
UI作成用の関数(CreateTinyButtonIfMissingとUpdateToggleButtons)は、各コントロールボタンが存在すること、ラベルが正しく表示されること、ON/OFF状態に応じた色分けがされていること、チャート上の座標に正しく配置されていることを保証します。また、ステータスボックスも管理し、トグル操作時には現在の設定やスキャンの概要をきれいにオーバーレイ表示します。
CreateTinyButtonIfMissing(OBJ_BTN_RESCAN, 8, 8, 84, 20, "Rescan"); CreateTinyButtonIfMissing(OBJ_TG_DECAY, 98, 8, 84, 20, "Decay");
パターン解析のステップはParsePatternList()にカプセル化されており、スキャンロジックの中心です。ユーザー入力(例:”hammer, doji”)を配列に分割し、空文字列を除去して小文字に変換、パレットから交互に色を割り当て、すべてのカウンタを初期化します。また、ビン配列g_bins_flatもここでリセットされ、「patterns_count × BinCount」のサイズに設定され、検出結果を格納する準備が整います。
int n = StringSplit(PatternName, ',', parts); for(int p=0; p<n; p++) { g_patterns[p] = ConvertToLower(parts[p]); g_pattern_colors[p] = palette[p % ArraySize(palette)]; } ArrayResize(g_bins_flat, g_patterns_count * BinCount); ArrayInitialize(g_bins_flat, 0);
EAの中心的な検出・描画エンジンであるScanAndDraw()は、EA内で最も重要な部分です。まず、ステータス表示を「Scanning...」に更新し、適切なデフォルト値としてLookbackBarsとビン数を計算します。配列の整合性を保つためにパターンを再度解析し、以前の検出結果をクリアして、市場データ用のメモリを確保します。CopyRates()を使って指定された履歴期間のOHLC価格データを取得し、最小値と最大値を確認してビンの高さを決定し、ビンサイズを計算します。
その後、履歴バーを逆順にループし、各パターンごとにIsPatternAtIndex()を呼び出して、そのバーが該当するローソク足パターンかどうかを判定します。マッチが見つかると、ヒットカウントが増加し、検出価格は極性ルールに従って固定されます(強気パターンはロー、弱気パターンはハイに基準)。価格に対応するビンインデックスが算出され、最新バーほど影響力が大きくなるように直近減衰重み付けが適用されます。ビンのカウントが更新され、CSVエクスポートやマーカー描画が有効な場合は、検出記録がg_detections[]に保存されます。
g_rates_copied = CopyRates(_Symbol, _Period, 0, barsToCopy, g_rates); for(int bar=1; bar<lookback && bar<g_rates_copied; ++bar) { for(int p=0; p<g_patterns_count; ++p) { if(IsPatternAtIndex(g_patterns[p], bar, g_rates)) { int binIndex = (int)MathFloor((pricePoint - g_price_min) / binSize); g_bins_flat[p*BinCount + binIndex] += intContrib; } } }
すべてのバーの処理が完了すると、各パターンのビンはcombinedBinsに統合されます。そして、スケーリングされた最小ヒット数の閾値を満たすビンはZoneRec構造体として登録されます。この構造体には、ビンのインデックス、ヒット数、価格範囲、スコアのプレースホルダー、高時間足確認フラグ(HTF確認)、および最後にアラートが発生した時刻が保持されます。
for(int b=0; b<BinCount; ++b) { int sum = 0; for(int p=0; p<g_patterns_count; ++p) sum += g_bins_flat[p*BinCount + b]; combinedBins[b] = sum; if(combinedBins[b] >= scaledMinHits) { ZoneRec z; z.bin = b; z.count = sum; z.low = g_price_min + b*binSize; z.high = z.low + binSize; zones[zoneCount++] = z; } }
上位時間足での確認が要求されている場合、EAはConfirmZonesWithHTF()を呼び出し、選択された上位時間足データセットに対して同様の検出ループを実行します。その結果、より大きな時間軸でもパターンヒットが確認されたゾーンには、確認済みフラグが付与されます。
if(IsPatternAtIndex(g_patterns[p], bar, htf_rates) && pricePoint >= zones[z].low && pricePoint <= zones[z].high) zones[z].htf_confirmed = true;
次にゾーンのスコアが計算されます。生のヒット数を1~100の範囲にスケーリングし、高時間足で確認済み(HTF-confirmed)の場合はわずかなブーストを適用します。さらに、厳格モードでは未確認のゾーンはフィルタリングされ、表示対象から除外されます。
double base = zones[i].count; double factor = zones[i].htf_confirmed ? 1.4 : 1.0; zones[i].score = (int)MathRound((base / maxRaw) * 100 * factor);
ゾーンはヒット数の降順に並べ替えられ、MaxZonesToDrawで制限された後、価格レンジに沿った半透明の長方形としてチャート上に描画されます。長方形の不透明度はヒット強度に比例します。各ゾーンにはOBJ_LABELが付与され、インデックス、ヒット数、スコア、上位時間足(HTF)確認状態、及び中央値価格が表示されます。
color pc = MakeColorWithAlpha(g_pattern_colors[p], alpha); ObjectCreate(0, obj, OBJ_RECTANGLE, 0, time_left, lowP, time_right, highP); ObjectSetInteger(0, obj, OBJPROP_COLOR, pc);
ShowSeparateLayersがONに設定されている場合、各パターンごとの色で追加の長方形が貢献ビンの上に描画され、パターン構成の詳細な粒度が視覚的に分かるようになります。
color pc = MakeColorWithAlpha(g_pattern_colors[p], alpha); ObjectCreate(0, obj, OBJ_RECTANGLE, 0, time_left, lowP, time_right, highP); ObjectSetInteger(0, obj, OBJPROP_COLOR, pc);
トレーダーが結果を監査するために、DrawPerfectPatternMarkers()は検出を引き起こした正確なローソク足をフレームで囲み、オプションで半透明の色で塗りつぶすこともできます。
ObjectCreate(chartId, markerName, OBJ_RECTANGLE, 0, startTime, candle.low, endTime, candle.high);
最後に、ShowLegendがtrueの場合、DrawPatternLegend()はすべてのパターンとそれぞれの総ヒット数を画面左上のオーバーレイに一覧表示し、CSVエクスポートが有効であれば、ExportDetectionsToCSV()が検出記録を指定されたファイルに書き出します。
ObjectSetString(0, nm, OBJPROP_TEXT, StringFormat("%s : %d", g_patterns[p], g_pattern_hits[p]));
EAのアラート機構は、精度重視でノイズを最小限に設計されています。ゾーン描画後、g_alert_sent[]がリセットされ、アラートが有効な場合はCheckAndAlertApproachingZones()が呼ばれ、現在のBid価格を各ゾーンの中点と比較します。絶対距離がピップス閾値より小さく、クールダウン期間が経過しており、かつHTFルールが満たされていれば、単一のアラートが発生します。このアラートにはゾーンID、通貨ペア、時間足、中点価格、スコア、HTF確認ステータスが含まれ、設定されていればサウンドが再生され、ターミナルが許可していればプッシュ通知も送信されます。重要なのは、該当ゾーンのアラートフラグが設定されるため、価格が閾値以上に離れて再び戻るまで追加のアラートは発生せず、アラートは決定的かつ実行可能になる点です。
if(dist <= tol && !g_alert_sent[i]) { Alert(msg); g_alert_sent[i] = true; }
ScanAndDraw()やアラート機能に加え、EAは各ローソク足タイプごとのパターン検出用ヘルパーも実装しています。たとえばCheckHammerFromArray()は、ローソク足の実体サイズを全体のレンジと影の比率と比較することで、取引上の定義に沿った正確なハンマーを識別します。これにより、適切な反転形状を欠く「似て非なる」ローソク足による誤検出を防ぎます。同様の関数は、十字線、逆ハンマー、包み足、明けの明星、宵の明星、ピンチ(ツイーザー)、スピニングトップ、丸坊主などにも存在し、すべて始値・終値の関係やヒゲの比率に基づく定量的ルールで設計されています。
return (body/range<0.35 && lowerShadow>=1.8*body && upperShadow<=0.6*body);
厳密な検出アルゴリズムをリアルタイム監視、チャート上のインタラクティブ機能、明確な可視化、統計的エクスポートと組み合わせることで、Pattern Density Heatmap EAは、価格履歴における主要なローソク足パターンの分布を動的かつデータ駆動型でマッピングし、その情報を将来のサポート・レジスタンスゾーンに変換し、価格がこれらのレベルに再接近した際に行動できるアラートをトレーダーに提供します。
結果
本セクションでは、PatternDensityHeatmap.mq5 EAによって生成される視覚的および定量的な結果を示します。各図が何を示しているのか、出力がどのように生成されたのか、使用したテストパラメータ、ツール実行時の実務的な注意点、そして単一パターンテストから得られる主要な知見について明確に説明します。
概要
以下のアニメーションおよびスクリーンショットは、EAが価格履歴をスキャンし、ローソク足パターンを検出し、検出ポイントを価格ビンに集約し、密度ゾーンを描画する様子を示しています。
- ゾーンの厚みと不透明度は検出強度を反映します。
- オプションのパターン別レイヤーにより、どのパターンがゾーン形成に寄与しているかを確認できます。
- フレーム付きマーカーは正確なローソク足一致を検証し、
- 右側のラベルにはヒット数、スコア、HTF確認が表示され、簡単に検証できます。
このシーケンスは、以下の両方を示しています。
- 複数パターンを組み合わせたコンポジットスキャン
- ハンマーおよびドージに焦点を当てた単一パターンテスト
フルリスキャンアニメーション(複合パターン)
PatternName = "hammer, doji"を設定した完全な再スキャンおよび描画処理です。ゾーンがチャート上にリアルタイムで形成され、パターン別レイヤーが表示され、マーカーが該当ローソク足をフレームで囲みます。複数パターンからヒートマップがどのように生成されるか、またUIトグル(Rescan、Layers、Decay、CSV、Polarity、Legend、Markers)がリアルタイムでどのように反映されるかを示します。

上図は、Pattern Density Heatmap(複合)の動作例です。Rescanによりパターン検出が色分けされたゾーンへ変換され、パターン別レイヤーとフレーム付きマーカーが寄与内訳と正確な一致を強調します。
ハンマー(単一パターンテスト)
- PatternName = "hammer"のみを使用して生成されたヒートマップです。
- 主要なハンマークラスタとEAのヒット数(hammer: 29)が表示されます。
- このビューは、ハンマーの集中が価格の反応レベル(サポート)と一致しているかを確認し、ビンサイズやヒット閾値を調整してゾーン精度を高めるために使用します。

上図は、ハンマー単一パターンテスト(count = 29)を示しており、強調された帯はサポートゾーン推定に使用される集中領域を示します。
十字線(単一パターンテスト)
- PatternName = "doji"のみを使用して生成されたヒートマップです。
- 複数の細い十字線クラスタとEAのヒット数(doji: 67)が確認できます。
- これにより、十字線がレンジ内で集中しているのか、広範囲に分散しているのかを判断できます。

上図は、十字線単一パターンテスト(count = 67)であり、細い帯が重要な価格帯周辺で繰り返される方向感のないローソク足を示します。
使用されたテストパラメータ
| テスト | パターン名 | LookbackBars | Bincount | MinHitsToShow |
|---|---|---|---|---|
| GIF | ハンマー、十字線 | 2000 | 40 | 2 |
| 図1 | ハンマー | 500 | 40 | 2 |
| 図2 | 十字線 | 500 | 40 | 2 |
出力の生成方法
各実行において、EAはまずチャートから直近のLookbackBars分の市場データを読み込みます。その範囲内の最安値と最高値を算出し、価格の縦軸を均等に分割するための正確なbinSizeを計算します。続いてスキャンループが各バーを個別に処理し、たとえばCheckHammerFromArray()やCheckDojiFromArray()といったパターン検出アルゴリズムを適用して、対象のローソク足パターンに該当するかを判定します。パターンが検出された場合、EAは極性アンカーのルールに応じて(中央値・高値・安値のいずれか)対応する価格ポイントを算出し、該当するビンのインデックスへマッピングします。その後、該当ビンのカウンタをインクリメントし、Recency Decayが有効な場合は重み付けを適用して、新しい検出結果ほど影響力が高くなるよう調整します。
ヒット数がMinHitsToShowの閾値を超えたビンは、ZoneRecエントリへ昇格します。これらのゾーンは上位足による確認処理を受けた後、スコアリングおよびソートがおこなわれ、より強い反応が期待される領域が優先されます。上位のゾーンはOBJ_RECTANGLEとして塗りつぶし表示され、必要に応じてパターン別レイヤーや、検出をトリガーした実際のローソク足を囲む矩形マーカーも描画されます。各ゾーンの横にはラベルが配置され、総ヒット数、正規化スコア、HTF(上位足)確認の有無などの主要な情報が表示されます。CSVエクスポートが有効な場合は、各検出結果のデータがファイルに記録され、オフライン分析に利用できます。
実務上の注意
検出データをCSVへエクスポートする場合、ファイルはターミナルの作業ディレクトリに出力されます。そのため、MetaTrader 5にファイルシステムへのアクセス権限が付与されていない場合、エクスポートは失敗します。ライブの接近アラートロジックはゾーンラベルのテキスト内容に依存しています。そのため、ラベルオブジェクト名を手動で変更すると、アラートシステムがゾーンを正しく追跡できなくなる可能性があります。EAが作成するすべてのチャートオブジェクトには、他のインジケーターやEAとの競合を避けるため、「PDHP_」プレフィックスが付与されています。オブジェクト作成に失敗する場合、名前の衝突やLookbackBars設定に対して履歴バーが不足していることが原因である可能性があります。
Recency Decayの挙動はDecayHalfLifeパラメータによって制御されます。値を小さくすると古い検出の影響が早く減衰し、最近のパターンヒットの重みが強調されます。極性アンカーは個別に検証することを推奨します。この機能は検出ごとに使用する価格ポイントを変更し、強気パターンでは安値、弱気パターンでは高値を基準とします。特定の戦略ではゾーンの整合性を高める効果がありますが、単一パターンでのテストによる検証が必要です。
要点まとめ
GIFで示された複合スキャンでは、複数のパターンタイプが重なり合うことで、視覚的にも明確で強力なゾーンが形成されることが確認できます。このような複合ゾーンは、複数のシグナルの一致を条件とすることで、より高い信頼性を求めるトレーダーに適しています。ハンマーの単一パターン検証では、1つの集中したクラスタ(count = 29)が確認され、強いサポート領域を示唆する結果となりました。これは単一パターンでもエントリバイアスの判断に有効であることを示しています。対照的に、十字線の単一パターンテストでは、複数の細い帯(count = 67)が形成され、市場の迷いが異なる価格帯に分散していることが示されました。これらの十字線群は、即時の反転シグナルというよりも、持ち合いとして解釈するのが適切です。
すべてのテストにおいて、単一パターンスキャンは検出ロジックの検証および、どのパターンにより高い重みを与えるべきかを判断するうえで不可欠であることが確認されました。このプロセスにより、複合ヒートマップの出力が、実際に有効性の確認されたパターンに基づいて構築されることが保証されます。
結論
Pattern Density Heatmapは、プライスアクション分析ツールキットにおける大きな進化を示すものです。本連載の第51回で単純なローソク足パターン検索およびアラートツールとして始まったものが、現在では過去のローソク足挙動に基づいて統計的に有意な価格ゾーンを特定、定量化、追跡できる高度な市場マッピングシステムへと発展しました。複数のパターンを測定可能な価格ビンへ自動的に集約し、それらをスコアリングし、さらに上位時間足データで検証することにより、本インジケーターはパターントレードを単なる視覚的な判断からデータドリブンなプロセスへと変革します。トレーダーはもはや直感のみに頼る必要はなく、市場が繰り返し反応してきたポイントをリアルタイムで把握し、価格が高密度ゾーンへ接近した際にアラートを受け取ることが可能になります。
これにより、サポートおよびレジスタンスの捉え方が大きく変わります。もはや目視で引かれる主観的なラインではなく、明確な検出統計に裏付けられた実証的なゾーンとして認識されます。これらのゾーンは、将来の市場の動きに影響を与える可能性が高いレベルを示しており、トレーダーに対してエントリーおよびエグジットのタイミングを支える客観的な基準を提供します。さらに、視認性の高いヒートマップ表示、正確なキャンドルマーカー、接近アラート、そしてエクスポート可能なデータセットの組み合わせにより、本ツールは非常に高い汎用性を持ちます。デイトレードやスキャルピングから数日にわたるスイングトレード、裁量取引からCSVデータを取り込む完全自動化システムまで、幅広い取引スタイルに適用可能です。
実務的な意味合い
- 反応後の追従ではなく、事前の予測に基づいた売買タイミングの向上を実現します。
- 過去に強く反応したゾーンへのエントリーを回避することで、リスク管理が改善されます。
- 多時間軸のコンフルエンスにより、戦略の信頼性が向上します。
- オフライン統計分析や機械学習モデリングに活用可能な拡張性のあるデータセットを提供します。
Pattern Density Heatmapをワークフローに統合する際には、パターンリスト、ルックバック期間、HTF設定をさまざまに試し、ご自身の取引期間および対象市場に最適な構成を見つけてください。これにより、本ツールの潜在能力を最大限に引き出し、市場の反応が集中している隠れたクラスタを、実践的かつ検証済みのサポート・レジスタンスマップへと変換することが可能になります。Pattern Density Heatmapを用いることで、サポートやレジスタンスはもはや推測ではありません。測定され、マッピングされ、あとは価格による確認を待つだけの状態になります。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/20390
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。
MQL5での取引戦略の自動化(第44回):スイングハイ/ローのブレイクによる性格の変化(CHoCH)検出
MQL5におけるARIMA予測指標
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
MQL5での取引戦略の自動化(第43回):適応型線形回帰チャネル戦略
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
おはようございます、このインジケーターを使用してEAボットを作成してもらえますか?
フリーランスセクションに 仕事として要件を投稿してください。