私たちのファンページに参加してください
- ビュー:
- 19
- 評価:
- パブリッシュ済み:
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
概要
これは、ダニエル・アレクサンドル・ブロック博士が著書『A Course on Systematic Trading with RMA』で紹介した相対移動平均(RMA) フレームワークを、MetaTrader 5に忠実に移植したものです。 従来の移動平均は、価格のウィンドウを1つの平滑化された数値に集約します。これにより水準はわかりますが、その希少性はわかりません。つまり、高値での引けは周囲の価格から大きく乖離している可能性もあれば、高値であってもウィンドウ内ではごく平凡な値である可能性もあるのです。 RMAは、この2つ目の疑問に答えます。RMAは、トレーリング・ウィンドウを小さな分布として扱い、その中の現在の価格をランク付けし、そのランクを[0, 1] のスケールで報告します。このスケールは、あらゆる銘柄およびあらゆるボラティリティ環境において同じ意味を持ちます。
このフレームワークは3つの層から構成されており、コードもそれを正確に反映しています:
- W 個の終値からなるトレーリング・ウィンドウのSMA を、局所的な平衡点として扱い、ゼロに固定する。
- RMAファミリー:各ウィンドウのランドマークが、その均衡点からどれだけ逸脱しているかを、純粋な比率sma / x - 1 として表したもので、最終終値、最初の終値、中央の終値、およびウィンドウの最小値と最大値で評価される。これらは比率であるため、スケールに依存せず、銘柄間で比較可能である。
- フラクタイルは、ウィンドウを正規化リターン(終値 / SMA - 1)として再表現し、その分布内における現在値、最小値、最大値の順位を決定する。これは論文の付録の定義からそのまま引用した単純な経験的累積分布関数(CDF)であり、f_wは 下流のすべての処理が実際に基づいて取引を行う時系列である。

構築方法:終値のスライディングウィンドウがSMAとなり、終値はそのSMAを中心とした正規化リターンの分布として再表現され、その分布内における現在の価格の順位が、[0, 1]スケール上のフラクタイルとなる。
これらに加え、エンジンには2つの派生指標が組み込まれている。レジーム検出器 は、論文の「相対極値比率(Relative Extremum Ratios)」を用い、最小二乗法による傾き、zスコア、および変動係数によって裏付けを行い、正規化リターンの広がりを「拡大」「縮小」「移行中」の3つに分類する。逆行モニタは、中央値を中心に再調整された分位数であるd_med_wと、直近のバー間の変動のうち上昇した割合を示すD_k を出力します。D_kは 方向性の一貫性を示す指標であり、「この動きは逆方向に向かっている」という判断を、単なる主観ではなく正確なものにします。
2つのプログラムが含まれています。RMA_Engineは すべての系列を計算し、19個すべてをバッファとして出力します。これにより、エキスパートアドバイザーや他のインジケーターは、数学的な処理を再実装して同期がずれることなく、チャート上で正確な数値を読み取ることができます。RMA_Panelは 一切計算を行いません: チャートにすでにアタッチされているエンジンを検出し、そのバッファ群を専用のサブウィンドウにミラーリングするだけです。これは、RMAファミリーがパーセントの分数単位で測定され、d_med_wがゼロを中心にしていることから、どちらもエンジンの0~1軸上では読み取れないためです。
エンジンが描画するもの
エンジンは、縦軸が [0, 1] に固定された別のウィンドウを開き、6つのプロットを描画します:
| プロット | 外観 | 説明 |
|---|---|---|
| 領域 | すべての要素の背後に、全高にわたる色付き帯が表示される | 拡大は緑、収縮は赤、拡大が反転しつつある場合は琥珀色、収縮が突破しつつある場合は青。レジームが未定の間は何も描かれないため、ウォームアップの冒頭で「まだ答えが出ていない」ことを示すような色の広がりが生じることはない。 |
| f_w | 太い青線 | 直近の終値の分位数:最新の正規化リターンが、そのウィンドウ内でどの位置にあるかを示す。これが主要な系列である。 |
| f_min / f_max | 赤と緑の点線 | ウィンドウの最小値および最大値の分位数。f_wが通過するエンベロープの下限および上限。 |
| alpha_lo_mean / alpha_hi_mean | 紫色とオレンジ色の線 | 平滑化された分位水準:f_w およびその補数に対する EMA(指数移動平均)であり、f_w のスパイクがスパイクとして認識されるための、より緩やかな背景を提供します。 |
2つのエントリー閾値と中央値の位置に、3本の水平ガイド線が引かれている。これらはハードコーディングされたものではなく、関連するエキスパートアドバイザーに与えられるのと同じ入力データから生成されるため、閾値を再調整するとガイド線もそれに合わせて移動し、チャートがルールと静かに矛盾した状態になることを防ぐ。
読み方。 f_wが上側のガイドラインに接している場合、現在の終値はそのウィンドウ内で観測されたすべての値の最高値にあり、これが下降トレンドの開始点となります。f_wが下側のガイドラインにある場合は、その逆のケースとなります。 中央値は、トレンドが依然として右側にある必要がある水準であり、これを越えた時点で自然な決済となります。色付きの帯はこの読み取りに文脈を与えます。なぜなら、本手法のリズムは、拡大フェーズの開始時にポジションを建て、収縮フェーズの間に決済するというものだからです。
推奨設定
| 設定 | 推奨値 | 備考 |
|---|---|---|
| 銘柄 | 任意 | 分位数スケールは自己正規化されるため、読み取り値を意味のあるものにするために、シンボルごとのキャリブレーションは必要ありません。開発および以下のスクリーンショットでは、EURUSDを使用しています。 |
| 時間足 | M30~H4 | どの時間足でも動作します。ウィンドウはバー単位で測定されるため、同じW値の場合、時間足が短ければ短いほど、より短い期間の相場を表すことになります。 |
| ウィンドウサイズ(W) | 106バー | デフォルト値です。本論文では、ウィンドウは資産ごとに調整されることを想定しているため、これは推奨値というよりは出発点となります。 |
| 必要な履歴期間 | W + レジームのルックバックバー数 | デフォルト設定では126バー。各プロットは、セット内で最も長いウォームアップ期間の時点ではなく、そのモジュールが最初に回答できる時点から開始されるため、レジームバンドよりも先にフラクタイルが表示されます。 |
主な特徴
論文に忠実
- 分位数は論文の付録における定義、f_i = (1 / |W_i|) * sum_j I( W_ij <= v_i ) であり、記述通りに実装されている。 論文の本文と付録の内容が一致しない場合は、付録の定義を優先し、その不一致は黙って修正するのではなく、ソースコード内に記録されています。
- レジームの分類は相対極値比(Relative Extremum Ratios)に従っており、収縮は最も厳格な解釈であり裏付けが必要であるため、最初にテストされます。一方、拡張は意図的に到達しやすく設定されています。
- ソースコードで要求されていない平滑化、閾値、フィルタは一切追加されていない。
他のプログラムによる読み取りに対応
- 19 シリーズすべてがインジケータバッファとして公開されており、6 つはプロット用、13 つは計算専用であるため、EA はチャートに表示されているのと同じ数値を読み取ることができ、両者に不一致が生じることは決してありません。
- バッファマップは単一の共有ヘッダー内に存在するため、エンジン、パネル、およびあらゆる利用者は、コンパイルエラーによる警告もなく互いに乖離することなく、共通の語彙で通信できます。
- 数学的な処理はすべてヘッダーのみのクラス内にあり、チャートや注文への依存がないため、同じコードでスクリプトやテストハーネスを駆動することができ、スタブ化する必要は一切ありません。
正確な増分再計算
- 各パスでは、prev_calculated ではなく、prev_calculated-1 から再計算が行われます。 そのインデックスのバーは前回の呼び出し時にはまだ形成中で、その終値が確定したのは今になってからです。これをそのままにしておくと、それに依存するすべてのシリーズに半完成の値が固定されてしまい、バー間の分位数の差は、2つの未完成の数値間の差となってしまいます。
- ウォームアップ中のバーはゼロではなくEMPTY_VALUE を 保持するため、ウォームアップの途中でデータを取得する消費者は、妥当な数値ではなく「欠落」と認識することになります。
- レジームの分類は遷移帯内ではパス依存であるため、1つの連続したフィールドではなくバーごとの履歴が保持されます。これにより、増分処理では前のバーからチェーンを再開することが可能になります。
2番目の軸を借用するパネル
- エンジンは要求されたパネルを自動的に開き、まずチャートをチェックするため、それらをすでに含むテンプレートや、入力変更後の再初期化によって、最初のコピーの後ろに2つ目のコピーが積み重なることはありません。パネルはエンジンとともに削除されますが、実際に削除された場合のみであるため、時間枠を切り替えても、離脱したときのレイアウトに戻ります。
- パネルは独自のハンドルを構築するのではなく、チャート上の短縮名と照合することでエンジンを特定するため、実際の計算結果の横に、パラメータ設定が異なる2つ目の計算結果が並んで表示されるような分岐は決して発生しません。
スクリーンショット

EURUSD、M30のエンジンウィンドウ:色分けされたレジームの背景の上に、エンベロープと平滑化された分位数平均を表示したf_w。

逆張りパネル:ゼロを中心に配置された d_med_w と、その上に方向性一貫性を示す D_k が表示されています。

RMAファミリーのパネル:rma_wには独自のスケールでウィンドウの最小値と最大値が表示され、エンベロープは現在の価格が通過する経路を示しています。
インストールとファイル構成
2つのインジケーターと4つのヘッダーファイル。配置が重要です。エンジンは相対パス「RMA\RMA_Panel」でパネルを読み込み、ヘッダーファイルは「<RMA\...>」 としてインクルードされるため、両者はRMAサブフォルダ内に 配置する必要があります。
| ファイル | 役割 | 説明 |
|---|---|---|
| Indicators\RMA\RMA_Engine.mq5 | メインインジケーター | ライブバー上で3つのモジュールを実行し、19個すべてのバッファをバインドし、6つのプロットとレジームバンドを描画し、パネルを開きます。独自の計算処理は一切行いません。 |
| Indicators\RMA\RMA_Panel.mq5 | パススルーパネル | チャート上にエンジンを配置し、そのバッファの1グループを、独自のスケールを持つサブウィンドウにミラー表示します。2つのモードがあります:逆行相場(D_k、d_med_w)とRMAファミリー(rma_w、rma_min、rma_max)。 |
| Include\RMA\RmaTypes.mqh | 共有語彙 | レジームおよびクロスステートの列挙型、バッファマップ、プロット数およびパレット数。エンジン、パネル、およびすべてのコンシューマーが共通して使用する部分です。 |
| Include\RMA\RmaCore.mqh | 数値コア | SMA、5つのRMAファミリー、正規化リターン分布、分位数関数、ウィンドウ範囲、および平滑化されたアルファ境界。 |
| Include\RMA\RegimeDetector.mqh | レジーム分類 | 拡大、収縮、および2つの遷移状態。これらは、傾き、zスコア、および変動係数によって裏付けられた極値比エンベロープから導出される。 |
| Include\RMA\AdverseMonitor.mqh | 方向の一貫性 | d_med_w(中央値を基準とした分位数)および D_k(直近のバー間ステップにおける上昇分の割合)。 |
自身のコードからバッファを読み込む
RMA\RMA_Engine に対してiCustom を使用してハンドルを取得し、CopyBuffer を使用して以下の任意のインデックスを読み取ります。インデックス 0 から 6 はプロットされる系列、7 から 18 は計算専用ですが、19 個すべてを読み取ることができます。
| インデックス | シリーズ | 意味 |
|---|---|---|
| 0, 1 | レジームバンド、色インデックス | 背景の高さとそのパレットスロット。数値は含まれず、色のみを表す。 |
| 2 | f_w | ウィンドウ内の直近の正規化リターンの分位数([0, 1]の範囲)。主要な系列。 |
| 3, 4 | f_min, f_max | ウィンドウの最小値および最大値の分位数。 |
| 5, 6 | alpha_lo_mean, alpha_hi_mean | アルファの下限および上限のEMA。 |
| 7 | sma | 価格単位でのウィンドウの単純移動平均。 |
| 8~12 | rma_w、rma_1、rma_mid、rma_min、rma_max | RMAファミリー:smaを、直近、最初、中間、最小、最大の終値で割り、1を引いた値。 |
| 13 | range | ウィンドウの正規化リターンのばらつき。レジーム検出器が読み取る値。 |
| 14、15 | alpha_lo, alpha_hi | f_w が占める生分位点レベルとその補数。 |
| 16 | レジーム | レジームの番号をdouble型で表したもの:0=拡大、1=収縮、2=ロールオーバー、3=ブレイクアウト、4=不明。 |
| 17, 18 | D_k, d_med_w | 方向一貫性と中央値中心の分位数。 |
入力パラメータ
| グループ | パラメータ | デフォルト値 |
|---|---|---|
| ウィンドウ | InpWindowSize、InpSmoothingPeriod | 106 バー、10 |
| レジーム検出 | InpEpsilonLow、InpEpsilonHigh、InpSlopeThreshold、InpRegimeLookback、InpVariationRatioLow、InpZScoreExpansion、InpRangeHistoryLookback | 0.15、3.0、0.0001、20、0.1、1.0、100 |
| 逆方向の動き | InpAdverseLookback | 10 バー |
| 基準線 | InpEntryUpperThreshold、InpEntryLowerThreshold | 0.9, 0.1 |
| パネル | InpAutoAttachPanels、InpPanelAdverse、InpPanelRmaValues、InpAdverseThresholdDown、InpAdverseThresholdUp | true、true、false、0.3、0.7 |
| レジームの背景 | InpShowRegimeBand およびレジームごとに 1 色 | true、濃い緑 / 赤 / 琥珀色 / 青 |
研究の根拠
実装は以下の文献に基づいている:
- Daniel Alexandre Bloch著『A Course on Systematic Trading with RMA』(SSRN で公開中)。
出典元そのものから指摘されている点として、明確に述べておくべき注意点があります。すなわち、この論文の「結果」のセクションは「今後の課題」として残されているのです。この論文は、実証的な実績ではなく、フレームワークとその仕組みを提供するものです。 このインジケーターが提供するのは、あらゆる場所で同じ意味を持つ尺度で記述された市場の状態であり、これは出典から受け継いだ検証済みの優位性というよりは、独自のテストを行うための基礎となります。
関連論文では、数学的な背景と各モジュールの実装について解説し、これらのバッファを用いて取引を行うエキスパートアドバイザーを構築している:『MQL5におけるブロッホの相対移動平均(RMA)フレームワークの実装』。
MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/75472
SpreadAudit - M1の取引履歴に基づくブローカーの実質スプレッド
このスクリプトは、M1バーの「spread」フィールドからご利用のブローカーの実際のスプレッドを収集し、中央値、 90パーセンタイルおよび99パーセンタイルを、価格単位、ポイント、ATRの割合で表示し、さらに1時間ごとの平均スプレッドと最大スプレッドをCSVファイルとして出力します。 これは、頭の中で想定した「典型的な」スプレッドではなく、自身の口座における実際のコストに基づいて戦略をテストするために必要です。
Clock (Spread)
このインジケーターの機能 「Clock (Spread).mq5」は、MetaTrader 5用のチャートインジケーターであり、チャートの隅に以下の情報を表示する小さなテキストラベルを表示します: 現在のローソク足が引けるまでのカウントダウンタイマー(時間枠に応じてHH:MM:SSまたはMM:SSの形式で表示) 現在のスプレッド(アスク - ビッド、ポイント単位)を、タイマーの横の括弧内に表示します。 変更履歴: バージョン 2.20: - スプレッドの色が、方向に応じて動的に変化するようになりました(緑=拡大、赤=縮小) - スプレッドの色を設定可能な入力項目を追加しました
Trading Panel EA
「Pro Manager」は、プロップファームやプロのトレーダー向けに開発されたオールインワンのMT5取引アシスタントです。ブレークイーブン、平均TP、マジックナンバー管理、オートグリッドといった強力なツールを活用することで、取引の執行を迅速化し、ポジション管理をよりスマートに行い、リスクを効率的にコントロールし、日々の取引業務を自動化できます。
Accelerator Oscillator (AC)
アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。