指定範囲のバーの開始時間をコピー CopyTime 関数

関数

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

CopyTime 関数

 この関数は、指定した通貨ペアと時間軸、バーの範囲の開始時間を、指定した配列へコピーして、コピー先配列の要素数を取得します。

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

データ型と構成・戻り値

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

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

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

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

引数 [5]

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

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

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

使用例

CopyTime関数による各バーの開始時間の取得

 CopyTime関数を使って 1時間軸チャートの最新のバーから 5時間分(5本分)のバーの開始時間をコピー先の配列へ格納します。
 コピー先の配列については確認のため格納されているデータを出力します。

コード

// CopyTime関数による各バーの開始時間の取得
#property strict
void OnInit() {

int n, i;
datetime copy_array[]; // コピー先の動的配列
n = CopyTime(NULL, PERIOD_H1, 0, 5, copy_array); // 配列へコピーを実行
// 以下は日時で設定する時の書き方です。
//n = CopyTime(NULL, PERIOD_H1, D'2023.02.10 23:00:00', 5, copy_array);
//n = CopyTime(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]);
}
}

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

結果

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