- 配列、バッファ及び時系列における索引付けの方向
- データアクセスの整理
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
CopySeries
MqlRates構造体から、指定された銘柄期間と指定された量の同期済み時系列を取得します。データは、指定された配列のセットに受信されます。要素は現在から過去までカウントダウンされます。つまり、開始位置が0の場合は現在足を意味します。
複製するデータ量が不明な場合は、受信配列に動的配列を使用することをお勧めします。データ量が配列に格納できる量を超えると、要求されたすべてのデータに適合するように配列を再分配できるからです。
あらかじめ決められた量のデータを複製する必要がある場合は、不必要なメモリの再割り当てを避けるために、静的に割り当てられたバッファを使用することをお勧めします。
受信配列のプロパティ(as_series=true または as_series=false)は無視されます。複製中は、最も古い時系列要素が配列に割り当てられた物理メモリの先頭に複製されます。
int CopySeries(
|
パラメータ
symbol_name
[in] シンボル
timeframe
[in] 期間
start_pos
[in] 最初に複製された要素のインデックス
count
[in] 複製された要素の数
rates_mask
[in] ENUM_COPY_RATES列挙体からのフラグの組み合わせ
array1, array2,...
[out] MqlRates構造体から時系列を受け取る適切な型の配列。関数に渡される配列の順序は、MqlRates構造内のフィールドの順序と一致する必要があります。
戻り値
複製された要素の数(エラーの場合は-1)
注意事項
要求されたデータがサーバ上で利用可能なデータに含まれていない場合、この関数は-1を返します。TERMINAL_MAXBARS(チャートでのバーの最大数)を越えたデータが要求された場合も、この関数は -1を返します。
指標からデータを要求するとき、要求された時系列がまだ構築されていない場合、またはサーバからダウンロードする必要がある場合、関数はすぐに-1を返します。ただし、これにより、データのダウンロード/構築自体が開始されます。
エキスパートアドバイザーまたはスクリプトからデータを要求するとき、端末が適切なデータをローカルに持っていない場合、またはデータがローカル履歴から構築できるがまだ準備ができていない場合、サーバからのダウンロードが開始されます。 この関数は、タイムアウトの期限が切れるまでに準備ができているデータの量を返しますが、履歴のダウンロードは続行され、関数は次の同様の要求でさらに多くのデータを返します。
CopySeriesとCopyRatesの違い
CopySeries関数を使用すると、1 回の呼び出しで必要な時系列のみを別の指定された配列に取得できますが、時系列データはすべて同期されます。これは、特定のインデックスNで結果として得られる配列のすべての値が、指定された銘柄/時間枠のペアの同じバーに属することを意味します。したがって、プログラマーがバーの開始時間までに受信したすべての時系列の同期を確保する必要はありません。
時系列の完全なセットをMqlRates配列として返すCopyRatesとは異なり、CopySeries関数を使用すると、プログラマーは必要な時系列のみを個別の配列として取得できます。これは、フラグの組み合わせを指定して時系列のタイプを選択することで実行できます。関数に渡される配列の順序は、MqlRates構造内のフィールドの順序と一致する必要があります。
struct MqlRates
|
したがって、現在の銘柄/時間枠の最後の100バーのtime、close、real_volume時系列の値を取得する必要がある場合は、次の呼び出しを使用する必要があります。
datetime time[];
|
time、close、volume配列の順番に気を付けてください。これは、 MqlRates構造体のフィールドの値と同じでなければいけません。rates_maskの値の順序は重要ではありません。マスクは次のようになります。
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
例:
//--- 入力パラメータ
|
参照