iBandsOnArray()関数
iBandsOnArray()関数は、配列に格納された価格データからボリンジャーバンドを算出し、その値を返します。
配列内の価格データを使用するため、通貨ペア名、時間枠、適用価格の指定は必要としません。
価格データは事前に用意しておく必要があります。
ボリンジャーバンドは左から右に(古い価格データから新しい価格データに向かって)計算されます。右から左に(新しい価格データから古い価格データに向かって)計算するためには、ArraySetAsSeries()関数を使用します。
iBandsOnArray()関数の()括弧内は次のように指定します。
iBandsOnArray(データ配列, 配列要素数, 計算期間, 標準偏差, インジケーターシフト数, ライン種類, シフト数)
データ配列
価格データが格納されている配列を指定します。
配列要素数
配列の要素数を指定します。0(ゼロ)は全要素を指定したことになります。
計算期間
計算する期間(ローソク足の本数)を整数で指定します。
標準偏差
主線からの偏差を数値で指定します。
インジケーターシフト数
インジケーターの表示をシフトする(ずらす)ローソク足の本数を整数で指定します。
ライン種類
インジケーターラインの種類を次の表の整数または定数で指定します。
上ライン | 1 | MODE_UPPER |
---|---|---|
下ライン | 2 | MODE_LOWER |
シフト数
ローソク足何本分前かを指定します。
サンプルコード
#property strict #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 DodgerBlue // RSI #property indicator_color2 LightSeaGreen // middle line #property indicator_color3 LightSeaGreen // Upper band #property indicator_color4 LightSeaGreen // Lower band //--- indicator parameters extern int RSIPeriod = 14; extern int BandsPeriod = 20; extern double BandsDeviation = 2.0; //---- buffers double rsi[]; // RSI double middle[]; // middle line double upper[]; // Upper band double lower[]; // Lower band //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorShortName("RSI Bands"); SetIndexBuffer(0,rsi); SetIndexStyle(0,DRAW_LINE); SetIndexLabel(0,"RSI"); SetIndexBuffer(1,middle); SetIndexStyle(1,DRAW_LINE); SetIndexLabel(1,"Bands SMA"); SetIndexBuffer(2,upper); SetIndexStyle(2,DRAW_LINE); SetIndexLabel(2,"Bands Upper"); SetIndexBuffer(3,lower); SetIndexStyle(3,DRAW_LINE); SetIndexLabel(3,"Bands Lower"); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ 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[], const long &volume[], const int &spread[]) { int i; int limit; if (prev_calculated == 0) limit = rates_total - 1; else limit = rates_total - prev_calculated; // RSIの値を配列rsiに格納する for(i=limit-1; i>=0; i--) { rsi[i] = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i); } // iBandsOnArray()関数で配列rsiからボリンジャーバンドの各値を取得する for(i=limit-1; i>=0; i--) { middle[i] = iBandsOnArray(rsi, 0, BandsPeriod, BandsDeviation, 0, MODE_MAIN, i); upper[i] = iBandsOnArray(rsi, 0, BandsPeriod, BandsDeviation, 0, MODE_UPPER, i); lower[i] = iBandsOnArray(rsi, 0, BandsPeriod, BandsDeviation, 0, MODE_LOWER, i); } return(rates_total); }
上記のサンプルコードは、RSIラインと、そのボリンジャーバンドを表示するインジケーターのコードです。
「RSIラインのボリンジャーバンド」を取得するために、iBandsOnArray()関数を使用しています。