CopyBuffer по временному интервалу

 

Добрый день.

Есть вопрос по функции CopyBuffer

В документации указано, что есть три варианта этой функции


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

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

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

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

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

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

Если по первым двум вариантам вопросов почти нет, то по третьему...

Помним, что в массив считываются данные от более новых к более старым.

Инициирую переменные start_time и stop_time


datetime start_time=D'2022.01.01';          
datetime stop_time=D'2022.01.07';
        
  

...
//Пробую считывать данные со стартовой датой и указанным числом читаемых элементов и по временному интервалу.            
 CopyBuffer(ADX_handle, 1, start_time, 9000000, ADX_DI_plusBuffer);
 CopyBuffer(ADX_handle, 2, stop_time , start_time,  ADX_DI_minusBuffer);


В дебагере видим интересный результат. Строка со стартовой датой и числом элементов отрабатывает нормально. НО! В описании указано про число читаемых элементов:

int       count,                // сколько копируем

Мы же помним, что " Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647". При этом динамический массив не создается уже на 10 000 000 элементов.

Вариант с интервалом дат не заполняет динамический массив вообще. Ни при указании сначала более свежей даты, затем более старой. Ни при указании их в обратном порядке. Думал, что много элементов, так нет.. даже неделю не считывает функция.

Коллеги, подскажите, как правильно считывать данные с временного интервала функцией CopyBuffer?

 
Скорее всего, за первую неделю года нет данных - праздники и т. п. Попробуйте установить даты на "более рабочие дни". То есть в варианте с количеством данных терминал отдает данные за пределами 2022.01.07.
 

По второму варианту функции вопрос снялся. Выставлялся более крупный таймфрейм и скрипт пытался читать данные о временах, когда и компьютеров-то еще не было..

Третий вариант функции все равно не работает. От даты до даты.

 
Ihor Herasko #:
Скорее всего, за первую неделю года нет данных - праздники и т. п. Попробуйте установить даты на "более рабочие дни". То есть в варианте с количеством данных терминал отдает данные за пределами 2022.01.07.


Попробовал указать явно рабочие дни - массив все равно не заполняется.

Указал для обоих массивов заполнение по второму варианту. Разные размеры массивов не мешают. Значит, проблема была не в этом.



При этом чужой код с таким указанием диапазона - работает. Смущает только, что принимающий массив указывается как fixed


 

После обновления все само заработало. Без бубна. По методу, описанному в документации.