MQL関数リファレンス

MQL4MQL5 インジケーター作成

SetIndexBuffer()

できること
配列をインジケーターのバッファとして登録する
対応
MQL4・MQL5

SetIndexBuffer() とは

カスタムインジケーターで、double の配列をインジケーターのバッファ(チャートに表示したり、iCustom() で読み出したりできる値)として登録する関数です。OnInit() で呼びます。

SetIndexBuffer() の書式と引数

bool SetIndexBuffer(
   int index,
   double &buffer[],
   ENUM_INDEXBUFFER_TYPE data_type=INDICATOR_DATA
)
引数型省略時説明
indexint必須バッファの番号(0 から)。#property indicator_buffers の数より小さい値にします。
bufferdouble &[]必須登録する配列(グローバル変数として宣言した double の動的配列)。
data_typeENUM_INDEXBUFFER_TYPEINDICATOR_DATAバッファの種類。INDICATOR_DATA(表示するデータ)、INDICATOR_COLOR_INDEX(色の番号)、INDICATOR_CALCULATIONS(計算用・表示しない)。

戻り値

登録できたら true を返します。

SetIndexBuffer() の使い方(コード例)

MQL4

#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrRed
#property indicator_color2 clrBlue

double UpBuf[], DnBuf[];

int OnInit()
{
   SetIndexBuffer(0, UpBuf);
   SetIndexBuffer(1, DnBuf);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   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 limit = rates_total - prev_calculated;
   if(prev_calculated > 0) limit++;
   for(int i = 0; i < limit && i < rates_total; i++)   // MQL4 は 0 = 最新
   {
      UpBuf[i] = high[i];
      DnBuf[i] = low[i];
   }
   return rates_total;
}

MQL5

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue

double UpBuf[], DnBuf[];

int OnInit()
{
   SetIndexBuffer(0, UpBuf, INDICATOR_DATA);
   SetIndexBuffer(1, DnBuf, INDICATOR_DATA);
   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 start = (prev_calculated > 0) ? prev_calculated - 1 : 0;
   for(int i = start; i < rates_total; i++)   // MQL5 は 0 = 最も古いバー
   {
      UpBuf[i] = high[i];
      DnBuf[i] = low[i];
   }
   return rates_total;
}

MetaEditor でコンパイルできることを確認済みです。

SetIndexBuffer() の注意点

  • 登録した配列はターミナルがサイズを管理します。ArrayResize() でサイズを変えてはいけません。
  • バッファの数は #property indicator_buffers で宣言します。MQL5 では、表示する線の数を #property indicator_plots でも宣言します。
  • MQL4 のバッファは既定で時系列(0 が最新)、MQL5 のバッファは既定で 0 が最も古いバーです。

SetIndexBuffer() でよく出るエラー

関連する関数

インジケーター作成の関数一覧

← MQL関数リファレンスで、ほかの関数を探す

サイバーシグナルインジケーターと8大特典プレゼント

MT4/MT5自動売買EAサイバーラッシュ無料プレゼント

MT4/MT5自動売買EAサイバードラゴン無料プレゼント

グルグルトレイン(グルトレ)EAを無料プレゼント

ライントレードEAサイバートレナビを無料プレゼント

ゴトー日の東京仲値が狙える自動売買EA

LINE友だち追加

注目記事ランキング

  1. 1

    【サクソバンクチャート】月曜日の早朝から動く為替レート

  2. 2

    【MT4/MT5対応】チャート上に手書きできる描画インジケーターの無料配布

  3. 3

    【サンデーダウ・サンデードル円】土日に動く中東レートの表示方法と見方を解説

  4. 4

    【先着50名】グルトレEAを無料プレゼントしています!

  5. 5

    保護中: 【勝率UP!】曜日や日・月別為替相場の動きでFXを見極める

  6. 6

    【MT4/MT5対応】「sign_alert」シグナルアラートやメール送信するインジケーターの無料配布

  7. 7

    無料メールマガジン「マナブ式FX」|毎朝6時、今日の為替相場予想が届く

  8. 8

    【原油・金】WTIとゴールドの商品レート一覧と見やすいチャート

  9. 9

    VQインジケーターとは?MT4/MT5版を無料配布【設定例つき】

  10. 10

    【バイナリーオプション攻略法】全勝!+497,363円の利益が出た手法とは?

TOP
CLOSE