По уважительной причине была удалена тема "Что такое "тик"?". Несколько своих ответов из нее приведу из сохранившейся истории
В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.
два подряд идущих тика (вызывающие события Tick/Calculate) могут совпадать полностью по структуре MqlTick (все цены и объемы и время и флаги равны), но на самом деле быть разными. Bid/Ask всегда кратны TickSize. Last (не на бирже) может быть не кратна TickSize. TickSize может быть в разы больше Point (посмотрите RTS, например). Поэтому говорить про Point не совсем корректно в данном случае.
Возможно пригодится. SymbolInfoTick - не синхронизированная функция. Это значит, что в разных местах OnTick она может возвращать разные тики. Более того, даже если в самом начале OnTick вызвать SymbolInfoTick, то полученный тик не будет являться инициатором Tick-события, на который OnTick сработал. Поля его MqlTick-структуры не будут равны тому тику, что пришел от биржи, т.к. эти поля синтезированы самим терминалом и равны Marketwatch-значениям.
if (SymbolInfoTick(_Symbol, Ticks[0])) Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего FirstRun = false; } }
Результат
2016.10.1513:23:57.6892016.10.1200:00:161
Должна возвращать ноль, а возвращает единицу. При этом Ticks[] не меняется. Баг!
if (SymbolInfoTick(_Symbol, Ticks[0])) Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего FirstRun = false; } }
Результат
2016.10.1513:23:57.6892016.10.1200:00:161
Должна возвращать ноль, а возвращает единицу. При этом Ticks[] не меняется. Баг!
А не может это быть из-за выходных?
Из хелпа. CopyTicks Функция получает в массив ticks_array тики, накопленные терминалом за текущую рабочую сессию.
2) было ли разделение trade/info тиков в их исходных потоках? Сложные потоки требуют пересчета, а простой выдачи
3) какой реально был запрос?
4) сколькими запросами были подтверждены полученные результаты? Соблюдены и как именно правила тестов: учет холодного старта, отброс выбросов, повторяемость результатов на серии, код для воспроизведения.
Вообще цифровые результаты надо предварять точным кодом, чтобы любой мог повторить их. Иначе обсуждать не имеет смысла.
2) было ли разделение trade/info тиков в их исходных потоках? Сложные потоки требуют пересчета, а простой выдачи
3) какой реально был запрос?
4) сколькими запросами были подтверждены полученные результаты? Соблюдены и как именно правила тестов: учет холодного старта, отброс выбросов, повторяемость результатов на серии, код для воспроизведения.
Вообще цифровые результаты надо предварять точным кодом, чтобы любой мог повторить их. Иначе обсуждать не имеет смысла.
На точный код ссылку дал.
Не было стаканов.
Только INFO-тики.
COPY_TICKS_INFO с from > 0.
Индикатор по ссылке посмотрите в работе. Повторяемость полная. Холодный старт исключен. Выбросы - аналогично.
Но по отсутствию стакана в одном из серверов большие сомнения. Не важно, что стакан не визуализирован. Если он есть у символа, то его данные всегда присутствуют и при запросах тиков действует более сложных алгоритм выдачи.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
При ненулевом From внутри CopyTicks ищется (наверное, бинарный поиск) место, токуда начинать - индекс во внутренней базе.
Прошу добавить функцию, которая возвращает индекс в базе по времени. Тогда эту задачу будет возможность решить оптимальней
Каков оптимальный (быстродействие) алгоритм получения тиков с from_time до to_time?
По уважительной причине была удалена тема "Что такое "тик"?". Несколько своих ответов из нее приведу из сохранившейся истории
В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.
два подряд идущих тика (вызывающие события Tick/Calculate) могут совпадать полностью по структуре MqlTick (все цены и объемы и время и флаги равны), но на самом деле быть разными. Bid/Ask всегда кратны TickSize. Last (не на бирже) может быть не кратна TickSize. TickSize может быть в разы больше Point (посмотрите RTS, например). Поэтому говорить про Point не совсем корректно в данном случае.
Возможно пригодится. SymbolInfoTick - не синхронизированная функция. Это значит, что в разных местах OnTick она может возвращать разные тики. Более того, даже если в самом начале OnTick вызвать SymbolInfoTick, то полученный тик не будет являться инициатором Tick-события, на который OnTick сработал. Поля его MqlTick-структуры не будут равны тому тику, что пришел от биржи, т.к. эти поля синтезированы самим терминалом и равны Marketwatch-значениям.
{
static bool FirstRun = true;
if (FirstRun)
{
MqlTick Ticks[1];
if (SymbolInfoTick(_Symbol, Ticks[0]))
Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
FirstRun = false;
}
}
Результат
Должна возвращать ноль, а возвращает единицу. При этом Ticks[] не меняется. Баг!
В тестере запускаем советник
{
static bool FirstRun = true;
if (FirstRun)
{
MqlTick Ticks[1];
if (SymbolInfoTick(_Symbol, Ticks[0]))
Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
FirstRun = false;
}
}
Результат
Должна возвращать ноль, а возвращает единицу. При этом Ticks[] не меняется. Баг!
А не может это быть из-за выходных?
Из хелпа. CopyTicks Функция получает в массив ticks_array тики, накопленные терминалом за текущую рабочую сессию.
А не может это быть из-за выходных?
Из хелпа. CopyTicks Функция получает в массив ticks_array тики, накопленные терминалом за текущую рабочую сессию.
Проблема с производительностью CopyTicks.
Робо
БКС
Это данные тикового индикатора. В обоих случаях закачано 2-3 тысячи тиков. Но в робо это происходит быстрее более, чем на порядок.
Днем на форекс видел совпадение скоростей - тогда рынок был подвижней. Похоже, копитикс тормозит активный маркетвотч.
Единственный чарт и единственный индикатор в обоих случаях. И копитикс уже точно имел в базе/кэше закачанные котиры.
1) были ли стаканы на обоих?
2) было ли разделение trade/info тиков в их исходных потоках? Сложные потоки требуют пересчета, а простой выдачи
3) какой реально был запрос?
4) сколькими запросами были подтверждены полученные результаты? Соблюдены и как именно правила тестов: учет холодного старта, отброс выбросов, повторяемость результатов на серии, код для воспроизведения.
Вообще цифровые результаты надо предварять точным кодом, чтобы любой мог повторить их. Иначе обсуждать не имеет смысла.
1) были ли стаканы на обоих?
2) было ли разделение trade/info тиков в их исходных потоках? Сложные потоки требуют пересчета, а простой выдачи
3) какой реально был запрос?
4) сколькими запросами были подтверждены полученные результаты? Соблюдены и как именно правила тестов: учет холодного старта, отброс выбросов, повторяемость результатов на серии, код для воспроизведения.
Вообще цифровые результаты надо предварять точным кодом, чтобы любой мог повторить их. Иначе обсуждать не имеет смысла.
На точный код ссылку дал.
Проверим.
Но по отсутствию стакана в одном из серверов большие сомнения. Не важно, что стакан не визуализирован. Если он есть у символа, то его данные всегда присутствуют и при запросах тиков действует более сложных алгоритм выдачи.