スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
iBandsOnArray


iBandsOnArray


配列に格納した価格データを基にしてボリンジャーバンドインジケータを計算し、その値を返します。


関数書式:
double  iBandsOnArray(
   double       array[],    // 配列データ
   int          total,      // 配列要素数
   int          period,     // 平均期間
   double       deviation,  // 標準偏差
   int          bands_shift,// バンドシフト
   int          mode,       // ラインインデックス
   int          shift       // シフト
   );



■引数
引数名 初期値 I/O 詳細
array[] - In 配列データ
total - In 配列要素数。
0指定は全要素を意味します。
period - In メインラインを計算をする平均期間
deviation - In メインラインからの標準偏差
bands_shift - In バンドシフト
mode - In インジケータラインインデックス
iBands()関数用のインジケータラインID列挙の値を指定します。
shift - In インジケータバッファから取得する値のインデックス。
(現在バーを基準にして、指定した時間軸のバー数分を過去方向へシフト)


■戻り値
配列に格納した価格データを基にして計算したボリンジャーバンドインジケータを計算値を返します。



■備考
iBands()関数とは異なり、iBandsOnArray()は通貨ペア名・時間軸・適用価格の引数はありません。
配列データ(価格データ)は事前に用意しておく必要があります。
インジケータは左から右へ計算します。
時系列配列(右から左)のような配列要素アクセスにするにはArraySetAsSeries()関数を使用する必要があります。

サンプルソース:
    // 配列データを基に計算したボリンジャーバンドインジケータ計算値を取得
    double result = iBandsOnArray(
                                      ExtBuffer,       // 配列データ
                                      0,               // 配列要素数
                                      20,              // 平均期間
                                      2,               // 標準偏差
                                      0,               // バンドシフト
                                      MODE_LOWER,    // ラインインデックス
                                      0                // シフト
                                     );


サンプルソース:
#property strict // strictは絶対に削除しない事
#property indicator_separate_window // カスタムインジケータをサブウインドウに表示する

// インジケータプロパティ設定
#property  indicator_buffers    4               // カスタムインジケータのバッファ数
#property  indicator_color1     clrWhite      // インジケータ1の色
#property  indicator_width1     2               // インジケータ1の太さ

#property  indicator_color2     clrRed      // インジケータ2の色
#property  indicator_width2     1               // インジケータ2の太さ


#property  indicator_color3     clrAqua      // インジケータ3の色
#property  indicator_width3     1               // インジケータ3の太さ
#property  indicator_color4     clrAqua      // インジケータ4の色
#property  indicator_width4     1               // インジケータ4の太さ


#property  indicator_minimum    0               // サブウインドウスケール下限値設定
#property  indicator_maximum  100               // サブウインドウスケール上限値設定

// レベルライン設定
#property  indicator_level1     30           // レベルライン1
#property  indicator_level2     70           // レベルライン2

#property  indicator_levelcolor   clrGray    // レベルラインの色
#property  indicator_levelstyle STYLE_DOT    // レベルラインの種類
#property  indicator_levelwidth         1    // レベルラインの太さ


// インジケータ表示用動的配列
double     _IndBuffer1[];                          // インジケータ1表示用動的配列
double     _IndBuffer2[];                          // インジケータ2表示用動的配列
double     _IndBuffer3[];                          // インジケータ3表示用動的配列
double     _IndBuffer4[];                          // インジケータ4表示用動的配列

// インプットパラメータ
input int  _InputCalPeriod          = 14;               // RSI算出期間
input int  _InputBBandCalPeriod     = 25;               // BBand算出期間
input int  _InputBBandCalSigma      = 2;                // BBand標準偏差



//+------------------------------------------------------------------+
//| OnInit(初期化)イベント
//+------------------------------------------------------------------+
int OnInit()
{
    SetIndexBuffer( 0, _IndBuffer1 );     // インジケータ1表示用動的配列をインジケータ1にバインドする
    SetIndexBuffer( 1, _IndBuffer2 );     // インジケータ2表示用動的配列をインジケータ1にバインドする
    SetIndexBuffer( 2, _IndBuffer3 );     // インジケータ3表示用動的配列をインジケータ1にバインドする
    SetIndexBuffer( 3, _IndBuffer4 );     // インジケータ4表示用動的配列をインジケータ1にバインドする

    return( INIT_SUCCEEDED );      // 戻り値:初期化成功
}


//+------------------------------------------------------------------+
//| OnCalculate(tick受信)イベント
//| カスタムインジケータ専用のイベント関数
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,      // 入力された時系列のバー数
                const int       prev_calculated,  // 計算済み(前回呼び出し時)のバー数
                const datetime &time[],          // 時間
                const double   &open[],          // 始値
                const double   &high[],          // 高値
                const double   &low[],           // 安値
                const double   &close[],         // 終値
                const long     &tick_volume[],   // Tick出来高
                const long     &volume[],        // Real出来高
                const int      &spread[])        // スプレッド
{
    int end_index = Bars - prev_calculated;  // バー数取得(未計算分)

    // RSI算出
    for( int icount = 0 ; icount < end_index ; icount++ ) {
        double get_value = iRSI (           // RSI算出
                             Symbol(),      // 通貨ペア
                             Period(),      // 時間軸
                             _InputCalPeriod, // 算出期間
                             PRICE_CLOSE,   // 適用価格
                             icount          // シフト
                        );

        _IndBuffer1[icount] = get_value;       // インジケータ1に算出結果を設定
    }

    // RSIのBBand算出
    for( int icount = 0 ; icount < end_index ; icount++ ) {
        double get_bband_center = iBandsOnArray(
                                      _IndBuffer1,           // 配列データ[RSIの算出結果の配列]
                                      0,                     // 配列要素数[配列の全要素対象]
                                      _InputBBandCalPeriod,  // 平均期間
                                      _InputBBandCalSigma,   // 標準偏差
                                      0,                     // バンドシフト
                                      MODE_MAIN,            // ラインインデックス
                                      icount                 // シフト
                                     );

        _IndBuffer2[icount] = get_bband_center;              // インジケータ2に算出結果を設定

        double get_bband_up = iBandsOnArray(
                                      _IndBuffer1,           // 配列データ[RSIの算出結果の配列]
                                      0,                     // 配列要素数[配列の全要素対象]
                                      _InputBBandCalPeriod,  // 平均期間
                                      _InputBBandCalSigma,   // 標準偏差
                                      0,                     // バンドシフト
                                      MODE_UPPER,           // ラインインデックス
                                      icount                 // シフト
                                     );

        _IndBuffer3[icount] = get_bband_up;              // インジケータ3に算出結果を設定

        double get_bband_down = iBandsOnArray(
                                      _IndBuffer1,           // 配列データ[RSIの算出結果の配列]
                                      0,                     // 配列要素数[配列の全要素対象]
                                      _InputBBandCalPeriod,  // 平均期間
                                      _InputBBandCalSigma,   // 標準偏差
                                      0,                     // バンドシフト
                                      MODE_LOWER,           // ラインインデックス
                                      icount                 // シフト
                                     );

        _IndBuffer4[icount] = get_bband_down;              // インジケータ4に算出結果を設定
    }

    return( rates_total ); // 戻り値設定:次回OnCalculate関数が呼ばれた時のprev_calculatedの値に渡される
}








スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system