Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления - страница 31
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не понимаю авторов мультивалютных советников, не использующих мультивалютный OnTick, который обеспечивает совпадение результатов, вне зависимости от выбранного _Symbol.
И это не поможет. Если только не ставить индикатор-тикер на кросс-курс из валюты профита в валюту счета дополнительно ко всем инструментам. Т.е. трогуете по 2 инстр, и может понадобитья еще до 2х тикеров на кроссы.
Такие решения еще можно оправдать для одиночных проходов (и то не всех), но точно не для оптимизации.
Вам необходимо обновить свой код. Препроцессор теперь будет работать больше как C++: https://gcc.gnu.org/onlinedocs/cppinternals/Macro-Expansion.html.
Ок. Спасибо.
Тем не менее вопрос по двум оставшимся конструкциям остается, мало этого добавляется еще один:
Похожая проблема уже описывалась https://www.mql5.com/ru/forum/360210/page41#comment_20741563
Проблема с символом GBPCHF на ДЦ Alp...ry.
Если тестируем по нему же (GBPCHF), то ошибок нет.
Если тест по любому другому инструменту, то то возникает сообщение "old tick GBPCHF" проблема которая обсуждается периодически на форуме более 10 лет, судя по поиску. Видимо так и не решена.
После возникновения old tick запрос к SymbolInfoTick() получает bid = 0; нарушая работу с этим тиком.
Проверочный эксперт:
Запускаю на GBPUSD аккаунт GBP. Старт теста с 2023.05.30 по 2023.06.03
Результат работы:
Печатаются результаты от SymbolInfoTick( GBPCHF,...)
Для первых 3х тиков цена правильная bid = 1.11478, но время тика неправильное time=2023.05.30 00:15:30 0 - не было тика в это время (см. экспорт ниже), видимо смоделировали искусственный тик, назвали его old tick, и вывели сообщение.
Затем 3 тика с bid=0 на момент 00:15:58 707. Но не взяли цену от смоделированного тика с правильным временем, а установили в 0 (как будто бидов вообще не найдено) - возможно в этом проблема! Берите цену от этого искусственного old tick, если других bid-ов не нашлось, 0 выдавать не нужно, т.к. иногда нужно делить на цену, т.е. будет деление на 0.
Запрос (в конце теста за этот 1 день) через CopyTicksRange вернет тоже bid=0 на этот тик датированный 00:15:58 707. Если запустить тест не на 1 день, а на несколько, то запрос через CopyTicksRange вернет правильную цену на этот тик датированный 00:15:58 707, но SymbolInfoTick( GBPCHF,...) по прежнему будет возвращать bid=0
Экспорт тиков из терминала:
Ошибки по old tick появились на первых 2х тиках инструмента за этот день. Тики с ценой есть, почему же возник old tick? Может что-то с последними тиками прошлого дня? Вывел пару последних через экспорт. Или из за того, что был ролловер и не было тиков 20 минут.
-------------------------------------------После этих 2х тиков новых bid не было и должен был взяться последний известный bid. Но видимо тестер не смог вычислить правильный бид для тика в 00:15:58.707 и установил его в 0. Мог бы взять с смоделированного с неправильным временем time=2023.05.30 00:15:30 0
Если начать тест с 2023.05.29 то ошибок с bid=0 не возникает. SymbolInfoTick() показывает правильную цену для тика в тот же самый момент времени:
2023.05.30 00:16:03 ask=1.11854 bid=1.11478 time=2023.05.30 00:15:58 707
Т.е. проблема возникает в некоторые дни, в этом случайно обнаруженном примере возникает при запуске 30 мая, а при запуске 29 мая не возникает.
Bases и History для GBPCHF удалял, новые скачались, ошибка осталась. Думаю можно воспроизвести её на любом компьютре. Архивы с тиками за май и июнь прикрепил в zip-ах на случай если понадобятся.
Жаль, что разработчики сейчас не такие общительные, как раньше по той же проблеме https://www.mql5.com/ru/forum/160552#comment_3823239 Видимо решили вопрос, но не окончательно.
Надеюсь этот анализ поможет разработчикам решить многолетнюю проблему с old tick и bid=0.
#define DEFINES_PARAM_NAME(text) input string text #define PARAM(number) DEFINES_PARAM_NAME( "Параметр" ##number) #define DEFINES_GROUP_NAME(text) input group text #define GROUPP(number) DEFINES_GROUP_NAME( "Группа" ##number) PARAM( 1 ); // Компилится и работает PARAM( 2 ); PARAM( 3 ); GROUPP( 1 ); // Ошибка копиляции GROUPP( 2 ); GROUPP( 3 ); void OnStart () { }
Потому что для GROUP текст должен быть строкой, а не идентификатором.
Потому что для GROUP текст должен быть строкой, а не идентификатором.
Да, спасибо, тупанул . )))
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Общайтесь с разработчиками через Сервисдеск!
Alexandr Gavrilin, 2023.12.12 06:39
MT5 build 4090
При перетаскивании индикатора на график, открывается индикатор который находиться в списке выше!!!!
b4092, отсутствует ошибка компиляции.
А почему должна быть ошибка? Раньше в MQL так нельзя было - сейчас можно. Это шаг вперед, а не назад
А почему должна быть ошибка? Раньше в MQL так нельзя было - сейчас можно. Это шаг вперед, а не назад
Пустой разговор.