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