トップ  >  リファレンス  >  配列関数  >  ArrayCopySeries
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
ArrayCopySeries


ArrayCopySeries


時系列配列を他配列にコピーし、コピーした要素数を返します。

関数書式:
int  ArrayCopySeries(
   void&  array[],            // コピー先配列
   int    series_index,        // 時系列配列ID
   string symbol      = NULL, // 通貨ペア
   int    timeframe    = 0     // 時間軸
   );



■引数
引数名 初期値 I/O 詳細
array[] - Out double型のコピー先配列
series_index - In 時系列配列ID。
時系列配列IDの列挙の値を指定します。
symbol NULL In 通貨ペア名
timeframe 0 In 時間軸。
時間軸列挙の値を指定します。省略した場合は現在の時間軸になります。


■戻り値
コピーした要素数を返します。
失敗した場合は-1を返します。

異なる通貨ペアまたは時間軸の別チャートからコピーする場合、
必要なデータが欠けている事がある。

この場合、エラーコード:4066(ERR_HISTORY_WILL_UPDATED)が発生します。
ヒストリーデータ更新中なので、一定時間後にコピーを再試行する必要があります。


■備考
データ配列には実メモリの割り当てはありません、そして何もコピーされません。
そのような配列にアクセスする時、アクセスはリダイレクトされます。
カスタムインジケータのインデックスのように割り当てられた配列は対象外で、データは実際にコピーされます。
series_indexがMODE_TIMEの場合、関数に渡す配列はdatetime型でなければなりません。



サンプルソース:
#property strict

//+------------------------------------------------------------------+
//| 初期化                                   |
//+------------------------------------------------------------------+
void OnInit(){
    datetime daytimes[];
    int      shift=10,dayshift,error;
    
    // Time[]配列(日足)をコピー
    ArrayCopySeries(daytimes, MODE_TIME, Symbol(), PERIOD_D1);

    error = GetLastError();
    
    if( error == ERR_HISTORY_WILL_UPDATED) {                         // ヒストリーデータが更新中の場合

        for(int i=0; i < 2 ; i++) {
            Sleep(5000);                                                 // 5sec待ち

            ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1); // Time[]配列(日足)を再コピー
            datetime last_day=daytimes[0];                               // コピーした日足の時間をチェック

            if( Year()  == TimeYear(last_day)  &&
                Month() == TimeMonth(last_day) &&
                Day()   == TimeDay(last_day))   {
                 break; // コピーした日足の年月日と、サーバー時間の年月日が一致したら終了(再コピーしない)
            }
        }
    }

    if(Time[shift] >= daytimes[0]) {
        dayshift=0;
    } else {
        dayshift = ArrayBsearch(daytimes, Time[shift], WHOLE_ARRAY, 0, MODE_DESCEND); // コピーした配列
    }

    if(Period() > PERIOD_D1) {
        dayshift++;
    }

    // 日足以外のチャートを表示している場合は、最も近いデータを表示
    printf( "サーバー時間:%s, コピーした配列daytimes[%d] = %s", TimeToStr(Time[shift]), dayshift, TimeToStr(daytimes[dayshift]));
    
}


結果:
EURUSD,H1: サーバー時間:2015.04.21 12:00, コピーした配列daytimes[1] = 2015.04.20 00:00



スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system