Скорее всего, за первую неделю года нет данных - праздники и т. п. Попробуйте установить даты на "более рабочие дни". То есть в варианте с количеством данных терминал отдает данные за пределами 2022.01.07.
По второму варианту функции вопрос снялся. Выставлялся более крупный таймфрейм и скрипт пытался читать данные о временах, когда и компьютеров-то еще не было..
Третий вариант функции все равно не работает. От даты до даты.
Ihor Herasko #:
Скорее всего, за первую неделю года нет данных - праздники и т. п. Попробуйте установить даты на "более рабочие дни". То есть в варианте с количеством данных терминал отдает данные за пределами 2022.01.07.
Скорее всего, за первую неделю года нет данных - праздники и т. п. Попробуйте установить даты на "более рабочие дни". То есть в варианте с количеством данных терминал отдает данные за пределами 2022.01.07.
Попробовал указать явно рабочие дни - массив все равно не заполняется.
Указал для обоих массивов заполнение по второму варианту. Разные размеры массивов не мешают. Значит, проблема была не в этом.
При этом чужой код с таким указанием диапазона - работает. Смущает только, что принимающий массив указывается как fixed
После обновления все само заработало. Без бубна. По методу, описанному в документации.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день.
Есть вопрос по функции 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?