Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 40

 
fxsaber #:

EXPERT::Remove();

Да, полезно. А для скриптов и индиков это подходит?

 
Alexey Viktorov #:

Проверялась версия откомпилированная по F7 и запущенная перетаскиванием из навигатора на график.

Занятно. Я попробовал то же самое в эксперте - опять никакой ошибки.

Получается, это зависит от процессора или ОС?

 
mktr8591 #:

EXPERT::Remove();

Да, полезно. А для скриптов и индиков это подходит?

В 99% случаев.

 
выражение "1/0" вызывает ошибку компилятора, а "i/0" прокатывает на ура.
и кстати при d=0.0  "d/0" возвращает не "inf", а "nan", что логично.
 

Правильно ли понимаю, что до нововведения первое выражение работало медленнее второго?

double d;

d = 1 / d / d;
d = 1 / ( d * d);

Раньше во втором только одна проверка на ноль. Сейчас в обоих выражениях проверок нет.

 
Ilyas #:

Есть предложение добавить таки функцию Halt

Давно назрели и другие функции, чтобы можно было уменьшать вычислительную нагрузку.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2755: Улучшения в окне котировок и отладчике

fxsaber, 2021.01.30 12:08

В Win10 может быть несколько рабочих столов, между которыми быстрое переключение происходит по CTRL+WIN+LEFT и CTRL+WIN+RIGHT.

Очень удобно запускать, например, боевые Терминалы на отдельном рабочем столе. Тогда котлеты от мух отделены.


Однако, сейчас Терминалы, что работают на неактивном рабочем столе, продолжают активную деятельность по отрисовке GUI. Хотя они даже теоретически не могут быть видны. По сути их состояние приравнивается к минимизации.


Возможно ли не отрисовывать Терминалы, работающие на неактивном рабочем столе? Или иметь TERMINAL_MINIMIZED и TEMINAL_ACTIVEDESKTOP (TERMINAL_INVISIBLE)?


Сейчас такие DLL-манипуляции вынужден делать, чтобы не тратить ресурсы впустую.


В общем, логичное желание не рисовать там, где это точно не будет кем-либо увидено. Например, не считать тяжелую стату для вывода на чарт, если этот чарт не виден. Коды выше позволяют это делать, но это далеко не штатные решения, а костыли.

Сейчас значительно разгружаю VPS через подобное в WinAPI - узнаю, что терминал невиден для пользователя, а значит не нужны канвасы, вывод статы и прочее.
 
fxsaber #:

Язык становится все более низкоуровневым. Не знаю, плохо это или хорошо.

однозначно это не правильно

разработчики пишут про это: https://www.ibm.com/docs/ru/aix/7.2?topic=concepts-floating-point-exceptions

раньше терминал обрабатывал исключения в процессах (MQL-программах), теперь в угоду повышения производительности имеем потерю данных, причем узнать об этом не будет возможным.... ну или как заведено: "пишите код правильно" (С) Метаквотес


ЗЫ: чисто гипотетически, можно предположить аппаратные сбои памяти с потерей данных на неисправном ПК, вероятность получить переполнение после арифметической операции очень велика, но раньше это вызвало бы просто удаление советника и запись в лог


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

fxsaber, 2021.08.30 20:01

Правильно ли понимаю, что до нововведения первое выражение работало медленнее второго?

double d;

d = 1 / d / d;
d = 1 / ( d * d);

Раньше во втором только одна проверка на ноль. Сейчас в обоих выражениях проверок нет.


в прошлый раз когда пытались разобраться с целочисленным переполнением прогуглил изрядно материала, в общем, что деление, что умножение - ошибка одна и та же - переполнение, вопрос как обрабатывать эту исключительную ситуацию, см. выше (ссылка)

т.е. эти расчеты выполняются  одинаково по времени, но  если было переполнение, то дополнительно будет вызван обработчик, который или увидит, что произошло деление на ноль или результат оказался меньше эпсилон, опять же статья по ссылке бегло это показывает

 
Igor Makanu #:

раньше терминал обрабатывал исключения в процессах (MQL-программах), теперь в угоду повышения производительности имеем потерю данных, причем узнать об этом не будет возможным.... ну или как заведено: "пишите код правильно" (С) Метаквотес

А откуда повышение производительности? Раньше терминал проверял делитель на ноль, а теперь программисту нужно проверять, т.е. фактически проверка никуда не делась

 
mktr8591 #:

Кроме ExpertRemove() какие есть варианты?

Пока Разработчики не отказались от проверки индексов массивов и указателей - есть еще 'array out of range' и 'invalid pointer access'

 
A100 #:

А откуда повышение производительности? Раньше терминал проверял делитель на ноль, а теперь программисту нужно проверять. Тоже самое

вопрос не по окладу, две страницы этого топика отмотайте назад, там разработчики объяснили свое видение

ЗЫ: вот не припомню IDE / компилятора, который сразу из коробки заоптимизировал бы деление на ноль в усмерть.... обычно для этого нужно хорошенько потрудиться над чтением мануалов, тут же предлагают от обратного:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

Ilyas, 2021.08.30 18:23

Терминал не пропустит ордера с Nan или Inf
Софтверная валидация вещественного делителя дороже чем для целых.

Но мы можем для MQL программ добавить новое свойство - "хардверная обработка исключений", по умолчанию всегда включена и может быть отключена через #property FP_EXCEPTIONS_DISABLED
Тогда, при некорретных значениях операндов в операциях над вещественными, исключения будут генерироваться процессором, подобно целочисленному делению.
Соответственно MQL программы будут останавливаться по критической ошибке.


т.е. из коробки получи то, что во всех компиляторах по умолчанию отключено

Причина обращения: