Ошибки и предложения по улучшению CopyTicks() и CopyTicksRange() после билда 1485. - страница 3

 
MetaQuotes Software Corp.:
Спасибо за сообщение, ошибку исправили - теперь будет работать и в индикаторах. Обновление будет выпущено в ближайшее время.
Скажите пожалуйста, будет ли увеличена скорость получения тиков посредством CopyTicksRange()?
 
Билд 1491 - документация по языку в ME не обновлена. Информацию по CopyTicksRange() можно получить только через сайт!
 
В тестере тики из "пачки" (имеющие одинаковое время с точностью до мс) на данный момент (билд 1495) отдаются по одному. И тестер просчитывает каждый отдельно. В реальности же такого не может быть.
 

Кажется, я попал по адресу. Уважаемые форумчане, долго бился над проблемой самостоятельно, но никак не получается ее решить. Надеюсь, поможете.

Ситуация такая: брокер Финам (Whotrades), счет ММА. Работаем с 26ю российскими бумагами, т.е. открыто 26 окон и к каждому подвешена копия советника. Они пользуются общей библиотечкой на C++, в том числе, в которой создается общее окно для управления и выдачи отладочной информации.

Некоторые параметры стратегии зависят напрямую от ленты тиков, поэтому очень важно, чтобы все тики проходили через алгоритм. Конечно же, было неожиданностью узнать, что OnTick() работает далеко не на каждом тике, да и не всегда, даже, на тике. В результате пришел к необходимости использования функций CopyTicks и CopyTicksRange по таймеру. Недюжинными усилиями (а нигде это не написано), было узнать, что datetime*1000 это как раз количество миллисекунд с 1970 года, но не суть.
Финалом того, что сейчас мы имеем является блок кода, который, на OnTimer, начиная с 10 утра начинает запрашивать последние тиковые данные.

Проблема же в том, что, почему-то, это важно, в первый день после перезапуска метатрейдера, по некоторым бумагам, тиковые данные начинают приходить только с 11 утра (плюс-минус), следующий день - все нормально, начинается все с 10 утра. Список этих бумаг никак не фиксирован, в какой-то первый день могут не прийти тики по одним бумагам, в какой-то - по другим.
Я думал, что проблема в кешировании тиков. Я думал, что проблема с неправильным отсчетом времени, но это оказалось не так. Более того, вроде бы, если бы CopyTicks(Range) не могли бы вернуть данные, они могли бы вернуть ошибку (-1), и все было бы понятно. Но возвращается 0, массив тоже нулевого размера и GetLastError возвращает ERR_SUCCESS. Т.е. просто, как будто бы этих тиков нет, что странно, т.к. в ленте в окне они присутствуют.

Я в растерянности. Надеюсь, подскажете, что делать, или, хотя бы, направление, в котором двигаться.

Если нужно предоставить код, я, следующим комментарием, подчищу его от "лишних" команд и выложу.

Спасибо! 

 
antru:

Да, код желателен. Счет реальный или демо? Какой билд терминала?

Честно, не знаю, работает ли здесь кто-то с Вашим брокером. Если никто здесь не среагирует на Ваш пост - пишите в СервисДеск, можете со ссылкой прямо на свое сообщение. Им также нужно будет предоставить код.

 
antru:
С такими вопросами лучше сразу в сервис-деск с кодом для воспроизведения.
 
Alexey Kozitsyn:

Да, код желателен. Счет реальный или демо? Какой билд терминала?

Честно, не знаю, работает ли здесь кто-то с Вашим брокером. Если никто здесь не среагирует на Ваш пост - пишите в СервисДеск, можете со ссылкой прямо на свое сообщение. Им также нужно будет предоставить код. 

Счет реальный, билд последний, 1525. Я думаю, что вот как надо поступить. Сделать голый код взятия тиков без алгоритма стратегии. Запустить его. Если и он не заработает, то тогда в сервис деск. Если он заработает - искать, возможно, баги у себя.

Спасибо, что сказали про сервис деск, я не знал, что так можно. Я смотрел на сайте metaquotes, там все контакты, это телефоны на кипре и в китае, ни одного е-мейла. 

 
Andrey Khatimlianskii:
С такими вопросами лучше сразу в сервис-деск с кодом для воспроизведения.
Спасибо!
 
antru:

Счет реальный, билд последний, 1525. Я думаю, что вот как надо поступить. Сделать голый код взятия тиков без алгоритма стратегии. Запустить его. Если и он не заработает, то тогда в сервис деск. Если он заработает - искать, возможно, баги у себя.

Спасибо, что сказали про сервис деск, я не знал, что так можно. Я смотрел на сайте metaquotes, там все контакты, это телефоны на кипре и в китае, ни одного е-мейла. 

Именно так и нужно, Ваша стратегия, в данном случае, будет только мешать определить проблему. Нужен именно код того, как Вы запрашиваете тики.
 
antru:

Кажется, я попал по адресу. Уважаемые форумчане, долго бился над проблемой самостоятельно, но никак не получается ее решить. Надеюсь, поможете.

Ситуация такая: брокер Финам (Whotrades), счет ММА. Работаем с 26ю российскими бумагами, т.е. открыто 26 окон и к каждому подвешена копия советника. Они пользуются общей библиотечкой на C++, в том числе, в которой создается общее окно для управления и выдачи отладочной информации.

Некоторые параметры стратегии зависят напрямую от ленты тиков, поэтому очень важно, чтобы все тики проходили через алгоритм. Конечно же, было неожиданностью узнать, что OnTick() работает далеко не на каждом тике, да и не всегда, даже, на тике. В результате пришел к необходимости использования функций CopyTicks и CopyTicksRange по таймеру. Недюжинными усилиями (а нигде это не написано), было узнать, что datetime*1000 это как раз количество миллисекунд с 1970 года, но не суть.
Финалом того, что сейчас мы имеем является блок кода, который, на OnTimer, начиная с 10 утра начинает запрашивать последние тиковые данные.

Проблема же в том, что, почему-то, это важно, в первый день после перезапуска метатрейдера, по некоторым бумагам, тиковые данные начинают приходить только с 11 утра (плюс-минус), следующий день - все нормально, начинается все с 10 утра. Список этих бумаг никак не фиксирован, в какой-то первый день могут не прийти тики по одним бумагам, в какой-то - по другим.
Я думал, что проблема в кешировании тиков. Я думал, что проблема с неправильным отсчетом времени, но это оказалось не так. Более того, вроде бы, если бы CopyTicks(Range) не могли бы вернуть данные, они могли бы вернуть ошибку (-1), и все было бы понятно. Но возвращается 0, массив тоже нулевого размера и GetLastError возвращает ERR_SUCCESS. Т.е. просто, как будто бы этих тиков нет, что странно, т.к. в ленте в окне они присутствуют.

Я в растерянности. Надеюсь, подскажете, что делать, или, хотя бы, направление, в котором двигаться.

Если нужно предоставить код, я, следующим комментарием, подчищу его от "лишних" команд и выложу.

Спасибо! 

Попробуйте использовать в советнике все возможные способы получения тиков и OnTisk и CopyTicks, а затем сравнивать результаты и использовать наиболее адекватный.
Причина обращения: