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

 

В пятницу 24 мая 2024 года будет выпущено обновление MetaTrader 4. В него вошли несколько важных улучшений в защите, исправления ошибок и повышение стабильности работы платформы.

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

 

Доброго времени суток, 

планируется ли добавление экономического календаря в mql4, аналогично, как в mql5?

 
MetaQuotes:

В пятницу 24 мая 2024 года будет выпущено обновление MetaTrader 4. В него вошли несколько важных улучшений в защите, исправления ошибок и повышение стабильности работы платформы.

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

Спасибо сломали все советники. Не работают многие индикаторы. 1415 ВСЁ РАБОТАЛО  Верните версию

 
32361988 #:

Спасибо сломали все советники. Не работают многие индикаторы. 1415 ВСЁ РАБОТАЛО  Верните версию

Не работают у Вас Ваши собственные индикаторы и советники? Перекомпилируйте их в редакторе. 
Если не Ваши, то свяжитесь с автором и попросите перекомпилировать. 
 

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

Старая версия советников

MetaQuotes, 2024.06.13 20:06

Никакие обычные советники не пострадали на новых билдах. И их не надо перекомпилировать, так как совместимость не нарушалась.

Перестали работать исключительно взломанные продукты из Маркета. "Скачал из интернета и перестало работать"  - это именно и есть взломанное и сворованное.


 

В последнем MetaEditor 4 с версией:


1-ая сигнатура функции ObjectName не совпадает с тем что в справке по F1

Нужно дописать справку



 
Мт4 работает как часы, лучше его не трогать.
 

Почему это компилируется и работает (у класса A нет конструктора по умолчанию)?

Build 1424

#property strict

class A
  {
public:
   int getX() { return(x); }
private:
   int x;
public:
       A(int a_x) : x(a_x) { Print(__FUNCTION__); }
  };

class B
  {
private:
   A    m_arr[];
public:
   void resize(int newSize);
   void printX() { Print(__FUNCTION__" x = ", m_arr[0].getX()); }
  };

void B::resize(int newSize)
  {
   ResetLastError();
   int result = ArrayResize(m_arr, newSize, 10);
   PrintFormat(__FUNCTION__" error %i, result = %i, ArraySize = %i", GetLastError(), result, ArraySize(m_arr));
  }

void OnStart()
  {
   B b;
   b.resize(1);
   b.printX();
  }

 
Vladislav Boyko #:
Почему это компилируется и работает (у класса A нет конструктора по умолчанию)?

Даже с приватным конструктором тот код работает

class A
  {
public:
   int getX() { return(x); }
private:
   int x;
private:
       A(int a_x) : x(a_x) { Print(__FUNCTION__); }
  };
 
Vladislav Boyko #:

Почему это компилируется и работает (у класса A нет конструктора по умолчанию)?

Build 1424

Читайте документацию

Конструктор, не имеющий параметров, называется конструктором по умолчанию. Если в классе не объявлен ни один конструктор, то компилятор сам создаст конструктор по умолчанию при компиляции.

Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
 
Alexey Viktorov #:

Читайте документацию

Там объявлен параметрический конструктор, конструктор по умолчанию не должен быть создан.

Скомпилируйте тот код для МТ5 и получите ошибку, как и ожидалось.

Цитата по вашей ссылке:

https://docs.mql4.com/ru/basis/types/classes

Если класс имеет конструктор, объявленный пользователем, то конструктор по умолчанию не будет сгенерирован компилятором. Это означает, что если в классе объявлен конструктор с параметрами, но не объявлен конструктор по умолчанию, то нельзя объявлять массивы объектов этого класса. Вот на таком скрипте компилятор сообщит об ошибке:

//+------------------------------------------------------------------+
//| Класс без конструктора по умолчанию                              |
//+------------------------------------------------------------------+
class CFoo
  {
   string            m_name;
public:
                     CFoo(string name) { m_name=name;}
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- при компиляции получим ошибку "default constructor is not defined"
   CFoo badFoo[5];
  }

В данном примере класс CFoo имеет объявленный параметрический конструктор – в таких случаях компилятор при компиляции не создает автоматически конструктор по умолчанию. В то же время при объявлении массива объектов предполагается, что все объекты должны быть созданы и инициализированы автоматически. При автоматической инициализации объекта требуется вызвать конструктор по умолчанию, но так как конструктор по умолчанию явно не объявлен и не сгенерирован автоматически компилятором, то создание такого объекта невозможно. Именно по этой причине компилятор выдает ошибку еще на этапе компиляции.

Если такой массив объяктов является членом класса, то компилятор МТ4 (в отличии от компилятора МТ5) работает неправильно.


В чем разница между 1 и 2?

class A
  {
private:
   int x;
private:
       A(int a_x) : x(a_x) { Print(__FUNCTION__); }
  };

class B
  {
private:
   A    m_arr[]; // (1) OK
  };

void OnStart()
  {
   A arr[]; // (2) 'arr' - default constructor of class 'A' is not defined
  }

Я в принципе понимаю, что MQ скорее всего сочтут этот баг не критическим для МТ4 и не будут это фиксить. Мое дело зарепортить.

Новая версия платформы MetaTrader 4 build 1420 - В пятницу 24 мая будет выпущено обновление MetaTrader 4.
Новая версия платформы MetaTrader 4 build 1420 - В пятницу 24 мая будет выпущено обновление MetaTrader 4.
  • 2024.05.23
  • MetaQuotes
  • www.mql5.com
Обновление будет доступно через систему Live Update. В тоже время на той же машине MT5 прекрасно обновляется. Как только появятся сообщения о доступной новой версии. автоматизированным торговым системам и тестированию торговых стратегий