Ошибки, баги, вопросы - страница 2753
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я понял, с чем было связано ваше непонимание. В 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()
У меня, при отладке и при самой работе индикатора, в журнале, внезапно пишет Stack overflow. При самой отладке вылетает сообщение "Возникла критическая ошибка, отладка остановлена". Вот моя аналогичная тема: https://www.mql5.com/ru/forum/338301. Но при компиляции компилятор не ругается и всё проходит нормально. При отладке невозможно установить в какой момент программа вылетает.
Возможно, всё дело в компиляторе? Какой компилятор используется я особо не вникал, но в настройках у меня следующая картина:
У меня установлен VS, поэтому, в настройках эта ссылка. Значит и компилятор соответствующий?... Но какой компилятор был, когда VS у меня не было, я честно говоря, не вникал. Может быть, следует попробовать вернуться к тому компилятору и попробовать скомпилировать проект с помощью него?
Пока я искал способы решения проблемы, с приходом очередного обновления терминала отладка заработала должным образом. Удалось найти ошибки. Некоторые методы зацикливались, вызывая сами себя. Поэтому программа и вылетала с сообщением "Stack overflow". Но с помощью работающей отладки мне удалось найти все проблемные строки и исправить их. Выражаю свою благодарность Разработчикам за быстрое устранение бага с отладкой!
в естественном языке (в математике) константа это... ну как бы константа! ))
в С++ константа это машинная проверка компилятором константности в области видимости (или жизни) переменной
В C++ так же как и в MQL, константе можно один раз задать значение при создании и больше его не изменять. Области видимости тут не при чём.
Не сильно отличается от того что в математике.
Узнал, что компилятор встроен в MetaEditor с 900 билда: https://www.mql5.com/ru/forum/21374
Тогда к чему это окно со строкой ведущей к каталогу где установлен VS?
Компилятор VS используется, если Вы пишете DLL.
Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет (и даже _Symbol можно заменить на NULL). Фактически они должны быть объявлены как const volatile
А Вы наоборот - предлагаете дополнить этот ряд
Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет. И даже _Symbol можно заменить на NULL
А Вы наоборот - предлагаете дополнить этот ряд
Смысл в возможности передать по ссылке.