Ошибки, баги, вопросы - страница 2752
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня, при отладке и при самой работе индикатора, в журнале, внезапно пишет Stack overflow. При самой отладке вылетает сообщение "Возникла критическая ошибка, отладка остановлена". Вот моя аналогичная тема: https://www.mql5.com/ru/forum/338301. Но при компиляции компилятор не ругается и всё проходит нормально. При отладке невозможно установить в какой момент программа вылетает.
Возможно, всё дело в компиляторе? Какой компилятор используется я особо не вникал, но в настройках у меня следующая картина:
У меня установлен VS, поэтому, в настройках эта ссылка. Значит и компилятор соответствующий?... Но какой компилятор был, когда VS у меня не было, я честно говоря, не вникал. Может быть, следует попробовать вернуться к тому компилятору и попробовать скомпилировать проект с помощью него?
Как можно сменить компилятор?
Значение _Digits не должно было поменяться хотя бы потому, что оно помещается в read-only блок памяти
Получается тогда, что это значение может обманывать.
Всегда было можно (F3). Работают.
по F3 действительно работают, а в меню их нет.
Получается тогда, что это значение может обманывать.
Поэтому для строгости нужно использовать Digits() вместо _Digits. Тогда формально и никакого логического противоречия не возникает - Digits() не связана модификатором const.
Насколько я понял _Digits нужна была для совместимости с MT4 - не более того
выполнение этого скрипта должно вернуть значение sum = 0 ?
или этот скрипт вообще должен выдать ошибку компиляции?
Я понял, с чем было связано ваше непонимание. В C# спецификатор const применяется только для константных выражений, вычисляемых на этапе компиляции. В С++ для этого есть аналог: constexpr. А в MQL его нет.
да
тут в общем вопрос в синтаксических конструкциях языков
в естественном языке (в математике) константа это... ну как бы константа! ))
в С++ константа это машинная проверка компилятором константности в области видимости (или жизни) переменной
в С# константа имеет более приближенный синтаксический смысл к нормам естественного языка
ну и к чему вот это обсуждение:
имхо, эта конструкция полностью соответствует синтаксису С++ , ну или по крайней мере в MQL4 был Bid и Ask и вот ни у кого за столько времени не вызвало сомнения насколько это обосновано
если без демагогии, то нужна возможность максимально быстрого доступа к текущим ценам, профилировщшик показывает, что постоянное обращение к SymbolInfoDouble() и SymbolInfoTick() снижает скорость оптимизации
Как можно сменить компилятор?
Узнал, что компилятор встроен в MetaEditor с 900 билда: https://www.mql5.com/ru/forum/21374
Тогда к чему это окно со строкой ведущей к каталогу где установлен VS?
если без демагогии, то нужна возможность максимально быстрого доступа к текущим ценам, профилировщшик показывает, что постоянное обращение к SymbolInfoDouble() и SymbolInfoTick() снижает скорость оптимизации
Ну вот тут ранее предлагалось добавить возможность передачи NULL вместо названия текущего символа. Это бы могло ускорить работу в частных случаях. Ну а в целом нужен доступ через хэндлы, а не через текстовые значения символов. Но я думаю, вряд ли разработчики пойдут на такое усложнение. Да и не стоит оно того, мне кажется. Проблема скорее надуманная.
В приведённых ранее замерах затраты составляли лишь 6% от холостого прогона тестера (без нагрузки). А в рабочем коде будет на порядок меньше. Стоит ли обращать внимание на такие пустяки. Да и вызывать эти функции более одного раза в обработчике - неправильное решение само по себе.
Ну вот тут ранее предлагалось добавить возможность передачи NULL вместо названия текущего символа. Это бы могло ускорить работу в частных случаях. Ну а в целом нужен доступ через хэндлы, а не через текстовые значения символов. Но я думаю, вряд ли разработчики пойдут на такое усложнение. Да и не стоит оно того, мне кажется. Проблема скорее надуманная.
Это уже работает, но ускорения нет (я проверял) - видимо и так все уже максимально ускорено либо наоборот - для ускорения еще непочатый край (просьба к Разработчикам нужное подчеркнуть)
Поэтому для строгости нужно использовать Digits() вместо _Digits. Тогда формально и никакого логического противоречия не возникает - Digits() не связана модификатором const.
Насколько я понял _Digits нужна была для совместимости с MT4 - не более того
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Ilyas, 2020.05.20 15:39
вызов функции Symbol() ВСЕГДА разворачивается в доступ к глобальной переменной _Symbol, как и Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()