指定範囲のバーの価格情報をコピー CopyRates 関数

関数

時系列とインジケータへのアクセス関数

CopyRates 関数

 この関数は、指定した通貨ペアと時間軸、バーの範囲の価格情報(①開始時間 ②始値 ③高値 ④安値 ⑤終値 ⑥Tick数 ⑦スプレッド ⑧出来高)を、指定したMqlRates型配列へコピーして、コピー先配列の要素数を取得します。
※価格情報の⑦⑧については提供されていない場合があります。

 バーのインデックス値は、最新のバーが 0になります。しかし、配列へコピーされた最も古いデータは、コピー先の配列上ではインデックス値が 0となり、最新のバーのデータはインデックス値が最大になります。

データ型と構成・戻り値

 この関数には 3つの型があります。

int CopyRates(①,②,③,④,⑦); // インデックス値とコピー数で実行
int CopyRates(①,②,⑤,④,⑦); // 開始日時とコピー数で実行
int CopyRates(①,②,⑤,⑥,⑦); // 開始日時と終了日時で実行 ⑤⑥は入れ替わってもOK

 戻り値は、コピー先の配列の要素数を返します。エラーの場合は -1を返します。

 要求したデータの範囲がサーバーで利用可能なデータの範囲に収まらない場合、関数は -1を返します。TERMINAL_MAXBARS(チャートのバーの最大数)を超えるデータを要求した場合、関数は -1を返します。要求した時系列がまだ構築されていないか、サーバーからダウンロードする必要がある場合、関数は -1を返します。

引数 [5]

 CopyRates関数は 5個の引数で構成されます。

番号引数名データ型単位初期値説明
symbol_namestring対象とする通貨ペア名。
NULL」は現在のチャートの通貨ペアを表します。
timeframeenum時間軸。ENUM_TIMEFRAMES 列挙値から選択。0は現在のチャートの時間軸を選択したことになります。
start_posintコピーを開始するバーのインデックス値。
countintコピーするバーの数。
start_timedatetimeコピーを開始するバーの開始日時。
stop_timedatetimeコピーを終了するバーの開始日時。
rates_array[]MqlRatesコピー先の配列。

 引数⑦のコピー先の配列において、不明な量のデータをコピーする場合は、動的配列をコピー先の配列として使用することをお勧めします。コピーするデータ量が分かっている場合は、過剰なメモリの割り当てを防ぐために、静的配列にコピーすることをお勧めします。

使用例

CopyRates関数による各バーの価格情報の取得

 CopyRates関数を使って 1時間軸チャートの最新のバーから 5時間分(5本分)のバーの価格情報をコピー先の配列へ格納します。
 コピー先の配列については確認のため格納されている価格情報(①開始時間 ②始値 ③高値 ④安値 ⑤終値 ⑥Tick数)を出力します。

コード

// CopyRates関数による各バーの価格情報の取得
#property strict
void OnInit() {

int n, i;
MqlRates copy_array[]; // コピー先の動的配列
n = CopyRates(NULL, PERIOD_H1, 0, 5, copy_array); // 配列へコピーを実行
// 以下は日時で設定する時の書き方です。
//n = CopyRates(NULL, PERIOD_H1, D'2023.02.10 23:00:00', 5, copy_array);
//n = CopyRates(NULL, PERIOD_H1, D'2023.02.10 19:00:00',  D'2023.02.10 23:00:00', copy_array);

for(i=0; i<n; i++) { // 配列のデータを出力
   Print(i, ":①", copy_array[i].time, " ②", copy_array[i].open,  " ③", copy_array[i].high,
            " ④", copy_array[i].low,  " ⑤", copy_array[i].close, " ⑥", copy_array[i].tick_volume);
}
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

タイトルとURLをコピーしました