Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При ненулевом 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) сколькими запросами были подтверждены полученные результаты? Соблюдены и как именно правила тестов: учет холодного старта, отброс выбросов, повторяемость результатов на серии, код для воспроизведения.
Вообще цифровые результаты надо предварять точным кодом, чтобы любой мог повторить их. Иначе обсуждать не имеет смысла.
На точный код ссылку дал.
Проверим.
Но по отсутствию стакана в одном из серверов большие сомнения. Не важно, что стакан не визуализирован. Если он есть у символа, то его данные всегда присутствуют и при запросах тиков действует более сложных алгоритм выдачи.