Пролог:
Миры MQL4 развиваются. Можно попытаться обойти этот факт, но, в конце концов, к собственному разочарованию, попытки избежать эволюции рано или поздно окажутся тщетными.
Столкнувшись с необходимостью реинжиниринга кодовой базы, охватывающей несколько человеко-десятилетий, я могу рассказать вам много историй о том, что сработало, а что нет.
"Старый код" вместо Нового-MQL4.56789
Если из этого следует вынести что-то одно, никогда не пытайтесь «обойти» New-MQL4, а лучше пересмотрите код и рефакторинг «Старого кода» — это более безопасный способ выжить (намного дольше).
Да, есть шансы (нулевые ордера, временно осталось несколько шансов) новая версия компилятора сможет генерировать исполняемую версию кода, но, учитывая, что в городе уже появился новый набор правил, игра не продлится долго.
Объявление 1 + 2 )
Компилятор по-прежнему допускает несколько объявлений, но не в одной области видимости.
Если новая версия компилятора определила, что любая переменная объявляется только относительно ее области действия, серьезный программист должен принять это как общий принцип. Приведенный выше код на самом деле имеет другую проблему, связанную с областью действия:
2 ...
3 if ( 1 == 2 ) {
4 ...
5 double myVar = 1; // myVar declared & known |since HERE >
6 ... // masking any other,|known HERE :
7 ... // |known HERE :
8 } else // |till HERE . Undef further
9 {
10 ...
11 double myVar = 2; // myVar declared & known |since HERE >
12 // masking any other,|known HERE :
13 ... // |known HERE :
14 } // |till HERE . Undef further
таким образом, если была какая-либо переменная с _global_
областью действия с тем же именем myVar
, она не будет "видима" во время существования локально объявленной переменной с тем же именем.
Наконец, если выполнение кода ускользнуло от любой из строк 8 или 14 дальше, локально объявленная переменная double myVar
просто перестала существовать, и это поведение в принципе правильно ( а «старые» версии компилятора терпели своего рода опасную привычку побочных эффектов, в течение многих лет терпимого распространения области действия, поэтому пришло время очистить правила, чтобы соответствовать справедливому уровню стандартов C/S.
Дополнение 3) язык многое получает от MQL5, даже если не используется в MQL4
Да, MetaEditor корректно скомпилирует код MQL4 в формат исполнения кода .mq4
, здесь нет проблем. Даже процесс автоматического обновления начал идти независимо от (автоматического) обновления платформы терминала MT4 (так что вы довольно часто будете видеть новый файл справки и принудительную перекомпиляцию всех ваших видимых активов .MQ4
на локальном хосте в обновлен формат .EX4
, так что "Не паникуйте".
Лучше никогда не устанавливать MT4, не зависящий от брокера, всегда обращайтесь в службу поддержки своего брокера и получайте установочный пакет и помощь от своего брокера. Это деловые отношения, которые вы подписали в контракте, поэтому сохраните эти строки, поскольку вы собираетесь торговать своими деньгами на столе, на котором они работают в соответствии с установленными Условиями и положениями. У некоторых брокеров есть средства настройки платформы, поэтому лучше воспользоваться их пользовательскими настройками, которые будут соответствовать их автоматизации на стороне сервера.
Это больше вопрос экономии усилий НИОКР. (Можно много прочитать о языковых компонентах, внедряемых из домена MQL5, в справке MQL4 редактора IDE). Это естественная воля стратегии дизайна продукта, а не удваивать усилия на двойной линии. Без сомнения, есть много деталей, файл справки можно было бы улучшить и лучше поддерживать, здравый смысл здесь состоит в том, чтобы жить с фактами и заново изучать, какие недавно введенные функции остаются нейтральными для кодовой базы MQL4, а какие новые вещи могут действительно помочь много в аспектах, где старые компиляторы были ограничены в возможностях.
Если кто-то возразит, что некоторые шаги по перепроектированию компилятора/платформы были плохими, я бы согласился на однопоточную, критичную для платформы, потенциально блокирующую концентрацию выполнения всех CustomIndicator
-ов только в одном SPoF. -нить.
Но C'est La Vie, пока системные архитекторы не пересмотрят этот SPoF, платформа останется подверженной крашам из-за этой фичи, но мяч находится на другой стороне площадки и там придется внедрять изменения.
person
user3666197
schedule
21.02.2018