MetaTrader 4 build 1210:
MetaTrader 4 iPhone/iPad build 1195:
Исправлены ошибки и повышена стабильность работы платформы.
9 ноября 2018 года будет выпущено обновление MetaTrader 4 в бета-режиме. В нем исправлены ошибки и повышена стабильность работы платформы.
Просим всех трейдеров присоединиться к тестированию новой версии. Для получения обновления подключитесь к серверу MetaQuotes-Demo, находящемуся по адресу demo.metaquotes.net:443. Оно будет установлено через систему LiveUpdate.
После окончания тестирования будет выпущен релизный билд платформы MetaTrader 4.
Месяц назад Microsoft выпустила большое обновление операционной системы Windows 10 Creators Update (версия 1703). После его установки у некоторых пользователей перестали запускаться MQL4-программы. В новой версии платформы MetaTrader 4 build 1080 эта проблема исправлена. Советники и индикаторы будут корректно запускаться на графиках, повторная компиляция в новом MetaEditor при этом не потребуется.
С 1 октября 2017 года прекращается поддержка клиентских терминалов MetaTrader 4 ниже 1065-го билда. Такие терминалы не смогут подключаться к серверам новых версий. Мы настоятельно рекомендуем заранее обновить ваши терминалы.
Исправлена ошибка перезапуска экспертов на графиках после смены таймфрейма. Теперь работа советников не останавливается, переинициализация происходит корректно.
Обновление платформы
MetaTrader 4 вызвано выходом предварительной версии Windows 10
Insider Preview build 15007. Изменения в механизмах безопасности ОС Windows 10 привели к тому, что в некоторых случаях
клиентские терминалы MetaTrader 4 не могли запуститься.
Обязательно установите новую версию платформы, чтобы подготовиться к выходу очередного обновления Windows
10.
Добавлен чат, в котором участники MQL5.community могут общаться между собой. Просто указав логин нужного пользователя в адресате сообщения, вы можете отправить ему послание сразу на мобильное устройство.
Появилась возможность переключаться между 22 доступными языками прямо в платформе. Если вы предпочитаете английский язык в трейдинге, включите его в разделе "Настройки" ("О программе" в iPad), не переключая язык всего устройства.
class CFoo { }; class CBar { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { void *vptr[2]; vptr[0]=new CFoo(); vptr[1]=new CBar(); //--- for(int i=0;i<ArraySize(vptr);i++) { if(dynamic_cast<CFoo *>(vptr[i])!=NULL) Print("CFoo * object at index ",i); if(dynamic_cast<CBar *>(vptr[i])!=NULL) Print("CBar * object at index ",i); } CFoo *fptr=vptr[1]; // выдаст ошибку приведения указателей, vptr[1] не является объектом CFoo } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // вернет код символа 'H'
Внесены исправления по крешлогам.
class CAnimal { public: CAnimal(); // конструктор virtual void Sound() = 0; // чисто виртуальная функция private: double m_legs_count; // количество ног животного };Здесь функция Sound() является чисто виртуальной, потому что она объявлена со спецификатором чисто виртуальной функции PURE (=0).
class CAnimal { public: virtual void Sound()=NULL; // PURE method, должен быть переопределен в потомке, сам класс CAnimal стал абстрактным и не может быть создан }; //--- потомок от абстрактного класса class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE переопределен, класс CCat не абстрактный и может быть создан }; //--- примеры неправильного использования new CAnimal; // ошибка 'CAnimal' - компилятор выдаст ошибку "cannot instantiate abstract class" CAnimal some_animal; // ошибка 'CAnimal' - компилятор выдаст ошибку "cannot instantiate abstract class" //--- примеры правильного использования new CCat; // ошибки нет - класс CCat не абстрактный CCat cat; // ошибки нет - класс CCat не абстрактныйОграничения на использование абстрактных классов
//+------------------------------------------------------------------+ //| Абстрактный базовый класс | //+------------------------------------------------------------------+ class CAnimal { public: //--- чисто виртуальная функция virtual void Sound(void)=NULL; //--- функция void CallSound(void) { Sound(); } //--- конструктор CAnimal() { //--- явный вызов виртуального метода Sound(); //--- неявный вызов (через третью функцию) CallSound(); //--- в конструкторе и/или деструкторе всегда вызываются свои функции, //--- несмотря на виртуальность и переопределение вызываемой функции в потомке //--- если вызываемая функция чисто виртуальная, то //--- вызов приведет к критической ошибке выполнения: "pure virtual function call" } };Однако конструкторы и деструкторы абстрактных классов могут вызывать другие функции-члены.
typedef int (*TFunc)(int,int);Теперь TFunc является типом и можно объявить переменную-указатель на функцию:
TFunc func_ptr;В переменную func_ptr можно сохранить указатель на функцию, чтобы в дальнейшем ее вызывать:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // ошибка: neg не имеет тип int (int,int) Print(func_ptr(10)); // ошибка: должно быть два параметраУказатели на функции можно хранить и передавать в качестве параметра. Нельзя получить указатель на нестатический метод класса.
Исправления по крешлогам.