【MQL4勉強プログラミング】ArrayCopySeries()関数で指定した通貨ペアのレート情報を他の配列にコピー

ArrayCopySeries()関数は、指定した通貨ペアのレート情報を、他の配列にコピーするために使用します。

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

int ArrayCopySeries(
void& array[],
int series_index,
string symbol=NULL,
int timeframe=0
);

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

  • void& array[]
    コピー先のdouble型(第二引数に「MODE_TIME」を指定する場合はdatetime型)の配列名を指定します。
  • int series_index
    以下の表に従って、コピーするレート情報を指定します。

    種 類
    定数
    内 容
    MODE_OPEN
    始 値
    MODE_LOW
    安 値
    MODE_HIGH
    高 値
    MODE_CLOSE
    終 値
    MODE_VOLUME
    出来高

    iLowest()関数iHighest()関数で使用
    MODE_TIME
    バーの形成開始時刻

    ArrayCopySeries()関数で使用
  • string symbol=NULL
    レート情報をコピーしたい通貨ペア名を指定します。
    特定の通貨ペア名を指定せず、EA等を適用したチャートの通貨ペアのレート情報をコピーしたい場合は、「NULL」と記述します。
  • int timeframe=0
    以下の表に従って、コピーするレート情報の時間軸を指定します。

    種 類
    定 数
    内 容
    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」が返されます。

注意点

レート情報を、EA等を適用した通貨ペアとは異なる通貨ペアや時間軸からコピーした場合は、必要なデータが欠落する場合があります。その場合は、「ERR_HISTORY_WILL_UPDATED」(=ヒストリーデータを更新中)が生じ、定義済み変数「_LastError」に当該情報が格納される場合があります。

この場合は、一定時間を置いて、コピーを再試行する必要があります。

第二引数(=int series_index)が「MODE_TIME」の場合は、コピー先の配列はdatetime型でなければなりません。

具体例

「USD/JPY」(=ドル/円)の1時間足のバーの形成開始時刻、及び始値のデータをコピーしたい場合は、以下のように記述します。


//配列の宣言
datetime Time_Info[]; //バーの形成開始時刻を格納
double Open_Info[]; //始値を格納

//変数の宣言
int Count = 0; //ArrayCopySeries()関数の戻り値を格納

//バーの形成開始時刻をコピー
Count
= ArrayCopySeries(Time_Info,MODE_TIME,”USDJPY”,60);

//始値をコピー
Count
= ArrayCopySeries(Open_Info,MODE_OPEN,”USDJPY”,60);

なお、ArrayCopySeries()関数の第三引数(=string symbol)に特定の通貨ペア名を指定する場合は、「気配値表示ウィンドウ」に表示されている通貨ペア名のとおりに記述してください。