CopyRates 関数
この関数は、指定した通貨ペアと時間軸、バーの範囲の価格情報 (①開始時間 ②始値 ③高値 ④安値 ⑤終値 ⑥Tick数 ⑦スプレッド ⑧出来高) を、指定したMqlRates型配列へコピーして、コピー先配列の要素数を取得します。
※価格情報の⑦⑧についてFX会社によっては提供されていない場合があります。
バーのインデックス値は、最新のバーが 0になります。しかし、配列へコピーされた最も古いデータは、コピー先の配列上ではインデックス値が 0となり、最新のバーのデータはインデックス値が最大になります。
データ型と構成・戻り値
この関数には 3つの型があります。
int CopyRates(①, ②, ③, ④, ⑦); // インデックス値とコピー数で実行
int CopyRates(①, ②, ⑤, ④, ⑦); // 開始日時とコピー数で実行
int CopyRates(①, ②, ⑤, ⑥, ⑦); // 開始日時と終了日時で実行 ⑤⑥は入れ替わってもOK
戻り値は、コピー先の配列の要素数を返します。エラーの場合は -1を返します。
要求したデータの範囲がサーバーで利用可能なデータの範囲に収まらない場合、関数は -1を返します。TERMINAL_MAXBARS (チャートのバーの最大数) を超えるデータを要求した場合、関数は -1を返します。要求した時系列がまだ構築されていないか、サーバーからダウンロードする必要がある場合、関数は -1を返します。
引数 [5]
CopyRates関数は 5個の引数で構成されます。
番号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | symbol_name | string | - | - | 対象とする通貨ペア名。 「NULL」は現在のチャートの通貨ペアを表します。 |
② | timeframe | enum | - | - | 時間軸。ENUM_TIMEFRAMES 列挙値から選択。0は現在のチャートの時間軸を選択したことになります。 |
③ | start_pos | int | - | - | コピーを開始するバーのインデックス値。 |
④ | count | int | - | - | コピーするバーの数。 |
⑤ | start_time | datetime | - | - | コピーを開始するバーの開始日時。 |
⑥ | stop_time | datetime | - | - | コピーを終了するバーの開始日時。 |
⑦ | 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);
}
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)