Новая версия платформы MetaTrader 4 build 1160

 

Новая версия платформы MetaTrader 4 build 1160

14 декабря 2018 года будет выпущена обновленная версия платформы MetaTrader 4. Обновление содержит следующие изменения:

  1. Изменен протокол работы с MQL5 Storage в MetaEditor

    Для поддержки групповых проектов был изменен протокол работы с онлайн хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются. Перед обновлением рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).

  2. Исправлены ошибки и повышена стабильность работы платформы.

Обновление будет доступно через систему Live Update.

Напоминаем, что поддержка старых версий операционных систем, включая Windows XP/2003/Vista, прекращена. Минимально допустимой версией операционной системы для работы клиентского терминала является Windows 7.
 

Build 1151. Ошибка отображения графика MT4 при использовании индикатора с фиксированной высотой.

Пожалуйста, проверьте это видео, чтобы продемонстрировать ошибку.


Для воспроизведения прикрепите индикатор на графике и просто измените размер окна, как показано на видео.

Файлы:
 
Alain Verleyen:

Build 1151.

Пожалуйста, проверьте это видео, чтобы продемонстрировать ошибку.


Для воспроизведения прикрепите индикатор на графике и просто измените размер окна, как показано на видео.

use CHARTEVENT_CHART_CHANGE instead CHARTEVENT_OBJECT_CLICK

if(id==CHARTEVENT_CHART_CHANGE)
     {
      subwHeight=(subwHeight==0 ? 100 : 0);
      if(ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,ChartWindowFind(),subwHeight))
         Comment("Sub height ",subwHeight);
     }
 
Taras Slobodyanik :

use CHARTEVENT_CHART_CHANGE instead CHARTEVENT_OBJECT_CLICK

Как это связано с ошибкой отображения графика MT4?

 
Alain Verleyen:

Как это связано с ошибкой отображения графика MT4?

так же как и OnChartEvent и ObjectCreate - никак)

 

Форум по торговле, автоматизированным торговым системам и тестированию торговых стратегий

Новый MetaTrader 4 build 1160

Го Вэй Лонг , 2018.12.16 05:56

почему бы не использовать новую версию пометки "Copyright 2009-2018"

и я не думаю, что новые изменения или откат является правильным


stdlib.mq4: без экспорта функция может получить доступ извне?

stdlib


Indicator.mqh: очевидно, что старая версия кода содержит ошибку

indicators


так что я не уверен, за что меняется версия 1160


 

Приветствую.

После процедуры добровольно-принудительного обновления при компиляции получил пачку предупреждений "expression not boolean".

Условно их можно разделить на 2 группы.

Группа №1.  Семейство MQLInfoInteger()/ AccountInfoInteger() / TerminalInfoInteger(), возвращающие "булеву" единицу.

С одной стороны, вроде ожидаемый фикс, так как предлагаемый в справке код вроде:

  if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      Alert("Проверьте в настройках терминала разрешение на автоматическую торговлю!");
   else
     {
      if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
         Alert("Автоматическая торговля запрещена в свойствах программы для ",__FILE__);
     }

с точки зрения любого адекватного программиста есть дурнопахнущая ересь, но я делал скидку на то, что всё-таки это DSL, а не полноценный промышленный язык программирования, где за подобные формулировки разработчику организовали бы спортивно-развлекательное мероприятия с намоченными тряпками. И раз разработчик везде в справке предлагает подобный код как "best practice", можно предположить, что у него на этот счет были какие-то разумные соображения.

Теперь же, когда компилятор справедливо плюётся "варнингами" на примеры из мануалов разработчика, остаётся спросить разработчика, как на его взгляд теперь должен выглядеть корректный код в подобных случаях:

Так?

  if(!(bool) TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
      Alert("Проверьте в настройках терминала разрешение на автоматическую торговлю!");
   else
     {
      if(!(bool) MQLInfoInteger(MQL_TRADE_ALLOWED))
         Alert("Автоматическая торговля запрещена в свойствах программы для ",__FILE__);
     }

Или так ?

   if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)!=1)
      Alert("Проверьте в настройках терминала разрешение на автоматическую торговлю!");
   else
     {
      if(MQLInfoInteger(MQL_TRADE_ALLOWED)!=1)
         Alert("Автоматическая торговля запрещена в свойствах программы для ",__FILE__);
     }

Или всё-таки собраться с силами и допилить напрашивающиеся тут TerminalInfoBoolean() / MQLlInfoBoolean() ?

В любом случае НУЖНО исправлять все соответствующие примеры из справок, обновлять файл справки MetaEditor и онлайн хелп, так как "раздвоение сознания" между официальным мануалом и требованием компилятора, это уже за гранью добра и зла, даже для DSL.

Вторая группа предупреждений внезапно для меня прилетела на выражения с не сокращенными логическими И вида:

   bool Test()
   {
      return(this.Check1() & this.Check2() & this.Check3() & this.Check4());
   }
   bool Check1() {return(true);}
   bool Check2() {return(false);}
   bool Check3() {return(false);}
   bool Check4() {return(true);}


Сразу прошу не оффтопить комментариями из серии зачем нужен "&" когда есть "&&". Условно в одном случае из 100 бывает нужно сделать именно так, если не понятно зачем, можно завести отдельную ветку с вопросом. Валидным с точки зрения компилятора теперь является:

   bool Test()
   {
      return((this.Check1() & this.Check2() & this.Check3() & this.Check4())==true);
   }
   bool Check1() {return(true);}
   bool Check2() {return(false);}
   bool Check3() {return(false);}
   bool Check4() {return(true);}


Тут конечно хотелось бы услышать внятные комментарии, зачем эти дополнительные телодвижения нужны? Это каноническое поведение для C/C++? Спрашиваю, потому что хоть и знаком с ними более 20 лет, но никогда не занимался на них коммерческой разработкой. Или тут причина, в том разработчики решили "закрутить" гайки для побитовых операций и слегка перестарались? Классический AND то вы зачем испортили?


И подводя итог, всё же хочется услышать от разработчиков, несколько более развернутую информацию о релизе, чем "Исправлены ошибки и повышена стабильность работы платформы."

Косметические исправления вроде новых иконок папок в навигаторе Metaeditor или изменение подсветки синтаксиса в редакторе (это из того что сразу бросилось в глаза) можно опустить. Но вот изменения в работе булевых выражений, ИМХО, требует чётких и внятных объяснений. Каких конкретно мест коснулись данные изменения. Стали более строгими только проверки компиляции или ожидать изменений и в генерируемом компилятором коде. Поскольку если из-за подобных "незначительных" изменений, где-то изменится поведение работы эксперта и в результате кто-то получит стоп-лосс или маржин-колл, наверное не нужно объяснять с какими именно пожеланиями добра и счастья сюда придут люди ;)

 
Не исправили

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

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

fxsaber, 2018.11.19 22:25

На графиках вертикальная шкала цен на некоторых окнах сдвинута вправо так, что не все цифры видны.

На скрине два окна одного и того же символа с идентичными настройками. В левом окне не видны полностью цены - сдвинуты вправо. Как-либо заставить правильно отоброжать вертикальную шкалу не получается.

Так и выходит, что некоторые чарты с багом, а некоторые - нормальные.

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

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

fxsaber, 2018.12.11 13:41

Большая просьба починить

Через какое-то время все чарты в MT4 начинают жить с этим багом.

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

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

fxsaber, 2018.12.11 15:35

Символы любые. Важно, чтобы MT4 (хотя бы несколько дней (не перезагружал несколько недель)) был долго открыт с одними и теми же чартами. На вновь открываемых чартах все в порядке какое-то время.

 

Если индикатор/эксперт/скрипт (далее - программа) отображает графику не в своем окне, то возникает подвисание функций при обращении к этому графику, если пользователь закроет его. 

Воспроизведение:

  1. Взять ID любого другого (не того, на котором работает программа) графика.
  2. Закрыть окно графика из первого пункта вручную.
  3. Обратиться к графику при помощи функции ChartGetInteger. Выполнение этой функции займет около 3 сек.
В ранних версиях МТ4 при доступе к несуществующему графику функция ChartGetInteger не зависала и возвращала ошибку. Такой способ позволял избегать зависания на других функциях, работающих с графикой. Теперь же зависание появляется на любых функциях, связанных с графикой.
 

Когда окно графика закрывается (Ctrm, прикрепленный индикатор получает причину единицы 9 (ЗАКРЫТИЕ КЛЕММА), должно быть 4 (ЗАКРЫТИЕ КАРТЫ).

 void OnDeinit ( const int reason)
  {
   printf ( "reason " ,reason);
  }
2018.12.17 16:31:19.448    WrongReason AUDNZD,H1: uninit reason 9
Файлы:
 
Ihor Herasko:

Если индикатор/эксперт/скрипт (далее - программа) отображает графику не в своем окне, то возникает подвисание функций при обращении к этому графику, если пользователь закроет его. 

Воспроизведение:

  1. Взять ID любого другого (не того, на котором работает программа) графика.
  2. Закрыть окно графика из первого пункта вручную.
  3. Обратиться к графику при помощи функции ChartGetInteger. Выполнение этой функции займет около 3 сек.
В ранних версиях МТ4 при доступе к несуществующему графику функция ChartGetInteger не зависала и возвращала ошибку. Такой способ позволял избегать зависания на других функциях, работающих с графикой. Теперь же зависание появляется на любых функциях, связанных с графикой.

Написал проверочного эксперта

//+------------------------------------------------------------------+
//|                                          TestChartProperties.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

long ExtChartId=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ExtChartId=ChartNext(ChartID());
   Print("Next chart ",ExtChartId,"  ",ChartSymbol(ExtChartId),",",EnumToString(ChartPeriod(ExtChartId)));
//---
   EventSetTimer(10);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   uint start=GetTickCount();
   int  scale=(int)ChartGetInteger(ExtChartId,CHART_SCALE);
   uint delta=GetTickCount()-start;
   Print("chart scale=",scale,"   in ",delta," msc");
   Print("Next chart ",ChartSymbol(ExtChartId),",",EnumToString(ChartPeriod(ExtChartId)));
  }
//+------------------------------------------------------------------+

Вот его лог

2018.12.18 12:22:03.734 Expert Test\TestChartProperties GBPUSD,H1: loaded successfully
2018.12.18 12:22:05.690 TestChartProperties GBPUSD,H1: Next chart 131896014017907143  USDJPY,PERIOD_H1
2018.12.18 12:22:05.695 TestChartProperties GBPUSD,H1: initialized
2018.12.18 12:22:15.706 TestChartProperties GBPUSD,H1: chart scale=1   in 0 msc
2018.12.18 12:22:15.706 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:22:25.700 TestChartProperties GBPUSD,H1: chart scale=1   in 0 msc
2018.12.18 12:22:25.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:22:35.700 TestChartProperties GBPUSD,H1: chart scale=2   in 0 msc
2018.12.18 12:22:35.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:22:45.701 TestChartProperties GBPUSD,H1: chart scale=4   in 0 msc
2018.12.18 12:22:45.701 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:22:55.706 TestChartProperties GBPUSD,H1: chart scale=4   in 0 msc
2018.12.18 12:22:55.706 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:23:05.700 TestChartProperties GBPUSD,H1: chart scale=4   in 0 msc
2018.12.18 12:23:05.700 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:23:15.702 TestChartProperties GBPUSD,H1: chart scale=4   in 0 msc
2018.12.18 12:23:15.702 TestChartProperties GBPUSD,H1: Next chart USDJPY,PERIOD_H1
2018.12.18 12:23:25.695 TestChartProperties GBPUSD,H1: chart scale=0   in 0 msc
2018.12.18 12:23:25.695 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT
2018.12.18 12:23:35.695 TestChartProperties GBPUSD,H1: chart scale=0   in 0 msc
2018.12.18 12:23:35.695 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT
2018.12.18 12:23:45.700 TestChartProperties GBPUSD,H1: chart scale=0   in 0 msc
2018.12.18 12:23:45.700 TestChartProperties GBPUSD,H1: Next chart ,PERIOD_CURRENT
2018.12.18 12:23:53.990 TestChartProperties GBPUSD,H1: uninit reason 1
2018.12.18 12:23:53.995 Expert TestChartProperties GBPUSD,H1: removed

В логе видно, когда был закрыт график USDJPY,H1

Либо я сильно упрощаю, либо Вы даёте не все подробности