私たちのファンページに参加してください
- ビュー:
- 17
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
概要
MetaTraderに組み込まれている機能のほとんどは、カレンダーに基づいて動作しています。 バーは1分ごと、1時間ごと、1日ごとにクローズし、インジケーターやエキスパートアドバイザーは、その固定されたグリッドに基づいて市場をサンプリングします。しかし、市場にとって「1分」という概念は存在しません。ニュース発表の最中には、1分間に100回もの意味のある値動きが起こり得る一方で、静かな取引時間では1時間ほとんど情報が得られないこともあります。時計に基づくサンプリングでは、これら両方に同じ程度の注意が払われてしまいます。
「本質的時間(Intrinsic time)」とは、チューリッヒのオルセン研究グループによって定式化された代替案です。つまり、時間が経過するタイミングを価格に決定させるというものです。閾値となるデルタを 固定します。時計の針が進むのは、価格が直近の極値からデルタ分反転し、方向転換 が生じたときのみです。 方向転換が確定した後も、価格は通常しばらくの間新しい方向へ動き続け、その継続部分が「オーバーシュート」となる。価格の推移全体は、方向転換区間とオーバーシュート区間が交互に繰り返されるシーケンスとなり、論文ではこれを「コースライン」と呼んでいる。これにより、荒れた1時間と静かな1時間は、同じ単位、すなわち「イベント」で測定されることになる。

ギザギザした価格推移が、固定された閾値に基づいて方向転換(実線)とオーバーシュート(破線)の区間に分解された。内在時間クロックは、イベントが発生した時のみ刻まれる。
このエキスパートアドバイザーは、ゴルブ、グラットフェルダー、オルセンがその「時計」に基づいて構築した逆トレンド型コースライン・トレーダー「アルファ・エンジン」を、純粋にMQL5に移植したものです。 このEAは、本質的なイベントにおいてトレンドに逆らう方向でポジションを建て、価格が引き続き逆方向に推移する場合(カスケード)、次のイベントでポジションを追加し、価格が反転するにつれて(デカスケード)、追加したポジションを利益確定のために一つずつ決済します。 ポジションは常に固定の増分のみ追加されるため、これはマーチンゲール戦略ではありません。意思決定コア、対数閾値ランナー、および情報理論に基づく流動性指標は、著者らの参照用Javaコードを1行ずつ翻訳したものです。ターミナルに合わせて調整されているのは注文処理部分のみです。

ロングのエージェントは、価格が下落するにつれて一連の本質的イベントを通じてカスケード(ポジション追加)を行い、価格が回復するにつれてデカスケード(利益確定によるポジション縮小)を行います。
取引方法
このEAは、論文で規定されているアンサンブルを実行します。すなわち、0.25%、0.5%、1%、1.5% の4つの閾値それぞれについて、ロング専用とショート専用のエージェント を各1体ずつ、計8体の独立したエージェントで 構成されています。 各エージェントは独自のマジックナンバーを通じて注文とポジションを管理するため、エージェント同士が互いの取引に干渉することは決してありません。
ライフサイクル全体はヘッジ用口座での指値注文 によって実行され、各カスケード段階は当然ながら独立したポジションとなります。ロングエージェントは、次の下方の本質的イベントレベルに単一の買い指値注文を待機させ、約定するたびに、エントリー価格から正確にデルタ分上方に利益確定注文を設定したポジションを建てます。この利益確定注文が「デカスケード」となります。 価格が下落すると、買い指値のラダーが約定し、価格が回復すると、利益確定注文がそれを一つずつ削減していく。ショート・エージェントはこれと鏡像の関係にある。待機注文は何か変化があった場合(本質的イベント、ティアの切り替え、または約定)にのみ再発注されるため、EAは毎ティックごとに注文を乱発することはない。
純粋な逆張り戦略がトレンドに巻き込まれて暴走するのを防ぐために、2つの防御策が設けられています。1つ目は、ポジション残高に基づく偏り です。各エージェントは毎ティックで3つのランナーを進め、現在のポジション残高によってどのランナーが注文を主導するかが決定されます。ポジション残高が増加するにつれて、不利な閾値は有利な閾値に対して広がっていくため、エージェントはポジションの追加を控え、手仕舞いを積極的に行うようになります。 2つ目は「比例配分」です。在庫が増加するにつれて、追加される単位数は縮小します。
| 在庫(単位) | アクティブなランナー | 不利:有利な閾値 | 追加単位 |
|---|---|---|---|
| 15未満 | 対称 | 1:1(各方向の差) | 1 |
| 15~30 | 最初のスキュー | 2:1(1.5 デルタ対 0.75 デルタ) | 1/2 |
| 30以上 | 第2の偏り | 4 : 1(0.5 デルタに対する 2 デルタ) | 1/4 |
さらに、この単位は流動性指標 L によってスケーリングされます。L は、直近の価格変動がどれほど正常であるかを情報理論的に測定する指標です。これは、各本質的なイベントをシンボルとして扱い、イベントシーケンスのサプライズ(自己情報量)を平均化し、標準化した上で、正規分布関数を介してマッピングします。 価格が通常の市場のように振る舞う場合、Lは1付近にあり、価格の推移が異常に一方的になると0に向かって低下する。Lが0.5以上の場合、加算値はそのまま維持され、0.1から0.5の間では半分に減らされ、0.1未満では10分の1に削減される。 この指標は、独自のより広いオーバーシュート閾値(デルタの2.525729倍)に基づいて動作する。この値は、論文においてLが正常な行動と異常な行動を可能な限り明確に区別できるように設定されたものである。
抽象単位はInpLotPerUnit 入力を通じてロットに変換され、InpMaxUnits は 各エージェントの在庫上限を制限します。この上限は、論文では触れられていないリスク管理の一環です。上限に達すると、エージェントは待機中の注文をキャンセルし、それ以上の追加注文を行わなくなりますが、未決済の利益確定注文は引き続き機能します。
推奨設定
| 設定 | 推奨値 | 備考 |
|---|---|---|
| 銘柄 | EURUSD | 開発およびテストに使用された銘柄であり、本論文のスケーリング則が検証された対象でもあります。閾値は相対値(価格に対するパーセント)であるため、他の流動性の高いFXペアでも再スケーリングなしで動作します。 |
| 時間枠 | 任意 | EAは固有時間においてティックごとに駆動されるため、チャートの時間枠はその判断に影響を与えません。 |
| 口座タイプ | ヘッジ | 必須。各カスケードステップは個別のポジションである必要があるため、ネッティング口座では、EAは設計上、メッセージを表示し、INIT_FAILEDを返します。 |
| テスターモデル | すべてのティックは実際のティックに基づいています | 固有のイベントはティックストリーム上で定義されるため、バーベースのモデルではイベントとリミット注文の約定の両方が正しく表現されません。テスターはログインしている口座の証拠金モードを継承するため、テストを行う前にヘッジング口座にログインしてください。 |
| InpLotPerUnit | 0.02(初期設定)、最大0.4 | 0.01ロット刻みでは、0.4ロット前後の場合のみ、半ロットや4分の1ロットといった単位および流動性ヘアカットが個別のサイズとして扱われます。それより小さい場合、追加注文は最小ロット数に切り上げられます。しきい値のスキューはランナー内に存在するため、影響を受けません。 |
バックテスト結果
EURUSD、実際のティックに基づくティック単位、2026年2月2日から7月31日まで、ヘッジ口座の初期預金10,000、デフォルト設定(InpLotPerUnit = 0.02、InpMaxUnits = 30)で、8つのエージェントすべてを有効化。 閾値、ポジションサイズ設定ルール、およびテイクプロフィットは論文のものをそのまま使用しており、この銘柄や期間に合わせて調整されていません。

EURUSDの6ヶ月間の実行に関するストラテジーテスターレポート。
この実行では、318のポジションにおいて、リターン+10.68%、プロフィットファクター2.21、最大エクイティドローダウン10.10% を記録しました。この純数値には2つの全く異なる収益の流れが隠されており、各ポジションの決済方法別に分割して分析する方が、総計を見るよりも有益です:
| 6ヶ月間の結果の内訳 | 金額 |
|---|---|
| 294のポジションがテイクプロフィットで決済 | +1,934.14 |
| テスト実行終了時にテスターによって決済された24ポジション | -823.55 |
| エントリー時に発生した手数料 | -42.14 |
| 純利益 | +1,068.45 |
両方の決済行にはすでにスワップが含まれており、その額は-620.38で、手数料をはるかに上回っています。数週間にわたってカスケードポジションを保有し続けることができるモデルでは、スプレッドよりも資金調達コストの方が主要なコストとなります。テスターが決済した24のポジションは、回復することのなかったカスケードポジションであり、実取引であれば現在も未決済のままとなっているでしょう。

残高(青)は、テイクプロフィットが発動するにつれて増加します。純資産(緑)は未決済のカスケードを反映しており、テスターが最終日にそれらを決済した時点で初めて残高と一致します。
これは1つの通貨ペアにおける6ヶ月間のデータであるため、見出しとなるようなパフォーマンス数値ではなく、メカニズムが機能していることを示しているに過ぎない。利益が出ているポジションを決済し、損失が出ているポジションを保有し続ける戦略であれば、残高は増加する。だからこそ、純資産の推移と強制決済の部分こそが研究する価値があるのだ。
入力パラメータ
| パラメータ | デフォルト | 説明 |
|---|---|---|
| InpLotPerUnit | 0.02 | 紙のサイジングの1抽象単位あたりのロット数。0.01ロットのシンボルで小数点以下のサイジングを正確に保つには、この値を0.4に近づけるか、より小規模に取引するにはこの値を下げます。 |
| InpMaxUnits | 30 | エージェントごとの在庫上限(単位)。上限に達すると、新たな買い注文は出されず、未決済の利益確定注文がポジションを解消するまで放置されます。最も深いスキュー階層は30単位を超えてからしか発動しないため、デフォルトの上限では到達することはありません。 |
| InpMagicBase | 990000 | 基本マジックナンバー。8つのエージェントは、InpMagicBaseからInpMagicBase + 7の範囲で取引を行うため、当該口座で他のEAがこの範囲を使用している場合は、この値を変更してください。 |
| InpTradeLong | true | 4つのロング専用エージェントを実行します。 |
| InpTradeShort | true | 4つのショート専用エージェントを実行します。両方を有効にすると、アンサンブルは本論文の完全対称な設定となります。 |
独自のコードでのクラスの使用
1つのエージェントは、独立したクラスであるCAeLiveTraderです。このクラスは他のエージェントについて何も認識していないため、EAは単一のエージェントを実行したり、異なるしきい値セットを設定したり、必要な数のインスタンスを作成して複数の銘柄を処理したりすることができます:
#include <IntrinsicTime\AeLiveTrader.mqh> CAeLiveTrader agent; //--- OnInit 内:デルタ 0.5%、1 単位あたり 0.02 ロット、上限 30 単位のロング専用エージェント agent.Init(_Symbol,990100,1,0.005,0.02,30.0); //--- OnTick 内で MqlTick t; if(SymbolInfoTick(_Symbol,t)) agent.OnTickUpdate(t.bid,t.ask,t.time); //--- OnDeinit 内:休止中のエントリーをキャンセルし、ポジションの利益確定水準は維持される agent.Shutdown();
イントリンシックタイム・ランナーも単独で使用可能です。CAeRunnerは 対数価格での上昇・下降しきい値を個別に受け取り、各気配値ごとにイベントコードを返します(方向転換の場合は±1、オーバーシュートステップの場合は±2、 それ以外は±0)を返し、次のイベントが発生する正確な価格を常に把握しています。この特性により、他の戦略にとって自然な指値注文レベルのソースとなります:
#include <IntrinsicTime\AeRunner.mqh> CAeRunner runner; runner.Init(0.005,0.005,0.005,0.005); // デルタ(上昇/下降)、オーバーシュート(上昇/下降) int ev=runner.Run(AeTick(t.bid,t.ask,t.time)); if(ev==AE_EVENT_DC_DOWN) Print("downturn confirmed, next level below: ",runner.ExpectedLowerIE());
流動性インジケーターであるCAeLocalLiquidityも 同様のパターンに従います。しきい値で初期化し、Computationを通じて すべての気配値を投入し、Liq でLの現在の値を読み取ります。
制限事項
デモ口座以外で使用する前に知っておくべき点。
- ポジション全体の決済機能はありません。 論文で参照されているトレーダーは、エージェントの総リターン(実現済み分と未決済分の合計)がデルタに達すると、そのエージェントのポジション全体を決済します。実稼働中のエージェントでは、この動作は再現されません。 不利な状況に陥り、回復しないカスケードは、InpMaxUnitsによって停止されますが、決済はされず、そのテイクプロフィット注文は有効なまま残ります。これがこの設計における最大のリスクであり、上記のバックテストにおける強制決済は、このリスクによるコストです。
- コストの大部分はスワップが占めています。 カスケードは数週間もオープン状態が続く可能性があるため、オーバーナイト金利はスプレッドや手数料よりもはるかに大きな負担となります。実行する前に、ブローカーのスワップを両側とも確認してください。
- 出荷時のロットサイズでは、ポジションサイズの設定が簡素化されます。 1ユニットあたり0.02ロットの場合、フル追加は0.02ロットとなり、それより小さい追加はすべて0.01ロットの最小値に切り上げられるため、ペーパートレードのポジションサイズ段階は2段階に簡略化されます。InpLotPerUnitを0.4付近まで引き上げると、はるかに大きなポジションサイズで、元の段階構造が復元されます。
- 実現利益は優位性ではありません。 ドリフトのないランダムウォークでは、エンジンの実現利益は常にプラスですが、期待値としての総利益はゼロです。1つの通貨ペアと1つのテスト期間だけでは、どちらの観点からも優位性を立証することはできません。
- ランナーは取引セッション外では一時停止します。 EAは、シンボルのセッションが終了するとOnTickから早期に復帰するため、ジャーナルが整理され、バックテストが高速に実行されます。これは、取引が停止している間も気配値を配信し続けるフィードでのみ重要です。
ファイル構造
1つのエキスパートアドバイザーと4つのヘッダーファイルで構成されています。ヘッダーファイルは<IntrinsicTime\...> としてインクルードされるため、Includeフォルダ内のIntrinsicTime サブフォルダに配置する必要があります。
| ファイル | 役割 | 説明 |
|---|---|---|
| Experts\IntrinsicTime\AlphaEngine.mq5 | EA | ヘッジ口座を強制し、論文で提示された 4 つの閾値に基づいて 8 つのエージェントからなるアンサンブルを構築し、取引セッションに基づいてゲート制御を行い、最新気配価格で各エージェントを駆動します。 |
| Include\IntrinsicTime\AeLiveTrader.mqh | ライブエージェント | CAeLiveTrader、実際の指値注文を取引する 1 つのコーストライン・エージェント:在庫によるランナーの選択、分数および流動性に基づくサイズ設定、ロットの正規化、およびデカスケード・テイクプロフィットを備えた単一の待機エントリー。 |
| Include\IntrinsicTime\AeRunner.mqh | イントリンシック・タイム・ランナー | CAeRunner:上昇および下降のしきい値を個別に設定できる対数しきい値型方向転換ランナー。方向転換イベントおよびオーバーシュートイベント、ならびに次のイベントが発生する価格水準を送信します。 |
| Include\IntrinsicTime\AeLiquidity.mqh | 流動性インジケータ | CAeLocalLiquidity:各追加量をスケーリングする情報理論に基づく指標 L。独自のランナーと、参照対象の正規分布関数を備えています。 |
| Include\IntrinsicTime\AeTypes.mqh | 共有タイプ | ビッド/アスクのティック構造、およびランナー、インジケータ、エージェントのすべてが交換する本質的イベントコード。 |
研究の根拠
実装は以下の通りです:
- Anton Golub、James B. Glattfelder、Richard B. Olsen、『The Alpha Engine: Designing an Automated Trading Algorithm』、2017年、SSRN 2951348。
- James B. Glattfelder、Alexandre Dupuis、Richard B. Olsen、「高頻度FXデータにおけるパターン:12の実証的スケーリング則の発見」、Quantitative Finance、2011年。
- 著者らが参照しているJava実装(GitHub で公開)。本移植版では、それらの特異な挙動を黙って修正するのではなく、そのまま維持しています。
関連記事では、方向変化演算子の構築、ボラティリティを一致させたランダムウォークに対する1,780万件の実 EUR/USD ティックデータを用いたスケーリング則の再現、Alpha Engine のクラスごとの詳細な解説、およびランダムウォークによる利益主張の検証を行っています:『Intrinsic Time: From the Directional-Change Scaling Laws to the Alpha Engine』。
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/77871
Repaint Inspector
主張を遡及的に信じるのではなく、インジケーターが再描画されるかどうかを測定します。すでにクローズしたバーについて、任意のカスタムインジケーターのバッファを再読み込みし、値が変化したり、表示されたり、消えたりした回数をカウントするとともに、その現象がまだ発生している最も古い時点を特定します。チャートパネル上の各バッファごとに判定結果を表示し、すべてのイベントをCSVファイルに書き出します。
ATS Liquidity City - liquidity pools and sweeps, drawn as a neon city
ストップがどこに設定されている可能性が高いか、またどのストップがちょうど発動されたかを示します。流動性プールとは、価格がまだ突破していない確認済みのスイング高値・安値、同値の高値・安値(より大きなプール)、および昨日の高値・安値のことです。 バーがプールを越えて取引されると「スイープ」とマークされ、同じバーが再びプールの内側で引けた場合は「グラブ&リジェクト」とマークされます。再描画なし:スイングは、両側でN本のバーが引けた後にのみ使用されます。 パネルはCCanvas上に描かれたネオン街です。価格は空飛ぶ車、売りストップはその下のタワー、買いストップはその上の浮遊プラットフォーム、昨日の水準は金色の看板、サーチライトが空を照らし、ティッカーが今日の「獲物」を表示します。 2つのバッファが、エキスパートアドバイザーで使用するための、上側および下側の最も近いアクティブなプールを提供します。インジケーター専用:取引は一切行いません。
Mirror Hedge EA (Same terminal and account only)
マジックナンバーに基づいて、同じヘッジ口座内で別のEAによって開設、変更、決済された取引をミラーリングします。デフォルトでは方向が反転(買い↔売り、SL↔TP)されるため、実際のスプレッド、スリッページ、約定条件を用いて、戦略の逆の取引をフォワードテストすることができます。
Accelerator Oscillator (AC)
アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。