実作者:
dm34@mail.ru
UltraCCIは、CCI(商品チャネル指数)に基づくインジケーターで、複数の信号ラインのトレンド方向を分析します。信号ラインの計算アルゴリズムは以下の通りです。インジケーターの入力パラメーターは、以下のようなソースデータを持っています:
- StartLength - 最初の信号ラインの最小初期値;
- Step - 期間の変更ステップ;
- StepsTotal - 期間変更の回数。
信号ラインの各期間値は、算術数列を用いて次のように計算されます:
SignalPeriod(Number) = StartLength + Number * Step
ここで、Number変数の値はゼロからStepsTotalまでの範囲です。得られた期間値は変数配列に追加され、各インジケーターのティックで使用され、スムージングされたRSIインジケーターの値の配列を取得します。各スムージングの現在のトレンド方向が計算され、CCIスムージング値全体の正と負のトレンドの数が決定されます。最終的な正と負のトレンド数もスムージングされ、DRAW_FILLINGスタイルクラスを使用して表示されるカラークラウドとして形成されます。
このインジケーターでのトレンド方向はクラウドの色によって決定され、その強さはクラウドの幅によって示されます。インジケーターの最大振幅からのパーセント値で設定される過剰買い(UpLevel)および過剰売り(DnLevel)レベルを使用することができます。
また、インジケーターはトレンド力の変化速度を示すカラー点の方向を決定する機能も提供します。トレンド力が増加する場合、これらの点の色はクラウドの色と一致し、そうでない場合は反対の色になります。
スムージングアルゴリズムは、以下の10のバージョンから選択できます:
- SMA - 単純移動平均;
- EMA - 指数移動平均;
- SMMA - スムージング移動平均;
- LWMA - 線形加重移動平均;
- JJMA - JMA適応平均;
- JurX - 超線形スムージング;
- ParMA - 放物線スムージング;
- T3 - ティルソンの多重指数スムージング;
- VIDYA - Tushar Chandeのアルゴリズムを使用したスムージング;
- AMA - Perry Kaufmanのアルゴリズムを使用したスムージング。
なお、異なるスムージングアルゴリズムに対するフェーズパラメータは全く異なる意味を持ちます。JMAの場合は、-100から+100まで変化する外部フェーズ変数です。T3の場合は視覚化を向上させるために100倍されるスムージング比率で、VIDYAの場合はCMOオシレーターの期間、AMAの場合は遅いEMAの期間です。他のアルゴリズムでは、これらのパラメータはスムージングには影響しません。AMAの早いEMA期間は固定値で、デフォルトでは2です。AMAの累乗比も2です。
このインジケーターは、SmoothAlgorithms.mqhライブラリクラスを使用しています(terminal_data_folder\MQL5\Includeにコピーする必要があります)。クラスの使用方法は、「追加バッファを使用しない中間計算のための価格系列の平均化」という記事で詳しく説明されています。
インジケーター入力パラメータ:
//+----------------------------------------------+ //| インジケーター入力パラメータ | //+----------------------------------------------+ input int CCI_Period=13; // CCIインジケーター期間 input ENUM_APPLIED_PRICE Applied_price=PRICE_CLOSE; // 適用価格 //---- input Smooth_Method W_Method=MODE_JJMA; // スムージング方法 input int StartLength=3; // 初期スムージング期間 input int WPhase=100; // スムージングパラメータ //---- input uint Step=5; // 期間変更ステップ input uint StepsTotal=10; // 期間変更の回数 //---- input Smooth_Method SmoothMethod=MODE_JJMA; // スムージング方法 input int SmoothLength=3; // スムージング深度 input int SmoothPhase=100; // スムージングパラメータ //---- input uint UpLevel=80; // 過剰買いレベル, %% input uint DnLevel=20; // 過剰売りレベル, %% input color UpLevelsColor=DarkViolet; // 過剰買いレベルの色 input color DnLevelsColor=DarkViolet; // 過剰売りレベルの色 input STYLE Levelstyle=DASHDOTDOT_; // レベルスタイル input WIDTH LevelsWidth=Width_1; // レベル幅 //+----------------------------------------------+
