著者: Dmitriy。
このインジケーターは、MFI(マネーフローインデックス)に基づいており、複数のシグナルラインの分析を行います。シグナルラインの計算アルゴリズムは以下の通りです。インジケーターの入力パラメーターは以下のデータを元にしています:
- StartLength - 最初のシグナルラインの最小初期値;
- Step - 期間の変化ステップ;
- StepsTotal - 期間の変化の数。
シグナルラインの各期間値は、算術級数を用いて計算されます:
SignalPeriod(Number) = StartLength + Number * Step,
ここで、Number変数の値はゼロからStepsTotalまでの範囲です。得られた期間の値は変数配列に追加され、各インジケーターのティックで使用され、ラリー・ウィリアムズのパーセントレンジインジケーターのスムージングされた値の配列が得られます。各スムージングの現在のトレンドの方向が計算され、MFIスムーズ値全体の正と負のトレンドの数が決定されます。
最終的な正と負のトレンドの数はさらにスムージングされ、インジケーターラインとして使用され、DRAW_FILLINGスタイルクラスを使って表示されるカラークラウドを形成します。
このインジケーターにおけるトレンドの方向はクラウドの色によって決まり、トレンドの力はクラウドの幅によって決まります。過熱(UpLevel)と過小評価(DnLevel)のレベルは、インジケーターの最大範囲からのパーセント値で設定できます。
スムージングアルゴリズムは、以下の10種類の中から選ぶことができます:
- SMA - 単純移動平均;
- EMA - 指数移動平均;
- SMMA - スムーズ移動平均;
- LWMA - 線形加重移動平均;
- JJMA - JMA適応平均;
- JJurX - ウルトラインア平均;
- ParMA - パラボリック平均;
- T3 - ティルソンの多重指数スムージング;
- VIDYA - Tushar Chandeのアルゴリズムを使用したスムージング;
- AMA - Perry Kaufmanのアルゴリズムを使用したスムージング。
注意すべきは、Phase1とPhase2パラメーターが異なるスムージングアルゴリズムに対して全く異なる意味を持つことです。JMAの場合、外部Phase変数は-100から+100の範囲で変化します。T3の場合、スムージング比率は視覚化のために100倍され、VIDYAの場合はCMOオシレーターの期間、AMAの場合は遅いEMAの期間となります。他のアルゴリズムでは、これらのパラメーターは平均化に影響しません。AMAの高速EMA期間は固定されており、デフォルト値は2です。AMAの累乗比も2に等しいです。
このインジケーターは、SmoothAlgorithms.mqhライブラリクラスを使用しています(これを<terminal_data_directory>\\MQL5\Includeにコピーしてください)。クラスの詳細は、追加バッファなしで中間計算のための価格系列の平均化の記事で詳しく説明されています。
//+----------------------------------------------+ //| インジケーター入力パラメーター | //+----------------------------------------------+ input int MFI_Period=13; // MFIインジケーターの期間 input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // MFIインジケーターのボリューム //---- input Smooth_Method W_Method=MODE_JJMA; // スムージング方法 input int StartLength=3; // 初期平均化期間 input int WPhase=100; // スムージングパラメーター // JJMAの場合、範囲は-100から+100まで変化し、過渡期の品質に影響します; // VIDIAの場合はCMO期間、AMAの場合は遅い移動平均の期間です。 //---- input uint Step=5; // 期間変更ステップ input uint StepsTotal=10; // 期間変更の数 //---- input Smooth_Method SmoothMethod=MODE_JJMA; // スムージング方法 input int SmoothLength=3; // スムージング深度 input int SmoothPhase=100 // スムージングパラメーター // JJMAの場合は-100から+100まで変化し、過渡期の品質に影響します; //---- input uint UpLevel=80; // 過熱レベル(%%) input uint DnLevel=20; // 過小評価レベル(%%) input color UpLevelsColor=Blue; // 過熱レベルの色 input color DnLevelsColor=Blue; // 過小評価レベルの色 input STYLE Levelstyle=DASH_; // レベルのスタイル input WIDTH LevelsWidth=Width_1; // レベルの幅 //+----------------------------------------------+

Fig. 1. The UltraMFIインジケーター