【MQL4勉強プログラミング】ArrayCopyRates()関数で二次元配列にコピー

ザフナーラボブログ

ArrayCopyRates()関数は、配列RateInfo[][6]に含まれるレート情報を、指定したdouble型の二次元配列にコピーするために使用します。

ArrayCopyRates()関数は、以下のように定義されています。

int ArrayCopyRates(
void& dest_array[][],
string symbol=NULL,
int timeframe=0
);

各引数の意味は、以下のとおりです。

  • void& dest_array[][]
    レート情報のコピー先となるdouble型の二次元配列を指定します。
  • string symbol
    レート情報を取得したい通貨ペア名を指定します。
  • int timeframe
    以下の表に従って、レート情報を取得したい時間軸を指定します。

    種 類
    定 数
    内 容
    PERIOD_CURRENT
    現在の時間足
    PERIOD_M1
    1分足
    PERIOD_M5
    5分足
    PERIOD_M15
    15
    15分足
    PERIOD_M30
    30
    30分足
    PERIOD_H1
    60
    1時間足
    PERIOD_H4
    240
    4時間足
    PERIOD_D1
    1440
    日 足
    PERIOD_W1
    10080
    週 足
    PERIOD_MN1
    43200
    月 足

戻り値

以下の値を返します。

  • 関数が正常に実行された場合
    レート情報がコピーされたバーの本数
  • 関数の実行に失敗した場合
    -1

チャートを開いていない通貨ペアや時間軸のレート情報をコピーしようとすると、「ERR_HISTORY_WILL_UPDATED」(=エラーコード「4066」:ヒストリーデータを更新中)が生じ、定義済み変数「_LastError」(詳細は「こちら」を参照してください。)に当該情報が格納されます。

この場合は、後で再試行する必要があります(例えば、ArrayCopySeries()関数の場合(詳細は「こちら」)を参照してください。)。

注意点

ArrayCopyRates()関数によってコピーされたレート情報を格納する配列は、通常、DLL関数にデータを渡すために使用されます。

コピー先の配列は、静的配列として宣言されたものであっても、時系列配列のサイズにリサイズされます。

RateInfo配列の最初の次元にはバーの総数が格納されており、2番目の次元には以下の6つの要素が格納されています。

  • -時間
  • -始値
  • -安値
  • -高値
  • -終値
  • -出来高

具体例

ターミナルウィンドウ」のエキスパートタブに、ユーロドルの1時間足チャートにおける、現在のバーの形成開始時刻と始値を表示させたい場合は、以下のように記述します。


int start()
{
 double array[][6];

 ArrayCopyRates(array,”EURUSD”,PERIOD_H1);

 Print(“Current Bar “,TimeToStr(array[0][0]),
       ” Open “,array[0][1]);

 return(0);
}
  • Print()関数の詳細については「こちら」を参照してください。
  • TimeToStr()関数の詳細については「こちら」を参照してください。