無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
エキスパート

RegimeRouter — レジームごとの勝率台帳を備えたトレンド/レンジ分類器 - MetaTrader 5のためのエキスパート

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist において  Freelance
  • パキスタン
  • 1596
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| Japanese English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ビュー:
10
評価:
(2)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

RegimeRouter — レジームごとの勝率台帳を備えたトレンド/レンジ分類器


問題点

トレンドフォロー型ルールはレンジ相場では損失を出し、平均回帰型ルールはトレンド相場では機能しなくなる。多くのEAはどちらか一方を選択し、市場がそれに沿うことを期待している。一般的な対処法は、単一のADXフィルターを用いることだ。しかしADXは「方向性の強さ」という一点のみを測定するものであり、リターンが実際に持続的であるか、あるいは平均回帰的であるかについては何も示さない。

分類方法

各クローズバーごとに、直近の価格系列の3つの独立した特性を測定します。

  • ADX — 従来の方向性の強さ。
  • ハースト指数 — 対数リターンの再スケーリングされたレンジ(R/S)分析。0.5を超えると、その系列は持続的である。0.5未満の場合は非持続的である。0.5の場合はランダムウォークである。
  • ラグ1自己相関 — ある値動きの後に、同じ方向への値動きが続く傾向があるか、それとも急反発が起こる傾向があるか。

それぞれが1票を投じます。トレンドの場合はプラス1、レンジの場合はマイナス1、判断不能の場合は0です。投票数は合計されます。合計がどちら の方向でも InpMinVotes を超えた場合、その相場環境は「TREND」または「RANGE」となります。そうでない場合は「NEUTRAL」となり、EAは一切取引を行いません。 3つの指標のうちどれか1つでも計算できない場合は、その指標は投票せず、そのバーは「中立(NEUTRAL)」となります。重要なのは、指標間の合意が求められる点です。指標が1つだけでは、余計な手順を踏んだコイン投げに過ぎません。

ルーティングの仕組み

相場状況 モジュール
TREND Nバーの高値または安値のブレイク。ただし、高速および低速のEMAがすでに指し示している方向でのみ考慮される。
RANGE 価格のZスコアを、その移動平均線に対して伸長させた値でフェードする。ローテールを買い、ハイテールを売る。
中立 何もしない。

取引明細

すべてのポジションは、 InpMagicBase にレジームIDを加えた マジックナンバーで開設されるため、取引を生成したレジーム情報が取引自体に記録される。起動時、EAは取引履歴を走査し、ポジションIDごとに取引をグループ化し、記録を再構築する。この記録は再起動後も維持され、別のターミナルへ移動しても保持される。

各モジュールについて、生の勝率、ウィルソン95%下限、そのモジュール自身の平均勝額と平均損失から導かれる損益分岐点となる勝率、プロフィットファクター、および評価を報告します。

TREND 96 取引 38 勝 生勝率 39.6% ウィルソン95%下限 30.4% 損益分岐点勝率 34.2% PF 1.26 純利益 +734.84 [未検証]

重要なのは真ん中の2つの数値です。2Rのトレンドフォロワーは、勝率がおよそ34%以上であれば利益を出せます。 1Rのフェード戦略には50%以上の勝率が必要です。また、6回のトレードからの生勝率は、何の証拠にもなりません。結論とは、単に下限値が損益分岐点を上回るかどうかであり、これが少数のサンプルでも成立する「このモジュールは機能する」という唯一の基準です。

A/B切り替え

InpForceRegime はルーターを 無効化し 、すべての取引を1つのモジュールに強制的に通します。同じ銘柄と期間を3回実行します――まずAUTO、次にALWAYS_TREND、そしてALWAYS_RANGE――これにより、分類器が何か付加価値をもたらしているかどうかを直接測定できます。 強制実行時でも3つの測定値は記録されるため、ルーターが拒否したであろうバーにおいて、強制適用されたモジュールがどのように機能したかを確認できます。

信頼する前に、必ずこのテストを行ってください。ルーティングの考え方は仮説であり、結果ではありません。

バックテスト

H1 · 2026年1月1日~2026年9月20日 · 10,000 USD · ランダム遅延有効 · すべての入力パラメータはデフォルト設定。2つの銘柄、いずれも表示。

EURUSD H1

指標 値
純利益合計 +900.42
粗利益/粗損失 3 712.84 / 2 812.42
利益率 1.32
期待ペイオフ 9.00
回収率 1.71
取引総数 100
最大残高のドローダウン 505.32 (4.56%)
最大エクイティ・ドローダウン 527.80 (4.76%)
モジュール 取引 勝ち 生データ ウィルソン95%低値 純
トレンド 96 38 39.6% 30.4% +734.84
範囲 4 4 100.0% 51.0% +165.58

96 + 4 = 100回の取引、そして +734.84 + 165.58 = +900.42 となるため、台帳はテスターレポートと完全に一致しています。

XAUUSD H1 — 同じEA、同じ設定、同じ期間

指標 値
純利益合計 −1 554.11
最終残高 8 445.89
取引総数 85
モジュール 取引 勝利数 生データ ウィルソン95%ロー 純
トレンド 78 26 33.3% 23.9% −1 576.33
範囲 7 4 57.1% 25.0% +22.22

78 + 7 = 85回の取引で、−1,576.33 + 22.22 = −1,554.11。これは損失を出しています。意図的に勝ちトレードの隣に掲載しているのは、うまくいった銘柄だけを示したリストでは、そのEAについて何も分からないからです。

この結果が示すこと、示さないこと

ご利用になる前に、この部分をお読みください。

  • TRENDモジュールは、どちらの銘柄でもその有効性が実証されていません。 EURUSDでは 、平均利益が93.35、平均損失が48.49であったため、損益分岐点に達するだけでも約34.2%の取引で利益を出す必要がありました。実際の勝率は39.6%でした。 しかし、その勝率に対するウィルソン95%下限は30.4%であり、これは損益分岐点を下回っています。このサンプルサイズでは、この結果はエッジが全くないという見解と一致しています。 XAUUSDでは、同じモジュールの勝率は生データで33.3%、下限値で23.9%となり、損失を出しました。どちらの場合も結論は同じです。現時点では十分な証拠がありません。
  • EURUSD の勝率で 下限値が損益分岐点を上回るには、およそ320回の取引が必要となる。H1足での1銘柄で約9ヶ月で100を稼いだことから、これはポートフォリオの問題であり、バックテスト期間の不足による問題ではない。
  • RANGEモジュールは実質的に未検証です。 EURUSDで 4回 、XAUUSDで7回の取引が行われました。EURUSDでの100%勝率は意味を成しません。まさにそれが、ウィルソン欄が存在する理由です。
  • アウトオブサンプルテストは行われていません。 1 期間、1時間足、2銘柄のみです。
  • モデリングは「毎ティック」で行われており、実際のティックデータではありません。 決済は ブローカーのSL(ストップロス)とTP(テイクプロフィット)に委ねられているため、バー内の価格推移が重要になります。結論を出す前に、実際のティックデータで再実行してください。

私がこれを公開するのは、測定手法そのものが有用だからであり、検証済みの優位性を売り込むためではありません。A/Bテストを実行してください。もしこのルーターが、あなたの銘柄において自身の2つのモジュールを上回らないのであれば、その事実も知っておく価値があります。

実行上の注意事項

  • シグナルはバーの終値で評価されるため、本ツールはM15以上の時間足向けに構築されています。
  • ポジションはストップなしでオープンされ、その後、実際の約定価格に基づいてストップが設定されます。約定前のスナップショットから計算されたストップは、注文が約定する時点で既に無効になっている可能性があります。
  • ストップの設定に失敗した場合、ポジションは無防備なまま放置されることなく、直ちに決済されます。
  • ストップ距離は、その銘柄固有のストップレベルおよびフリーズレベルに制限されます。
  • 決済はブローカーのSLおよびTPに準じます。手動による時間指定の強制決済機能はありません。
  • トレンドトレード用のオプションの ATR トレーリングストップがあり、1 バーにつき最大 1 回、エントリーバーには適用されません。
  • 一度に1つのポジションのみ。ネッティング口座では、同じ銘柄に対する2つ目の注文は、独自の取引として成立するのではなく、既存のポジションに統合されます。そうしないと、台帳が黙って破損してしまうからです。
  • リスクベースのロットサイズ設定、1日の損失制限、1日の取引上限、スプレッドフィルター、最低テイクプロフィット対スプレッド比率、およびオプションのセッションフィルター。

主な入力パラメータ

入力 デフォルト 機能
InpForceRegime 自動 1つのモジュールに強制し、分類器のA/Bテストを行う
InpMinVotes 2 レジームを確定するために必要な3票のうちの票数
InpADXTrendLevel / InpADXRangeLevel 25 / 20 ADXの投票閾値
InpHurstBars 256 ハースト推定値より遅れたリターンのバー数
InpHurstAdaptive オフ 固定水準ではなく、ハース推定値自身の分布に基づいて評価する
InpAutoCorrThreshold 0.05 自己相関がこの閾値を下回った場合にのみ投票する
InpBreakoutBars 20 トレンドモジュール:ブレイクアウト対象のN本の高値/安値
InpRangeZEntry 2.0 レンジモジュール:フェードを行うZスコア
InpRiskPercent 0.5 1取引あたりのリスク(残高に対する割合)
InpMagicBase 772000 これにレジームIDが追加されます

ハースト閾値に関する注記

InpHurstAdaptive という入力項目があり、デフォルトではオフになっています。

ハースト指数に関する教科書的なトレンド/レンジラインは 0.5 です。しかし実際には、そのラインは誤った位置にあります。R/S 推定量は有限のサンプルでは上方バイアスがかかるため、通常の系列を 256 バーで推定すると、結果は 0.5 を大きく上回ってしまいます。 EURUSDのH1チャートで測定したところ、平均値は0.568となり、419回の観測のうち0.45を下回ったのはわずか2回でした。0.45 / 0.55という固定バンドに対して、この投票指標は何も測定できていません。これは事実上、常に「TREND」に投票しているのと同じ状態です。

InpHurstAdaptive を有効にすると、 絶対的な尺度が外され、代わりに相対的な質問が投げかけられます。すなわち、「この時系列は、この銘柄の最近の動向よりも持続性が高いか?」という問いです。直近N回の測定値が保持され、0.5ではなく、その履歴のパーセンタイルに基づいて投票が行われます。

これには実質的なコストが伴います。仕組み上、この「voter」は市場の動向にかかわらず、バーの一定割合に対して「RANGE」に投票することになります。したがって、これはリライトではなく、切り替え機能です。上記のバックテストはこれをオフにして実行されたため、デフォルトではオフになっています。また、結果が確認されていない設定をデフォルトとして提供したくありません。

利益が保証される戦略など存在しません。これは、測定機能が組み込まれたテスト用のフレームワークを提供するものです。これ自体が優位性をもたらすわけではありません。

— アリ・ラージプート


MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/77535

ワンクリック・トレード・マネージャー — リスクに基づいたロットサイズ設定、エントリー、ストップ、ターゲットをワンクリックで設定 ワンクリック・トレード・マネージャー — リスクに基づいたロットサイズ設定、エントリー、ストップ、ターゲットをワンクリックで設定

リスク率とストップ距離に基づいてロット数を算出し、ストップロスとテイクプロフィットをあらかじめ設定した上で取引を開始します。決して自動で取引を行うことはありません。

Contract Sizer: ladder, floor and a breaker that survives a deposit Contract Sizer: ladder, floor and a breaker that survives a deposit

それぞれ異なる働きをする3つのポジションサイズ調整による保護機能。これらを混同してしまうことが、多くの口座が全損してしまう原因です: - ラダー:残高Xごとに1契約。手動でのロットサイズ設定の場合でも、常に上限(CAP)として適用されます; - フロア(floor):最低資本額を下回ると取引を行わず、新たな入金が求められます; - ブレーカー(breaker):口座残高の規模に関わらず、ピーク値からX%下落した時点で取引を停止し、自動的に再起動することはありません。 このライブラリが解決し、他のほとんどが解決できていない問題:入金は利益ではなく、出金は損失ではありません。 ブレーカーは、残高のピーク値に対する下落幅を測定します。この処理を行わない場合、ドローダウン中に追加入金がされると、残高とピーク値が同時に上昇し、保護機能が最も役立つべきタイミングで下落を検知できなくなってしまいます。この場合、入出金によってピーク値が同額だけずれてしまいます。 ピーク値はファイルに保存されます。ターミナルの再起動時にピーク値を忘れてしまうブレーカーは、ブレーカーとは言えません。 デモでは、ドローダウンの底値での入金状況をシミュレートしています。「入金」をオンとオフの両方で実行し、「下落」の列を比較してみてください。

Adaptive Moving Average (AMA) Adaptive Moving Average (AMA)

適応移動平均線は、ノイズの影響を受けにくい移動平均線を作るときに使われ、トレンドを検知する際にラグが最小に抑えられるという特徴を持ちます。

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。