Доброго времени суток,
планируется ли добавление экономического календаря в mql4, аналогично, как в mql5?
В пятницу 24 мая 2024 года будет выпущено обновление MetaTrader 4. В него вошли несколько важных улучшений в защите, исправления ошибок и повышение стабильности работы платформы.
Обновление будет доступно через систему Liv
Спасибо сломали все советники. Не работают многие индикаторы. 1415 ВСЁ РАБОТАЛО Верните версию
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MetaQuotes, 2024.06.13 20:06
Никакие обычные советники не пострадали на новых билдах. И их не надо перекомпилировать, так как совместимость не нарушалась.
Перестали работать исключительно взломанные продукты из Маркета. "Скачал из интернета и перестало работать" - это именно и есть взломанное и сворованное.
Почему это компилируется и работает (у класса 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(); }
Почему это компилируется и работает (у класса A нет конструктора по умолчанию)?
Build 1424
Читайте документацию
Конструктор, не имеющий параметров, называется конструктором по умолчанию. Если в классе не объявлен ни один конструктор, то компилятор сам создаст конструктор по умолчанию при компиляции.

- docs.mql4.com
Там объявлен параметрический конструктор, конструктор по умолчанию не должен быть создан.
Скомпилируйте тот код для МТ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 и не будут это фиксить. Мое дело зарепортить.

- 2024.05.23
- MetaQuotes
- www.mql5.com

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