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


ArrayCopyRates


配列に価格データをコピーし、コピーしたバー数を返します。
この関数は2つのバリアントがあります。

関数書式(MqlRates型配列にコピー):
int  ArrayCopyRates(
   MqlRates&  rates_array[],   // MqlRates型配列(コピー先配列)
   string     symbol=NULL,     // 通貨ペア
   int        timeframe=0      // 時間軸
   );


関数書式(double型の2次元配列RateInfo[][6]にコピー):
int  ArrayCopyRates(
   void&      dest_array[][],  // コピー先配列
   string     symbol=NULL,     // 通貨ペア
   int        timeframe=0      // 時間軸
   );



■引数
引数名 初期値 I/O 詳細
rates_array[] - Out MqlRates型の配列(コピー先配列)
dest_array[] - In double型の二次元配列(コピー先配列)
symbol NULL In 通貨ペア名
timeframe 0 In 時間軸。
ENUM_TIMEFRAMES列挙の値で設定します。省略した場合は、現在の時間軸になります。


■戻り値
コピーしたバー数を返します。
失敗時は-1を返します。

データを他チャート(現在の通貨ペア・時間軸と異なる)から要求した場合、
対応する他チャートはクライアントターミナルで開かれていないので、
必要なデータはサーバーから取得しなければなりません。

エラーコード:4066(ERR_HISTORY_WILL_UPDATED:要求したヒストリーデータが更新中)が発生した場合、
再度要求する必要があります
(ArrayCopySeries関数の例を参照)。


■備考
価格配列は、通常Dll関数にデータを渡す為に使用されます。

関数の1つ目のバリアントでは、MqlRates型の配列に仮想データコピーを実行します。
これは、時系列データが更新された時に、rates_array[]配列は必ず実際のデータを参照する事を意味します。

2つ目のバリアントでは、dest_array[][]配列に実際のデータのコピーを実行します。
コピー先配列は時系列のサイズに変更されます(コピー先配列が静的配列だったとしても)。

RateInfo[][6]配列の最初の次元にはバー数が含まれます。
2次元目の配列要素には以下内容が含まれます。

■配列要素
インデックス 内容
0 時間
1 始値
2 安値
3 高値
4 終値
5 出来高




サンプルソース:
#property strict


double   double_array[][6];
MqlRates mqlrates_array[];
bool     first_call;

//+------------------------------------------------------------------+
//| 初期化                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    if(Period()!=PeriodSeconds(PERIOD_M1)/60) {
        Alert("1分足チャートにして下さい。");
        return(INIT_FAILED);
    }

    first_call=true;

    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| アンロード時                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    Comment("");     // コメント削除
}

//+------------------------------------------------------------------+
//| EA tick受信イベント                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    if(first_call == true ) {                    // 一度だけコピーする
        ArrayCopyRates(double_array,NULL,0);   // double_array[][6]配列に物理的にコピー
        ArrayCopyRates(mqlrates_array,NULL,0); // mqlrates_array[]配列に仮想コピー(データ参照します)
        first_call=false;
    }

   //--- tick受信時で違いを見る為、0番目の配列要素を出力
   Comment("double_array[][6]配列の値は変化しない (物理的にコピーしている為):\n",
           "0 - 時間  : ",(datetime)double_array[0][0],"\n",
           "1 - 始値  : ",double_array[0][1],"\n"
           "2 - 安値  : ",double_array[0][2],"\n"
           "3 - 高値  : ",double_array[0][3],"\n"
           "4 - 終値  : ",double_array[0][4],"\n"
           "5 - 出来高: ",DoubleToString(double_array[0][5],0),"\n",
           "\n",
           "mqlrates_array[]配列の値は変化する (仮想コピーし元データを参照している為):\n",
           "0 - 時間  : ",mqlrates_array[0].time ,"\n",
           "1 - 始値  : ",mqlrates_array[0].open ,"\n"
           "2 - 安値  : ",mqlrates_array[0].low  ,"\n"
           "3 - 高値  : ",mqlrates_array[0].high ,"\n"
           "4 - 終値  : ",mqlrates_array[0].close,"\n"
           "5 - 出来高: ",mqlrates_array[0].tick_volume);
}
  





スポンサーリンク



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


Top

inserted by FC2 system