Новая версия платформы MetaTrader 4 build 1370 - страница 2

 
Alexey Viktorov #:

О каких дубликатах вы говорите?

Symbol() это функция.

_Symbol это предопределённая переменная.

Как вы думаете, что работает быстрей?

Главное - не быстрее, а правильнее. Если _Symbol иногда дает сбой, то это как раз и говорит о том, что лучше его не использовать. Ренат однажды прозрачно намекнул на то, что лучше все-таки использовать функции, а не переменные. Таким образом, хоть и не совсем официально (в документации об этом ничего не сказано), но  _Symbol, _Point и иже с ними - это deprecated в обоих языках.

 
Ihor Herasko #:

Главное - не быстрее, а правильнее. Если _Symbol иногда дает сбой, то это как раз и говорит о том, что лучше его не использовать. Ренат однажды прозрачно намекнул на то, что лучше все-таки использовать функции, а не переменные. Таким образом, хоть и не совсем официально (в документации об этом ничего не сказано), но  _Symbol, _Point и иже с ними - это deprecated в обоих языках.

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

НО! Я никого ни к чему не призываю. Каждый волен писать так как ему нравится.


зы: Да и переменную можно свою объявить на глобальном уровне и в OnInit ей присвоить Symbol() а потом использовать «направо — налево»

 
Alexey Viktorov #:

зы: Да и переменную можно свою объявить на глобальном уровне и в OnInit ей присвоить Symbol() а потом использовать «направо — налево»

Я говорю про переменные терминала, а не про собственную переменную.

 
Ihor Herasko #:

Я говорю про переменные терминала, а не про собственную переменную.

Я тоже о них. Но главное в моём тексте

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

Бета-версия платформы MetaTrader 4 build 1368

Alexey Viktorov, 2022.12.28 14:06

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

НО! Я никого ни к чему не призываю. Каждый волен писать так как ему нравится.


зы: Да и переменную можно свою объявить на глобальном уровне и в OnInit ей присвоить Symbol() а потом использовать «направо — налево»

Всё что дальше, просто мысли вслух.
 

Мы уходим от темы. Вот в чём фокус. А между тем, не знаю, как у кого, а у меня одна копия терминала была мною обновлена сознательно. Сделал это подсоединившись к демосерверу метаквотесов (см. посты на первой странице). А дальше, буквально на следующий день, у меня сама собой обновилась до этого билда совсем другая копия терминала, ни как не связанная с первой. Эту копию я скачивал с сайта другого брокера и ни каких соединений ни с какими иными серверами, кроме как сервера этого брокера я не делал. Напрашивается вывод, что произошло автообновление. Если такая же ситуация и у десяток тысяч других пользователей - пообновлялись терминалы МТ4 до билда 1369, то представляете сколько советников могут перестать работать? В том числе и купленных через маркет.

А по сему, хотелось бы видеть сие недоразумение исправленным, а не подставлять костыли типа если поинт = нулю, то PNT инициализируем через дигитс руками.

 
Alexey Viktorov #:

О каких дубликатах вы говорите?

Symbol() это функция.

_Symbol это предопределённая переменная.

Как вы думаете, что работает быстрей?

Я говорю вот о чём. Был просто Point. После обновления языка появился вдобавок ещё и _Point. Идём в справку и помимо прочего обнаруживаем ещё и Point(). Всё то же самое касается и служебного слова Digits. Но речь о поинте. Напишите и проверьте у себя на трёх и на пятизнаке скрипт в одну строку:

Alert("Point = ",Point,"  Point() = ",Point(),"  _Point = ",_Point,"  Point из MarketInfo = ",MarketInfo(Symbol(),MODE_POINT));

Можно по классике через Принт, а не Алерт. Хотя Алерт всегда с этим работал нормально...

 
Самое интересное, что в тестере стратегий всё работает. У меня, скажем так, объявлена пользовательская переменная StopLoss = 500. Открываем лонг. PR=Ask. SL=PR-StopLoss*Point. Не вдаёмся в частности. Просто описываю логику. Так вот, в результате в тестере открывается лонг как и положено со стоплоссом, отстоящим от цены установки на 500 пунктов. В противном случае выдало бы ошибку. Но в тестере всё красиво - и ордер и стоп на месте.
 
MetaQuotes:

После окончания бета-тестирования будет выпущен финальный билд новой платформы MetaTrader 4.


Всё-таки хотелось бы увидеть комментарий разработчиков по поводу описанной выше проблемы с Point.
Да и по поводу описанной ситуации с автообновлением тоже.
 
Vitaly Murlenko #:

Мы уходим от темы. Вот в чём фокус. А между тем, не знаю, как у кого, а у меня одна копия терминала была мною обновлена сознательно. Сделал это подсоединившись к демосерверу метаквотесов (см. посты на первой странице). А дальше, буквально на следующий день, у меня сама собой обновилась до этого билда совсем другая копия терминала, ни как не связанная с первой. Эту копию я скачивал с сайта другого брокера и ни каких соединений ни с какими иными серверами, кроме как сервера этого брокера я не делал. Напрашивается вывод, что произошло автообновление. Если такая же ситуация и у десяток тысяч других пользователей - пообновлялись терминалы МТ4 до билда 1369, то представляете сколько советников могут перестать работать? В том числе и купленных через маркет.

А по сему, хотелось бы видеть сие недоразумение исправленным, а не подставлять костыли типа если поинт = нулю, то PNT инициализируем через дигитс руками.

При обновлении одного из терминалов, файлы обновления попадают в папку WebInstall


И при очередном запуске терминала идёт проверка на старшинство версий. Если в папке WebInstall версия более свежая, то эти файлы распаковываются и запускается уже новая версия.

Эти файлы после обновления не удаляются автоматически и при запуске другого терминала происходит такая проверка не зависимо от того к какому серверу подключен терминал. Наверное сделано так для экономии трафика, чтобы не скачивать это для каждого терминала. Вспомните какие были тарифы на тырнет 15-20 лет взад. А теперь менять поведение - лишняя трата времени и сил.

Чтобы такого не происходило надо просто удалить или заархивировать эти файлы.

 
Vitaly Murlenko #:

Я говорю вот о чём. Был просто Point. После обновления языка появился вдобавок ещё и _Point. Идём в справку и помимо прочего обнаруживаем ещё и Point(). Всё то же самое касается и служебного слова Digits. Но речь о поинте. Напишите и проверьте у себя на трёх и на пятизнаке скрипт в одну строку:

Можно по классике через Принт, а не Алерт. Хотя Алерт всегда с этим работал нормально...

Виталий, обрати внимание на цвет элементов кода


Point() это функция

Point это функция написанная в плохом тоне.

В mql4 достаточно много таких допущений. Постепенно MQ искореняет такие допущения.

В тестере, возможно ещё не исправили эти допущения и потому всё пока работает. Не факт, что скоро исправят, но в один прекрасный момент и в тестере не будет работать.

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