![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Может просто прогнать пару тестов, и вопросы отпадут?
Может. Жаль, что я очень сильно ограничен по времени и сам не имею возможности провести тесты :(
Может просто прогнать пару тестов, и вопросы отпадут?
Тесты показывают разницу только при запуске в первый раз.
Записи Symbol(), _Symbol - эквивалентны NULL (там, где допускется NULL вместо имени символа)
В данном случае не производится лишняя проверка на существование текущего символа, на присутствие текущего символа в Обзоре рынка и лишний вызов свойств текущего символа, так как свойства текущего символа кешируются
То есть, если указан обычный строковый параметр вместо Symbol(), _Symbol или NULL, то производятся проверки по полной программе и ещё запрос свойств
Ворос:
,- поведение вызовов SymbolInfoXXX , в этих двух случаях, будут ли отличаться более чем на проверку
?
К слову сказать, из свежих сегодняших логов с последней релизной версии МТ5:
Это висели 3 советника на 1 символе, каждый на своём чарте. При том, что запрос идёт на каждом тике. Такие выбросы бывают, конечно, нечасто, но по сути 1 запрос новых тиков, пришедших с прошлого тика, выполнялся 700 мс.
Мониторю около 12 часов, но уже заметны лаги, переходящие все границы.
3 советника, каждый на своём чарте, все на 1 символе, запрашивают на новом пришедшем тике старые тики с прошлого тика через CopyTicksRange. И лаг составляет почти 9 секунд. И, похоже, это не предел. Скорее всего хранилище тиков является общем ресурсом, к которому синхронизируется доступ, но даже при очень ужасной синхронизации не должны быть такие времена.
Кто-то скажет, что это разовый глюк. За эти 12 часов мониторинга к сожалению выходов за 1 секунду было больше сотни. И это уже не похоже на разовые всплески. Похоже, что в это время приходило часто подряд несколько тиков, что и вызывает такие всплески.
Даже если закрыть глаза на то, что 3 советника подрались за общий ресурс, поглядим на другой мониторинг:
Тут на символе был только 1 советник. И всё равно полторы секунды. Он был уже не один, на других символах были и другие, но вроде же многопоточность? Или тики для разных символов всё равно могут тормозить друг друга?
Это базовый функционал для базовых советников. Платформа же позиционируется как алготрейдерская. При этом базовый функционал вызывает сильные вопросы. Большая просьба посмотреть ещё раз на это. Практически уверен, что где-то можно улучшить. Либо был бы очень благодарен за возможность получить последние тики с момента вызова функции, как предлагается тут
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5 и скорость в боевом исполнении
fxsaber, 2021.03.01 07:28
Просьба подумать о такой функции.
Проблема получения СВЕЖИХ тиков без пропусков сейчас решается только через CopyTicks*. Это очень громоздкий механизм для данной распространенной задачи. Как из пушки по воробьям.
Отсюда тормоза, удержание огромных кешей и т.д.
Минимизировал количество вызовов SymbolInfoTick и CopyTicksRange:
Терминал и машина (файл подкачки отключен) с такой нагрузкой.
По итогу удалось значительно сократить количество сообщений о лагах (меньше же вызовов стало) штатных функций.
Лог за 50 минут:
Вроде, не сильно страшно. При этом отсутствовали торговые транзакции. Как с ними - посмотрю.
ЗЫ Выделенный кусок показывает, что сразу три советника (разные символы) получили лаг почти одновременно. Т.е. лаг всеобщий для Терминала.
Записи Symbol(), _Symbol - эквивалентны NULL (там, где допускется NULL вместо имени символа)
В данном случае не производится лишняя проверка на существование текущего символа, на присутствие текущего символа в Обзоре рынка и лишний вызов свойств текущего символа, так как свойства текущего символа кешируются
То есть, если указан обычный строковый параметр вместо Symbol(), _Symbol или NULL, то производятся проверки по полной программе и ещё запрос свойств
Просьба еще раз пояснить, т.к. разные трактовки Ваших слов у форумчан.
В Терминале с одним советником/чартом/символом.
Такой лог за 15 минут. Похоже, дело все же в тормозной Windows. В данном случае это.
Наглядный пример, какие тормоза вызывает Обзор рынка.
Смотреть на значения в столбце Процессор (второй справа).
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Индикаторы: Ping
fxsaber, 2021.03.12 10:56
Вспомнил про этот замечательный индикатор.
Это - картинка с машины с нулевым пингом. Получается, что внутренний лаг Терминала в среднем ~2 мс. Скачет в диапазоне 0-9 мс.
Например, на сервер пришло два тика: сначала один, через 10 мс - второй. Так вот в Терминале второй тик можете получить не через 10 мс после первого, а через 10-19 мс. В среднем через 12 мс.
Если торгуете с рынка (маркеты или отложки по текущей цене), то особенно тяжко будет успевать. Сложно сказать, смогут ли Разработчики здесь что-то улучшить.
Посмотрел московскую биржу, там ситуация аналогичная. Фактически, торгуя через MT5 алго, будете почти гарантированно находиться в конце очереди исполнения, не успевая забрать вкусное, к сожалению.