Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 38
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Запускал и скрипт, и советник, и в b3029, и в b3030… о разнице писал тут
Видимо, дело в CPU.
Запускал и скрипт, и советник, и в b3029, и в b3030… о разнице писал тут
Да, мы добавили более точный механизм отлова делений на ноль.
Абсолютно точный отлов строки падения в рантайме не всегда возможен, так как это потребует усложнения кода и потенциального замедления на операциях деления.
Да, мы добавили более точный механизм отлова делений на ноль.
Абсолютно точный отлов строки падения в рантайме не всегда возможен, так как это потребует усложнения кода и потенциального замедления на операциях деления.
Так почему деление на ноль не срабатывает?
b3030, CTRL+B не работает. Объекты есть, пункт меню по ПКМ активен. ALT+B - работает.
Перезагрузил терминал, стал работать CTRL+B. Все делал на домашнем компе.
Возможно, с этим проблема связана.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях
fxsaber, 2021.08.19 21:00
На удаленных машинах (VPS через RDP) постоянно сталкиваюсь с одной и той же проблемой.
Запущено несколько одинаковых советников. Одни реагируют на нажатие CTRL/SHIFT, другие - нет.
Если из советника, который не реагирует на эти клавиши, запустить что-нибудь стороннее через это.
То советник волшебным образом начинает реагировать на нажатия CTRL/SHIFT!
Вроде, про проблему отсутствия реакций на нажатия в VPS где-то озвучивалось ранее. Про костыль "лечения" - нет.
Просьба посмотреть эту проблему.
Запускаю скрипт от fxsaber в b3030, откомпилированный по F7, получаю следующие результаты, никаких сообщений об ошибке.
Когда запускую по F5, то получаю во время выполнения алерт по критической ошибке с вопросом перейти в дебагер, причем:
-Если отвечаю "Да", то активируется окно ME с отладкой, но при этом в логе экспертов нет никакого сообщения об ошибке!
-Если отвечаю "Нет", то в логе экспертов запись " zero divide, check divider to avoid this error in 'sTestDiv0.mq5' (22,15)"
В b2981 этот же скрипт, скомпилированный в релиз, вылетал с сообщениями zero divide.
@Alexey Viktorovу вас в b3030 ошибка zero divide выдается для скрипта, откомпилированного в дебаг или релиз режиме?
@Renat Fatkhullin
В чем заключается "более точный механизм отлова делений на ноль", если в b2981 этот же скрипт в рантайме выдавал ошибку, а в b3030 нет?
В чем заключается "более точный механизм отлова делений на ноль", если в b2981 этот же скрипт в рантайме выдавал ошибку, а в b3030 нет?
Мы вытаскиваем отлов деления на ноль на простых синтетических тестах из под оптимизатора кода, чтобы не дать возможность компилятору на этапе компиляции простых константных случаев отбросить результат.
В билде 3030 это неудачно получилось, в 3031 все будет правильно. Уже исправили.
В чем заключается "более точный механизм отлова делений на ноль", если в b2981 этот же скрипт в рантайме выдавал ошибку, а в b3030 нет?
Работы по удалению контроля за делителем не закончены в билде 3030
Мы отказалить от контроля за делителем (и переполнением) со стороны языка, т.к. в MQL нет и не планируется обработка исключений.
Да, значения координат (в коде ) исключения полезны, но цена им - скорость, на каждом делении проверка + условный переход.
При делении на ноль вещественных чисел исключения не будет, результатом будет inf.
Впрочем получить inf можно и другими способами, кроме как деление на ноль, поэтому программистам нужно самим заботиться о корректности расчётов, например, используя функцию MathClassify
Мы оставили проверки деления (целых и вещественных) в режиме отладки, где можно будет увидеть координаты в коде.
При делении на ноль вещесвтенных чисел, исключения не будет, результатом будет inf.
Впрочем получить inf можно и другими способами, кроме как деление на ноль, поэтому программистам, нужно самим заботиться о корректности расчётов, например используя функцию MathClassify
Язык становится все более низкоуровневым. Не знаю, плохо это или хорошо.
Сам наткнулся на эту ситуацию, когда стал вычислять маржинальные требования (фактически, торговые лоты) и случайно запустил на кастомном символе, получив странное значение.
Полез в код, увидел деление на ASK-цену. Но у кастомного символа такой цены не было (CustomTicksAdd не вызывал) - MarketWatch-поля пустые, т.е. нулевые. И вот происходит деление на ноль, а ошибок нет.
Стал разбираться, и оказалось, что отныне делить на ноль можно. И если раньше знал, что случись деление на ноль в боевом советнике, программа просто вылетит и даже сообщит, что и где произошло. То теперь несколько некомфортно, т.к. в случае деления на ноль программа не остановится, а начнет некорректные вычисления пихать в торговлю: огромные лоты, близкие стопы, спам торговыми приказами, бесконечные перевороты и т.д.
Т.е. можно очень круто слить на программной ошибке! В этом дискомфорт. Ситуации же, когда вдруг произошло деление на ноль, могут быть настолько редкими, что не подвластны идее с дебагом. Раз в год "палка" стрельнет и сольет торговый счет. Надо придумывать какие-то защиты. Какие - голову ломать, видимо, долго.
Работы по удалению контроля за делителем не закончены в билде 3030
Мы отказалить от контроля за делителем (и переполнением) со стороны языка, т.к. в MQL нет и не планируется обработка исключений.
Да, значения координат (в коде ) исключения полезны, но цена им - скорость, на каждом делении проверка + условный переход.
При делении на ноль вещественных чисел исключения не будет, результатом будет inf.
Впрочем получить inf можно и другими способами, кроме как деление на ноль, поэтому программистам нужно самим заботиться о корректности расчётов, например, используя функцию MathClassify
Мы оставили проверки деления (целых и вещественных) в режиме отладки, где можно будет увидеть координаты в коде.
Можно сделать функцию-обертку для операции деления наподобие Div(a,b,exit=true,default=0),
Если b(делитель) == 0 или это NaN, то для exit=true делать аварийное завершение программы, а для false - возвращать default.
А в режиме отладки пусть считает простым делением.
И применять ее всегда!
Теперь возникает вопрос - как сделать полное аварийное прерывание программы (ABORT)?
раньше это можно было сделать через if(1/MathAbs(0.0)==1) - а теперь?