Ошибки, баги, вопросы - страница 2753

 
Alexey Navoykov:
 Я понял, с чем было связано ваше непонимание.  В C# спецификатор const применяется только для константных выражений, вычисляемых на этапе компиляции.  В С++ для этого есть аналог:  constexpr.  А в MQL его нет.

да

тут в общем вопрос в синтаксических конструкциях языков

в естественном языке (в математике) константа это... ну как бы константа! ))

в С++ константа это машинная проверка компилятором константности в области видимости (или жизни) переменной

в С# константа имеет более приближенный синтаксический смысл к нормам естественного языка


ну и к чему вот это обсуждение:

const MqlTick _Tick; // Текущий _Symbol-тик.

имхо, эта конструкция полностью соответствует синтаксису С++ ,  ну или по крайней мере в MQL4 был Bid и Ask  и вот ни у кого за столько времени не вызвало сомнения насколько это обосновано




если без демагогии, то нужна возможность максимально быстрого доступа к текущим ценам, профилировщшик показывает, что постоянное обращение к SymbolInfoDouble() и SymbolInfoTick() снижает скорость оптимизации

 
Mihail Matkovskij:

Как можно сменить компилятор?

Узнал, что компилятор встроен в MetaEditor с 900 билда: https://www.mql5.com/ru/forum/21374

Тогда к чему это окно со строкой ведущей к каталогу где установлен VS?

Компиляторы

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu:

если без демагогии, то нужна возможность максимально быстрого доступа к текущим ценам, профилировщшик показывает, что постоянное обращение к SymbolInfoDouble() и SymbolInfoTick() снижает скорость оптимизации

Ну вот тут ранее предлагалось добавить возможность передачи NULL вместо названия текущего символа. Это бы могло ускорить работу в частных случаях.  Ну а в целом нужен доступ через хэндлы, а не через текстовые значения символов.  Но я думаю, вряд ли разработчики пойдут на такое усложнение.  Да и не стоит оно того, мне кажется.  Проблема скорее надуманная.

В приведённых ранее замерах затраты составляли лишь 6% от холостого прогона тестера (без нагрузки).  А в рабочем коде будет на порядок меньше.  Стоит ли обращать внимание на такие пустяки.  Да и вызывать эти функции более одного раза в обработчике - неправильное решение само по себе.

 
Alexey Navoykov:

Ну вот тут ранее предлагалось добавить возможность передачи NULL вместо названия текущего символа. Это бы могло ускорить работу в частных случаях.  Ну а в целом нужен доступ через хэндлы, а не через текстовые значения символов.  Но я думаю, вряд ли разработчики пойдут на такое усложнение.  Да и не стоит оно того, мне кажется.  Проблема скорее надуманная.

Это уже работает, но ускорения нет (я проверял) - видимо и так все уже максимально ускорено либо наоборот - для ускорения еще непочатый край (просьба к Разработчикам нужное подчеркнуть)

 
A100:

Поэтому для строгости нужно использовать Digits() вместо _Digits. Тогда формально и никакого логического противоречия не возникает - Digits() не связана модификатором const.

Насколько я понял _Digits нужна была для совместимости с MT4 - не более того

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

Ошибки, баги, вопросы

Ilyas, 2020.05.20 15:39

вызов функции Symbol() ВСЕГДА разворачивается в доступ к глобальной переменной _Symbol, как и Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()

 
Mihail Matkovskij:

У меня, при отладке и при самой работе индикатора, в журнале, внезапно пишет Stack overflow. При самой отладке вылетает сообщение "Возникла критическая ошибка, отладка остановлена". Вот моя аналогичная тема: https://www.mql5.com/ru/forum/338301. Но при компиляции компилятор не ругается и всё проходит нормально. При отладке невозможно установить в какой момент программа вылетает.

Возможно, всё дело в компиляторе? Какой компилятор используется я особо не вникал, но в настройках у меня следующая картина: 

У меня установлен VS, поэтому, в настройках эта ссылка. Значит и компилятор соответствующий?... Но какой компилятор был, когда VS у меня не было, я честно говоря, не вникал. Может быть, следует попробовать вернуться к тому компилятору и попробовать скомпилировать проект с помощью него?

Пока я искал способы решения проблемы, с приходом очередного обновления терминала отладка заработала должным образом. Удалось найти ошибки. Некоторые методы зацикливались, вызывая сами себя. Поэтому программа и вылетала с сообщением "Stack overflow". Но с помощью работающей отладки мне удалось найти все проблемные строки и исправить их. Выражаю свою благодарность Разработчикам за быстрое устранение бага с отладкой!

 

в естественном языке (в математике) константа это... ну как бы константа! ))

в С++ константа это машинная проверка компилятором константности в области видимости (или жизни) переменной

В C++ так же как и в MQL, константе можно один раз задать значение при создании и больше его не изменять. Области видимости тут не при чём.

Не сильно отличается от того что в математике.


 
Mihail Matkovskij:

Узнал, что компилятор встроен в MetaEditor с 900 билда: https://www.mql5.com/ru/forum/21374

Тогда к чему это окно со строкой ведущей к каталогу где установлен VS?


Компилятор VS используется, если Вы пишете DLL.

 
fxsaber:

Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет (и даже _Symbol можно заменить на NULL). Фактически они должны быть объявлены как const volatile

А Вы наоборот - предлагаете дополнить этот ряд

 
A100:

Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет. И даже _Symbol можно заменить на NULL

А Вы наоборот - предлагаете дополнить этот ряд

Смысл в возможности передать по ссылке.

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