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

Fixed-Width Fractional Differencing (FFD) - MetaTrader 5のためのインディケータ

Patrick Murimi Njoroge
Patrick Murimi Njoroge
I build robust trading tools for MetaTrader. Browse my free articles to learn, get the premium EAs/indicators on the Market, or hire me for custom coding.
| Japanese English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ビュー:
138
評価:
(6)
パブリッシュ済み:
アップデート済み:
FFD.mq5 (3.38 KB) ビュー
\MQL5\Include\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

外国為替および先物の生データ価格は非定常である。これらを用いて学習させた標準的な回帰モデルや分類モデルは、深刻な先読みバイアスや偽の相関に直面する。単純な対処法である「整数差分法」は非定常性を解消するが、その過程で価格の記憶情報をすべて失い、予測モデルに不可欠な自己相関構造そのものを捨ててしまうことになる。

『Advances in Financial Machine Learning』(López de Prado, 2018)の第5章で導入された固定幅分数差分法(FFD)は、 は、定常性を確保するのにちょうど十分な非整数次d ∈ (0, 1) で差分計算を行い、同時に価格の記憶情報を最大限に保持することで、この問題を解決します。本投稿では、その手法の実用レベルのMQL5実装を提供します。

FFD指標:生データ価格(上)対 定常FFD系列(下)

FFDの出力を示す2つのパネル:非定常な生価格(a)と、ルックバックウィンドウがマークされた定常なFFD時系列(b)


構成要素

  • FFDEngine.mqhCFFDEngine クラスを含むヘッダーのみのライブラリ。Init()Compute()(1バー分)、およびComputeBuffer()prev_calculated 最適化を備えたインジケーターバッファ全体)を提供します。OnInit() 実行後は動的メモリ割り当てを行いません。
  • FFD.mq5CFFDEngineを ラップするカスタムインジケータ。FFD系列を別のチャートウィンドウに描画します。すべてのENUM_APPLIED_PRICE 値に対応しています。

アルゴリズムの仕組み

重みベクトルは、以下の再帰式(AFML 式 5.4)によって定義されます:

w[0] = 1 w[k] = -w[k-1] * (d - k + 1) / k, k = 1, 2, ...

|w[k]| < 閾値 となった時点で反復を停止します。 その後、ベクトルが逆順に並べ替えられ、ルックバックウィンドウ内の最も古い価格に最小の重みが割り当てられ、最も新しい価格には1.0が割り当てられる。バーiにおける FFD値は、逆順に並べ替えられた重みベクトルと対数価格ウィンドウ[i−width, …, i] との内積である。

d = 0.4threshold = 1e-5 の場合、ウィンドウ幅は 1 457 バーとなる。threshold = 1e-3 の場合、54 バーとなる。threshold は、定常性と記憶性のトレードオフを制御する。値が小さいほど、より広いルックバック要件を犠牲にして、より多くの記憶性を維持できる。

入力パラメータ

パラメータ デフォルト 説明
InpD 0.4 分数差分順序。一般的な範囲:0.1~0.9。0.5 より大きい値ではほぼ整数差分が得られ、0.1 より小さい値ではほぼ原価に近い値が得られます。 最適なd は、選択された有意水準で ADF 検定を通過する最小値である。Python による探索手順については、関連記事参照。
InpThreshold 1e-5 重みカットオフτ|w[k]| < τ となった時点で反復処理が停止する。値を小さくするとウィンドウ幅が広がり、記憶効果の維持が向上するが、最初の有効な出力が得られるまでに必要な過去のバー数が増える。推奨範囲:1e-4 ~ 1e-5。
InpUseLog true 差分計算の前にln(価格) を適用します。生価格系列(終値、始値、高値、安値)に推奨されます。入力がすでにリターンまたは対数リターン系列である場合にのみfalse に 設定してください。
InpPrice PRICE_CLOSE 適用される価格タイプ。ENUM_APPLIED_PRICE の 任意の値(PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_CLOSE、PRICE_MEDIAN、PRICE_TYPICAL、PRICE_WEIGHTED)を受け付けます。

インストール

  1. FFDEngine.mqh を MQL5\Include\ フォルダ(または CodeBase ダウンロード時に指定されたサブフォルダ — 以下のファイルの場所を参照)にコピーしてください。
  2. FFD.mq5 を MQL5\Indicators\Downloads\ にコピーします(CodeBase ダウンロード時に自動的にこの場所に配置されます)。
  3. MetaEditor で両方のファイルをコンパイルします。#property strict の下で、警告なしでインジケータがコンパイルされるはずです。
  4. FFD を 任意のチャートに追加します。ルックバックウィンドウ(幅 + 1 バー)が埋まると、メインチャートの下にインジケータウィンドウが表示されます。

独自のEAやインジケーターでCFFDEngineを使用する場合

FFDEngine.mqhは ヘッダーのみのライブラリです。これをインクルードし、OnInit() 内で一度Init()を 呼び出してください:

#include <FFDEngine.mqh>

//--- 固定幅分数差分エンジンのグローバルインスタンス
CFFDEngine g_engine;

//+------------------------------------------------------------------+
//| エキスパートの初期化関数                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- d=0.4、閾値=1e-5、対数変換を有効にしてFFDエンジンを初期化する
//--- この設定により、EAの初期化フェーズ中に静的なメモリウェイトウィンドウが構築されます
   if(!g_engine.Init(0.4, 1 e-5, true))
     {
      Print("FFD engine init failed");
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| エキスパート・ティック関数                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- エンジンにクエリを実行し、必要な過去のバーの正確な数を調べる
//--- 閾値に基づいて有効なFFD値を算出する
   int need = g_engine.GetMinBars();
   double close[];

//--- 必要な期間分の過去の価格データを取得する。
//--- 履歴がまだ同期されていない、または不十分な場合は、エラーを防ぐために実行をスキップします。
   if(CopyClose(_Symbol, _Period, 0, need, close) < need)
      return;

//--- 配列のインデックスが時系列順と一致するようにする(最も古いバーがインデックス 0 になるように)
//--- FFD重みベクトル行列の変換が逆順になった場合に正しく位置合わせを行うため
   ArraySetAsSeries(close, false);

//--- 現在のライブバーについて、定常状態の分数差分による出力値を計算する
   double ffd_value = g_engine.Compute(close, need);

//--- モデルの特徴量として ffd_value を使用してください。
  }

Python との交差検証

付属ファイルFFDValidation.mq5(記事のダウンロードから入手可能)は、FFD値をCSVファイルにエクスポートします。Pythonスクリプトffd_cross_validate.py は、afml ライブラリを使用して同じ値を再計算し、バーごとに比較します。 EURUSDのH1チャート5,000バーにおいて、d = 0.4threshold = 1e-5 の条件下で、最大絶対誤差は1e-12未満でした。

パフォーマンスに関する注意事項

  • 重みベクトルの割り当て:OnInit() 内で1回のみ。ティックパス上での割り当てはゼロ。
  • バーごとの計算:O(width) の内積。最新のハードウェアでは、1,457 要素の内積は 50 μs 未満で完了します。
  • ComputeBuffer() は prev_calculated 引数を使用して、すでに計算済みのバーをスキップします。各ティックで再計算されるのは、現在の未完了のバーのみです。

参考文献および関連記事

  • López de Prado, M. (2018). 『Advances in Financial Machine Learning』第5章(分数微分)、76–95ページ。Wiley。
  • 完全な理論、Python実装、およびADFベースのパラメータ探索:『Feature Engineering for ML — Part 2: Implementing Fixed-Width Fractional Differentiation in MQL5』(著者:Patrick M. Njoroge)。
  • 関連検証ツール:FFDValidation.mq5 およびffd_cross_validate.py— 本記事のダウンロードパッケージに含まれています。

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

長期トレンド TRIX オシレーター 長期トレンド TRIX オシレーター

デュアルTRIXおよびLWMAフィルタリングに基づく、長期のモメンタムおよびトレンドオシレーター。

Institutional Kinematic Price Physics (Velocity and Acceleration) Institutional Kinematic Price Physics (Velocity and Acceleration)

価格変動に微分計算を適用する定量的な物理エンジンであり、真の「市場速度(1階微分)」と「市場加速度(2階微分)」を抽出することで、トレンドの枯渇が起きる前にそれを予測します。

Gold FVG Finder Gold FVG Finder

このインジケーターは、チャート上の不均衡ゾーン(フェアバリューギャップ)を検出し、価格がそこに戻った際に矢印でシグナルを出します。金、FX、およびM5からH4までの時間軸で取引される流動性の高いあらゆる銘柄に適しています。

Close Profit Positions Close Profit Positions

利益確定のポジションを決済する