CopyIndicatorBuffer

Получает в вектор данные указанного буфера указанного индикатора в указанном количестве.

Данные в вектор будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под вектор. Существует 3 варианта функции.

Обращение по начальной позиции и количеству требуемых элементов

bool  vector::CopyIndicatorBuffer(
   long      indicator_handle,     // handle индикатора
   ulong     buffer_index,         // номер буфера индикатора
   ulong     start_pos,            // откуда начнем 
   ulong     count                 // сколько копируем
   );

Обращение по начальной дате и количеству требуемых элементов

bool  vector::CopyIndicatorBuffer(
   long      indicator_handle,     // handle индикатора
   ulong     buffer_index,         // номер буфера индикатора
   datetime  start_time,           // с какой даты
   ulong     count                 // сколько копируем
   );

Обращение по начальной и конечной датам требуемого интервала времени

bool  vector::CopyIndicatorBuffer(
   long      indicator_handle,     // handle индикатора
   ulong     buffer_index,         // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time             // по какую дату
   );

Параметры

indicator_handle

[in]  Хэндл индикатора, полученный соответствующей индикаторной функцией.

buffer_index

[in]  Номер индикаторного буфера.

start_pos

[in]  Номер первого копируемого элемента.

count

[in]  Количество копируемых элементов.

start_time

[in]  Время бара, соответствующее первому элементу.

stop_time

[in]  Время бара, соответствующее последнему элементу.

Возвращаемое значение

Возвращает true в случае успеха, иначе false в случае ошибки.

Примечание

Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_index) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара).

При копировании заранее неизвестного количества данных желательно объявлять вектор без указания размера (без распределения памяти для данных), так как функция CopyBuffer() старается распределить размер принимающего вектора под размер копируемых данных.

Если необходимо произвести частичное копирование значений индикатора, то для этих целей необходимо использовать промежуточный вектор, в который копируется требуемое количество. И уже из этого вектора-посредника произвести поэлементное копирование нужного количества значений в нужные места принимающего вектора.

Если необходимо копировать заранее известное количество данных, то лучше для этого предварительно объявить вектор с указанием размера, чтобы избежать излишнего перевыделения памяти.

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет false, но при этом сам процесс загрузки/построения будет инициирован.

При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута.

Смотри также

CopyBuffer