MQL5におけるタイムギャップ分析(第1回):基本インジケータの構築
現代のアルゴリズム取引において、重要な課題の一つは、市場における大口参加者の存在を検出することです。機関投資家、ヘッジファンド、銀行などは、市場での取引活動に特徴的な「痕跡(フィンガープリント)」を残します。経験豊富なトレーダーは、これらの痕跡を認識し、自身のトレードに活用することができます。その中でも、最も興味深く、まだ十分に研究されていない現象の一つが「タイムギャップ」です。これは、価格があまりにも短時間で通過するため、アルゴリズムでなければ確実に検出できない価格帯を指します。
本記事では、MetaTrader 5向けに、タイムギャップを自動的に検出・分析することに特化した独自インジケータの開発について紹介します。私たちの主な仮説は、大口資金が市場へ流入すると、価格は特定の価格帯を非常に短時間で通過し、その結果、その価格帯ではほとんど取引がおこなわれない期間、すなわち「タイムギャップ」が形成されるというものです。
タイムギャップの理論的背景
大口の機関投資家がポジションを構築しようとすると、まず流動性という根本的な問題に直面します。必要な取引量を確保しながら価格への影響を最小限に抑えるため、大口注文はアルゴリズムによって時間をかけて分割執行されます。また、アイスバーグ注文やダークプールを利用した隠れた流動性も活用され、複数のファンドがエントリーのタイミングを同期させるために協調して行動することもあります。
このような取引の結果、価格は特定の価格帯を極めて短時間で通過し、その価格帯で利用可能な流動性をほぼ完全に使い尽くしてしまいます。その後は、機関投資家のアルゴリズムがすでに執行を完了し、別の価格帯へ移行しているため、そのゾーンは長期間にわたり実質的に「空白」の状態となります。
さまざまな機関投資家による市場への影響を分析することで、タイムギャップが形成されるメカニズムをより深く理解することができます。
| 機関投資家の種類 | 取引規模 | 実行速度 | 不在期間 | ゾーン再検証時の典型的な反応 |
|---|---|---|---|---|
| 中規模ヘッジファンド | 500万~2,000万米ドル | 高速(2~5本のバー) | 8~15本のバー | 強い反発(75%) |
| 年金基金 | 5,000万~2億米ドル | 低速(10~20本のバー) | 20~40本のバー | 中程度の反発(60%) |
| 中央銀行 | 5億米ドル以上 | 超高速(1~3本のバー) | 30~60本のバー | 急激な反発(85%) |
数学モデル
タイムギャップを定量化するために、ボリュームベースの影響係数(VIC)を開発しました。これは次の式を使用して計算されます。
VIC = (V × ΔP × LF × SF) / (T²) where: V - volume of trades in the zone ΔP - price change during passage LF - liquidity factor SF - session activity factor T - execution time in bars
二次関数的な時間依存性は、基本的な事実を反映しています。すなわち、価格変動が大きな出来高を伴ってより速く発生するほど、大規模な機関投資家が市場に影響を与えている可能性が高くなるということです。この数学的枠組みにより、異常に高い取引執行速度を示すゾーンを自動的に識別することが可能になります。
インジケータのアーキテクチャ
Volume Time Gap Analysisインジケータはモジュール型アーキテクチャで構成されており、潜在的なインパクトゾーンを特定するスキャンモジュール、ギャップ特性を計算する分析エンジン、アクティブなゾーンを追跡するモニタリングシステム、そしてチャート上に結果を表示する可視化モジュールを含みます。
このアーキテクチャはVolumeTimeGap構造体に基づいており、タイムギャップに関する必要なすべての特性を内包しています。
struct VolumeTimeGap { datetime formation_time; // Gap formation time double price_low, price_high; // Price zone boundaries double volume_concentration; // Concentration of volume-based impact double institutional_footprint; // Imprint of institutional impact double memory_strength; // Market memory strength double liquidation_speed; // Position liquidation speed int test_count; // Number of zone tests double success_rate; // Percentage of successful rebounds bool is_active; // Gap activity status };
この構造体は、ギャップが形成された時点で決定される静的パラメータと、価格がそのゾーンと接触するたびに更新される動的特性の両方を含んでいます。
タイムギャップ検出アルゴリズム
タイムギャップを検出するプロセスは、複雑な一連の操作から構成されています。最初のステップでは、現在の価格レンジを分析ゾーンに分割する適応型グリッドを作成します。このグリッドの密度は、取引対象のボラティリティと分析の深度に応じて自動的に調整されます。
第2段階では、各ゾーンに対して、証拠ベースの詳細分析をおこないます。これには、価格がそのゾーンに存在した時間および不在だった時間の詳細な分析、出来高ベースの特性の計算、そしてゾーンへの出入り速度の算出が含まれます。
第3段階では、収集された証拠が厳格な統計的基準に基づいて、そのゾーンをタイムギャップとして分類するのに十分であるかどうかを検証します。
void ScanForVolumeTimeGaps(int analysis_depth) { double highs[], lows[], opens[], closes[], volumes[]; datetime times[]; if(!PrepareMarketData(highs, lows, opens, closes, volumes, times, analysis_depth)) return; double price_range_max = highs[ArrayMaximum(highs)]; double price_range_min = lows[ArrayMinimum(lows)]; double total_range = price_range_max - price_range_min; int grid_density = CalculateOptimalGridDensity(total_range); double grid_step = total_range / grid_density; for(int level = 0; level < grid_density; level++) { double zone_center = price_range_min + (level * grid_step); double zone_width = grid_step * Price_Zone_Sensitivity; AnalyzeZoneForVolumeGaps(zone_center - zone_width/2, zone_center + zone_width/2, highs, lows, opens, closes, volumes, times); } }各潜在ゾーンは詳細な分析の対象となります。ZoneForensicsと呼ばれる専門的な構造体は、調査対象のゾーンにおける価格挙動の性質についての証拠を体系的に蓄積します。
struct ZoneForensics { int total_appearances; // Total number of price occurrences in the zone int longest_absence; // Longest period of absence double volume_burst_intensity; // Volume spike intensity double exit_velocity; // Zone exit velocity datetime first_contact; // Time of first contact with the zone datetime last_contact; // Last contact time };
検証プロセスには、各ヒストリカルバーの分析が含まれます。具体的には、価格が対象ゾーン内にあるかどうかの判定、各接触時における出来高活動の強度の測定、そしてゾーンへの出入り速度特性の算出がおこなわれます。
証拠十分性の基準
タイムギャップは、厳格なシグナルの判定基準が満たされた場合にのみの形成されます。システムは、ゾーン内における価格の不在期間の最小値、許容される最大滞在時間、出来高ベース影響度の閾値、ならびに速度特性の閾値をチェックします。
bool IsEvidenceSufficientForGap(const ZoneForensics &evidence) { if(evidence.longest_absence < Min_Gap_Bars) return false; if(evidence.total_appearances > Max_Time_In_Zone) return false; double volume_impact = CalculateVolumeImpactCoefficient(evidence); if(volume_impact < Volume_Impact_Threshold) return false; double velocity_score = evidence.exit_velocity / GetAverageMarketVelocity(); if(velocity_score < VELOCITY_THRESHOLD) return false; double confidence_score = (volume_impact * 0.4) + (velocity_score * 0.3) + (evidence.longest_absence / Min_Gap_Bars * 0.3); return confidence_score > CONFIDENCE_THRESHOLD; }
全体的なconfidence_score評価は、出来高ベースの影響、速度特性、そしてギャップの時間的持続期間という3つの主要な要素を統合したものです。閾値が超えられた場合にのみ、新しいタイムギャップが生成されます。
このインジケータにおける中心的な革新は、「機関投資家の痕跡」の計算です。これは、特定のゾーン形成において大規模な機関投資家が関与している可能性を定量的に評価する複雑な指標です。この計算は、活動の時間的集中度、相対的な出来高強度、そして価格変動の速度特性という3つの要素の分析に基づいています。
double CalculateInstitutionalFootprint(const ZoneForensics &evidence) { double speed_component = (evidence.total_appearances > 0) ? evidence.longest_absence / evidence.total_appearances : 0.0; double volume_component = evidence.volume_burst_intensity / GetAverageVolume(100); double velocity_component = evidence.exit_velocity / GetAverageMarketVelocity(); return (speed_component * 0.4 + volume_component * 0.3 + velocity_component * 0.3); }
時間要素は、時間における取引活動の集中度を反映します。すなわち、不在期間と存在期間の比率が大きいほど、機関投資家の影響が存在する可能性は高くなります。出来高要素は、市場の平均的な活動水準に対する取引強度を正規化し、速度要素は価格変動速度の異常性を測定します。
各タイムギャップには動的な「記憶強度」特性があり、これは現在の価格挙動に対するそのゾーンの影響度を示します。この記憶強度は、時間とともに変化し、過去の市場イベントが自然に忘れられていくプロセスと、取引活動の周期的要因の両方を考慮した複雑な式に従って更新されます。
void UpdateGapMemoryStrength(VolumeTimeGap &gap) { double time_elapsed_hours = (double)(TimeCurrent() - gap.formation_time) / 3600.0; double base_decay_rate = 0.05; double daily_cycle = MathCos(2.0 * M_PI * time_elapsed_hours / 24.0); double cycle_factor = 1.0 + 0.1 * daily_cycle; gap.memory_strength = gap.institutional_footprint * MathExp(-base_decay_rate * time_elapsed_hours) * cycle_factor; }
指数関数的減衰は、過去の出来事が現在の価格に与える影響が時間の経過とともに自然に弱まるプロセスをモデル化しています。サイクル成分は取引活動の日々の変動を考慮しており、取引セッションの時間帯によって機関投資家のゾーンの影響力が強まったり弱まったりすることを反映しています。
システムの重要な要素の一つは、タイムギャップが「クローズ」または「埋められた」タイミングを自動的に追跡する機能です。これは、価格がゾーン全体を完全に通過した時点で発生し、その価格帯における機関投資家の関心がすでに尽きたことを示しています。
bool IsGapBeingMitigated(double current_price, const VolumeTimeGap &gap) { for(int i = 0; i < 5; i++) { double high = iHigh(_Symbol, PERIOD_CURRENT, i); double low = iLow(_Symbol, PERIOD_CURRENT, i); double open = iOpen(_Symbol, PERIOD_CURRENT, i); double close = iClose(_Symbol, PERIOD_CURRENT, i); if((high >= gap.price_high && low <= gap.price_low) || (open >= gap.price_high && close <= gap.price_low) || (open <= gap.price_low && close >= gap.price_high)) { return true; } } return false; }
ギャップの解消が検出されると、システムは自動的にそのゾーンの表示を変更し、「クローズ済み」ステータスへと移行させ、この機関投資家レベルのライフサイクルの終了をトレーダーに通知します。
異なる金融商品の特性への適応
外国為替市場は高い流動性と比較的低いボラティリティを特徴としており、Volume_Impact_Thresholdを1.5〜2.0の範囲に引き下げ、Min_Gap_Barsを5〜10バーに設定する必要があります。FX市場の連続的な取引構造により、タイムギャップはより顕著ではないものの、時間的にはより安定したものになります。
株式市場はセッション構造および取引終了時間を持つため、タイムギャップ形成に適した自然な条件を備えています。推奨設定はVolume_Impact_Thresholdを2.0〜3.0、Min_Gap_Barsを8〜15バーとするものです。特に企業イベントや決算発表の期間に形成されるギャップには注意が必要です。
暗号資産市場は極端なボラティリティと大規模な機関投資家の存在を特徴としており、価格変動速度が非常に速いためMin_Gap_Barsを3〜8バーに抑える一方で、Volume_Impact_Thresholdは2.5〜4.0へ引き上げる必要があります。
インジケータのシグナル
タイムギャップは高品質なトレードシグナルを生成する独自の機会を提供します。最も効果的なシグナルはギャップ境界からの反発であり、価格がゾーンに接近し反転の兆候を示した場合に成立します。この成功確率は、ギャップの記憶強度および過去のテスト統計と強く相関しています。
ギャップ解消シグナルは、価格がそのゾーンを完全に通過したときに発生し、ギャップが埋まった後のトレンド継続方向へのトレードに利用できます。特に重要なのはフェイクブレイクアウトシグナルであり、クローズに失敗した試みが逆方向への強い値動きを引き起こすケースです。
私の検証では、反発シグナルが最も高い有効性を示しました。

このインジケータは、実口座でもかなり良好なテスト結果を示しています。

結論と今後の展望
このインジケータは、数学モデル、市場のメモリー評価、そして通知システムを用いて機関投資家の活動ゾーンを特定します。これにより、他の手法のシグナルを補強し、リスク管理をより精密におこなうことが可能になります。
本インジケータは複合的なトレードシステムの一部として特に高い効率を示し、他のテクニカル分析手法のシグナルを補完・強化します。各トレードシグナルの品質を定量化できる能力により、リスク管理およびポジショニングにおいて状況に応じたアプローチが可能になります。
今後の開発計画には以下が含まれます。
- 特定の金融商品に適応するための機械学習の導入
- 市場マイクロストラクチャに基づく新しいメトリクスの追加
- 各アセットクラスに対応したバージョンの開発
- 多時間軸分析による多層的戦略構築
多時間軸分析の実装により、タイムギャップの階層構造を特定できるようになります。すなわち、高時間軸における大規模な機関投資家ゾーンの中に、低時間軸では多数の小さなギャップが含まれるという構造です。これにより、異なる時間的視野を持つ多層的トレード戦略の構築に新たな可能性が開かれます。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/18592
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。
プライスアクション分析ツールキットの開発(第29回):Boom & Crash Interceptor EA
イルカエコーロケーションアルゴリズム(DEA)
金融時系列のテクニカル分析におけるグレーモデルの応用
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは!コンパイル時に警告が出ます。スクリーンショットを添付しました。
を実行したところ、MT5ターミナルがフリーズし、データ転送も停止してしまいました。おそらく、私のPCは新しいタイプのアプリケーションには古すぎるのかもしれません。