Последние обновления MetaTrader 4

Торговая платформа для Форекса MetaTrader 4

19 мая 2017
MetaTrader 4 build 1090
Обновление содержит ряд исправлений в работе клиентского терминала.
12 мая 2017
MetaTrader 4 build 1080

Месяц назад Microsoft выпустила большое обновление операционной системы Windows 10 Creators Update (версия 1703). После его установки у некоторых пользователей перестали запускаться MQL4-программы. В новой версии платформы MetaTrader 4 build 1080 эта проблема исправлена. Советники и индикаторы будут корректно запускаться на графиках, повторная компиляция в новом MetaEditor при этом не потребуется.

С 1 октября 2017 года прекращается поддержка клиентских терминалов MetaTrader 4 ниже 1065-го билда. Такие терминалы не смогут подключаться к серверам новых версий. Мы настоятельно рекомендуем заранее обновить ваши терминалы.


23 марта 2017
MetaTrader 4 build 1065

Исправлена ошибка перезапуска экспертов на графиках после смены таймфрейма. Теперь работа советников не останавливается, переинициализация происходит корректно.

3 февраля 2017
MetaTrader 4 build 1045

Обновление платформы MetaTrader 4 вызвано выходом предварительной версии Windows 10 Insider Preview build 15007. Изменения в механизмах безопасности ОС Windows 10 привели к тому, что в некоторых случаях клиентские терминалы MetaTrader 4 не могли запуститься.

Обязательно установите новую версию платформы, чтобы подготовиться к выходу очередного обновления Windows 10.

16 декабря 2016
MetaTrader 4 build 1031
Исправлен ряд ошибок по крешлогам.
14 октября 2016
MetaTrader 4 Android build 996
  1. Добавлен чат, в котором участники MQL5.community могут общаться между собой. Просто указав логин нужного пользователя в адресате сообщения, вы можете отправить ему послание сразу на мобильное устройство.

     

  2. Добавлена возможность редактирования уровней индикаторов.
  3. Добавлены переводы интерфейса на индонезийский язык и хинди.
30 августа 2016
MetaTrader 4 iOS build 975
  1. Полностью обновлен внешний вид сообщений. Теперь переписка на MQL5.community и уведомления из десктопной платформы показываются в виде чатов, которые вы привыкли видеть в популярных мобильных мессенджерах.
  2. Появилась возможность переключаться между 22 доступными языками прямо в платформе. Если вы предпочитаете английский язык в трейдинге, включите его в разделе "Настройки" ("О программе" в iPad), не переключая язык всего устройства.

18 августа 2016
MetaTrader 4 build 1010: Расширение возможностей MQL4

Terminal

  1. Исправлена ошибка, приводившая к невозможности выполнения MQL4-программ в терминалах при работе в 32-х разрядной версии Windows 10, build 1607.
  2. Исправлены ошибки, в некоторых случаях приводившие к некорректному отображению кнопок поиска и чата.
  3. Исправлена ошибка, в некоторых случаях приводившая к дублированию приветственных писем, получаемых в терминале при открытии демо-счетов.

MQL4

  1. Добавлены указатели 'void *', что позволит создавать абстрактные коллекции объектов. В переменную этого типа можно сохранить указатель на объект любого класса. Для обратного преобразования рекомендуется использовать оператор dynamic_cast<имя класса *>(указатель void *). Если приведение невозможно, результатом будет NULL.
    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
      }
    //+------------------------------------------------------------------+

  2. Добавлена поддержка оператора [ ] для строки, что позволит получать символ из строки по индексу. Если указанный индекс выходит за пределы строки, результатом будет 0.
    string text="Hello";
    ushort symb=text[0];  // вернет код символа 'H'

  3. Ускорена работа функций копирования исторических и тиковых данных CopyXXX.
  4. Исправлена ошибка массового удаления графических объектов по префиксу при помощи функции ObjectDeleteAll. Ранее после выполнения этой функции нарушался порядок отрисовки оставшихся объектов.
  5. Исправлена ошибка, в некоторых случаях приводившая к нарушению порядка отображения графических объектов при смене таймфрейма.

Hosting

  1. В синхронизации терминала с виртуальным сервером теперь не участвуют графики без экспертов, даже если на них запущены пользовательские индикаторы. Для миграции отдельно работающего пользовательского индикатора запустите на его графике "пустого" эксперта, не выполняющего никаких действий. Его можно легко сгенерировать через Мастер MQL4 в MetaEditor, выбрав пункт "Советник: шаблон". Это гарантирует, что миграция пользовательских индикаторов производится осознанно.
  2. Теперь можно синхронизировать эксперты и пользовательские индикаторы, содержащие в своем имени нелатинские символы (например, кириллицу или иероглифы).

Внесены исправления по крешлогам.


1 июля 2016
MetaTrader 4 build 985: Встроенный чат MQL5.community

Терминал

  1. Добавлен встроенный чат. Теперь прямо в торговой платформе можно обмениваться мгновенными сообщениями с друзьями и коллегами на MQL5.community. В чате показывается полная история сообщений, а также количество непрочитанных. Для начала общения войдите в свой MQL5-аккаунт прямо из окна чата или через настройки платформы: Сервис -> Настройки -> Сообщество.




  2. Оптимизировано чтение базы внутренней почты при запуске терминала.

MQL4

  1. Добавлена возможность показывать/скрывать ценовую и временную шкалу на любом графике. Ранее MQL4-программа могла изменять свойства CHART_SHOW_PRICE_SCALE и CHART_SHOW_DATE_SCALE только того графика, на котором она запущена.
  2. Добавлено свойство MODE_CLOSEBY_ALLOWED для функции MarketInfo. Значение TRUE означает, что по указанному инструменту разрешена операция Close By - закрытие позиции встречной.
  3. Исправлена ошибка передачи строкового параметра в точку входа OnChartEvent, приводившая к ошибочному значению параметра. OnChartEvent позволяет отслеживать события графика: нажатие клавиш клавиатуры, перемещение мыши и другие.
  4. Ускорено массовое удаление графических объектов при помощи функции ObjectsDeleteAll.

Signals

  1. Доработано автоматическое сопоставление валютных пар, содержащих RUB и RUR.

Tester:

  1. Исправлено проставление времени создания графических объектов во время тестирования. Ранее проставлялось текущее время терминала вместо времени тестирования.

MetaEditor

  1. Исправлена установка фокуса в поле текста замены при открытии диалога замены.
  2. Исправлена массовая замена текста при поиске вверх от текущей позиции.
Внесены исправления по крешлогам.

3 июня 2016
MetaTrader 4 build 970: Упрощенное открытие демо-счетов и расширение возможностей MQL4

Terminal

  1.  Упрощен диалог открытия демо-счета. Теперь не нужно заполнять большую анкету, достаточно указать основные данные и выбрать торговые параметры: тип счета, депозит и плечо.




MQL4

  1. Изменился формат исполняемых EX4-файлов в связи с добавлением новых возможностей в язык MQL4. Все старые EX4-программы, скомпилированные в MetaEditor предыдущих билдов, после обновления будут работать корректно. Таким образом, совместимость снизу вверх сохранена полностью.

    В то же время, EX4-программы, скомпилированные на билдах 970 и выше, не будут работать в терминалах старых билдов - обратной совместимости нет.

  2. Добавлена поддержка абстрактных классов и чисто виртуальных функций.

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

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

    Виртуальная функция объявляется как "чистая" с помощью синтаксиса спецификатора чистоты. Рассмотрим в качестве примера класс CAnimal, который создается только для того, чтобы предоставлять общие функции – сами объекты типа CAnimal имеют слишком общий характер для практического применения. Таким образом, класс CAnimal является хорошим кандидатом в абстрактный класс:
    class CAnimal
      {
    public:
                          CAnimal();     // конструктор
       virtual void       Sound() = 0;   // чисто виртуальная функция
    private:
       double             m_legs_count;  // количество ног животного
      };
    Здесь функция Sound() является чисто виртуальной, потому что она объявлена со спецификатором чисто виртуальной функции PURE (=0).

    Чисто виртуальными функциями являются только такие виртуальные функции, для которых указан спецификатор чистоты PURE, а  именно: (=NULL) или (=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"
        }
      };
    Однако конструкторы и деструкторы абстрактных классов могут вызывать другие функции-члены.

  3. Для облегчения организации событийных моделей добавлена поддержка указателей на функции.

    Чтобы объявить указатель на функцию, определите тип "указатель на функцию", например:
    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));    // ошибка: должно быть два параметра
    Указатели на функции можно хранить и передавать в качестве параметра. Нельзя получить указатель на нестатический метод класса.

  4. В перечисление свойств клиентского терминала ENUM_TERMINAL_INFO_INTEGER добавлено значение TERMINAL_SCREEN_DPI — разрешающая способность вывода информации на экран измеряется в количестве точек на линейный дюйм поверхности (DPI). Знание этого параметра позволяет задавать размеры графических объектов таким образом, чтобы они выглядели одинаково на мониторах с различной разрешающей способностью.
  5. В перечисление свойств клиентского терминала ENUM_TERMINAL_INFO_INTEGER добавлено значение TERMINAL_PING_LAST — последнее известное значение пинга до торгового сервера в микросекундах. В одной секунде миллион микросекунд.
  6. В пользовательских индикаторах буферы DRAW_NONE (нет графических построений) теперь не участвуют в расчетах минимума и максимума окна графика.
  7. Исправлено формирование событий, связанных с перемещением мыши и нажатием кнопок мыши над объектами типа OBJ_LABEL и OBJ_TEXT. Ранее, если они находились в пределах других объектов типа OBJ_RECTANGLE_LABEL, OBJ_RECTANGLE, события формировались некорректно.
  8. В пользовательских индикаторах исправлена отрисовка столбиков гистограммы нулевой высоты. Раньше такие столбики не рисовались, теперь они рисуются высотой в 1 пиксель.

Signals

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

Tester

  1. Исправлено применение спреда в fxt-файле, если в настройках тестирования используется текущий спред.

Market

  1. Исправлен ряд ошибок отображения витрины Маркета.

MetaEditor

  1. Исправлен поиск слова по файлам в режиме "Только слово целиком".
  2.  Добавлен переход к файлу по двойному клику на строке результата компиляции соответствующего файла.
  3. Исправлено отображение некоторых элементов управления в Windows XP.

Исправления по крешлогам.

18 мая 2016
MetaTrader 4 Android build 952
  1. Появилось всплывающее окно с детальной информацией о сделках. Всего в одно касание вы можете просмотреть время открытия или закрытия ордеров, увидеть свои комментарии к позиции и узнать размер брокерской комиссии.
  2. На график добавлена красная линия, соответствующая Ask-цене последнего бара. Это поможет вам точнее контролировать свою торговлю.
  3. Упорядочена работа с новостями — теперь вы можете выбирать и читать только интересующие вас категории сообщений, а также добавлять понравившиеся материалы в избранное.
  4. Все изменения в настройках аналитических объектов сохраняются после закрытия приложения.
6 мая 2016
MetaTrader 4 iOS build 947

Теперь для доступа к приложению можно установить ПИН-код. Ваши счета будут дополнительно защищены даже в случае утери мобильного устройства. Включите "Блокировку экрана" в настройках приложения. По умолчанию будет использоваться тот же ПИН-код, что и для доступа к генератору одноразовых паролей.

В новую версию также внесены многочисленные улучшения и исправления.

23 февраля 2016
Веб-платформа MetaTrader 4: Полный набор технических индикаторов и 38 языков интерфейса

Новая версия веб-платформы MetaTrader 4 получила полный набор индикаторов для технического анализа. Теперь в ней доступны 30 самых популярных технических инструментов, как и в десктопной версии MetaTrader 4:

Accelerator Oscillator
DeMarker Moving Average
Accumulation/Distribution  Envelopes Moving Average of Oscillator
Alligator Force Index
On Balance Volume
Average Directional Movement Index Fractals Parabolic SAR 
Average True Range
Gator Oscillator Relative Strength Index 
Awesome Oscillator Ichimoku Kinko Hyo Relative Vigor Index
Bears Power
MACD Standard Deviation
Bollinger Bands
Market Facilitation Index
Stochastic Oscillator
Bulls Power
Momentum Volumes
Commodity Channel Index
Money Flow Index Williams' Percent Range


Продолжается работа над локализацией приложения, теперь интерфейс веб-платформы доступен на 38 языках мира. Были добавлены переводы еще на 14 языков:

Голландский
Литовский Хорватский
Греческий Румынский Чешский
Иврит Сербский
Шведский
Итальянский Словенский
Эстонский
Латышский
Финский



Откройте веб-платформу прямо сейчас и сами оцените обновленное приложение!

15 февраля 2016
Веб-платформа MetaTrader 4: Добавлены индикаторы Билла Вильямса

В свежей версии веб-платформы MetaTrader 4 существенно ускорена работа графиков благодаря применению современной технологии WebGL — теперь даже множество одновременно запущенных индикаторов не влияют на быстродействие веб-платформы.

Начаты работы по внедрению технических индикаторов. На текущий момент уже доступны индикаторы Билла Вильямса:

  1. Alligator,
  2. Fractals,
  3. Market Facilitation Index,
  4. Awesome Oscillator,
  5. Accelerator Oscillator,
  6. Gator Oscillator.
Продолжается работа над локализацией приложения: интерфейс переведен на хинди, узбекский и украинский языки.
15 января 2016
MetaTrader 4 iOS build 945
  • Стала доступна портретная ориентация экрана в iPad. Теперь вам будет удобнее просматривать длинные списки торговых операций, читать почту и финансовые новости.
  • Нативная поддержка iPad Pro.
  • Добавлен перевод приложения на корейский язык.
23 декабря 2015
MetaTrader 4 build 950: Встроенные видеоролики и улучшение работы

Виртуальный хостинг

  1. В диалог выделения виртуального сервера добавлена ссылка на обучающий видеоролик "Как арендовать виртуальную платформу". Посмотрите 2-минутное видео и узнайте, как просто запустить в работу торгового робота или копирование сигналов в режиме 24/7.


    Этот и многие другие видеоролики доступны на официальном канале MetaQuotes Software Corp. на YouTube.

Терминал

  1. Исправлена сортировка MQL4-программ в подпапках окна "Навигатор". Сортировка осуществляется по имени.
  2. Исправлена отрисовка индикатора состояния сетевого соединения при работе на экранах сверхвысокого разрешения (4K).
  3. Исправлен показ окна предварительного просмотра перед печатью новостей.
  4. В просмотрщик журнала терминала, экспертов, тестера и виртуального хостинга добавлен полнофункциональный поиск. Поиск можно осуществлять вперед и назад, с учетом регистра и по целому слову.

MetaEditor

  1. В Мастер MQL4 добавлена ссылка на обучающий видеоролик "Как собрать торгового робота". Посмотрите 3-минутное видео и создайте торгового робота, не написав ни одной строчки кода.


    Этот и многие другие видеоролики доступны на официальном канале MetaQuotes Software Corp. на YouTube.

MQL4

  1. Исправлено значение, возвращаемое функцией SignaBaseTotal. В некоторых случаях вместо общего количества доступных в терминале сигналов возвращался 0.
  2. Исправлена ошибка изменения видимости графического объекта на разных таймфреймах из MQL4-программ. В некоторых случаях объект не отображался на графике после изменения этого свойства.

Tester

  1. Tester: Исправлен показ значений цен и уровней SL\TP в окне результатов тестирования.
Исправления по крешлогам.

11 декабря 2015
MetaTrader 4 build 940: Адаптация для экранов со сверхвысоким разрешением (4К)

Терминал

  1. Завершены работы по адаптации интерфейса терминала к работе на экранах сверхвысокого разрешения (4K). На экранах больших размеров все элементы интерфейса показываются четко. На экранах малых размеров размер элементов автоматически увеличивается для сохранения читаемости.




MQL4

  1. Исправлена ошибка, в некоторых случаях приводившая к ошибке компиляции "Ошибка записи EX4" (Error writing EX4) при работе в Windows 10.
  2. Исправлена ошибка, в некоторых случаях приводившая к ошибке загрузки сторонних DLL в скрипты или эксперты.

Виртуальный хостинг

  1.  Исправлена ошибка миграции на хостинг при наличии вызова EX4-библиотеки в пользовательском индикаторе, который в свою очередь вызывается из эксперта.

Сигналы

  1.  Исправлены уведомления об ошибках на странице подписки на сигнал. Например, сообщения об отсутствии необходимых символов для копирования, о различающихся торговых условиях и т.д.

MetaEditor

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

Исправления по крешлогам.

26 ноября 2015
MetaTrader 4 build 920: Ускорение работы и управление визуальным тестом из конфигурационного файла

Терминал

  1. Исправлена ошибка стартового и периодического сканирования торговых серверов в диалоге выделения торгового счета. Теперь доступность и пинги определяются своевременно без необходимости ручного сканирования.




  2. Оптимизирована и ускорена работа клиентского терминала.
  3. Продолжены работы по адаптации интерфейса к работе на экранах высокого разрешения (4К).

MQL4

  1. Исправлена ошибка загрузки пользовательских индикаторов из ресурсов MQL4-программ. Включение индикаторов в ресурсы происходит при помощи директивы #resource. Это позволяет создавать программы "все в одном", которые гораздо проще распространять.
  2. Исправлена точность отображения значения уровней в пользовательских индикаторах. Ранее точность отображения всегда была 4 знака после запятой, теперь она определяется точностью значений соответствующего пользовательского индикатора.
  3. Исправлена проверка возможности приведения объекта одного типа к другому типу в результате наследования при передаче объекта в качестве параметра метода\функции.
  4. Исправлен пересчет стандартных индикаторов на заданном буфере (iIndicatorOnArray), если данные заданы массивом фиксированного размера. В некоторых случаях индикатор не пересчитывался.
  5. Исправлены ошибки в шаблонах классов.

Tester

  1. Добавлена возможность управления режимом визуализации при запуске тестера из конфигурационного ini-файла. За это отвечает новый параметр TestVisualEnable (true/false). Если параметр не указан, то используется текущая настройка.
  2. Исправлена ошибка в функциях CopyXXX, в результате которой возвращались данные из реальной, а не тестовой истории.
  3. Исправлено чтение параметров тестирования из конфигурационного ini-файла, передаваемого в командной строке.
  4. Исправлена ошибка лишнего освобождения памяти после закрытия графика визуального тестирования. В ряде случаев это приводило к недоступности исторических данных для реально работающих экспертов.

Исправления по крешлогам.

12 ноября 2015
MetaTrader 4 build 910: Улучшения в Библиотеке кодов и доработка интерфейса для Windows 10

Библиотека кодов

  1. Исправлена и ускорена загрузка MQL4-программ из Библиотеки. Скачивайте бесплатные исходные коды торговых роботов и индикаторов прямо в терминале.



Терминал

  1. Исправлены ошибки высвобождения из памяти загруженной ценовой истории. Ошибка проявлялись при нехватке памяти.
  2. Исправлено отображение ряда элементов пользовательского интерфейса при работе в Windows 10.
  3. Исправлено удаление графических объектов с графика при помощи клавиши Backspace.

Сигналы

  1. Дополнены и исправлены переводы витрины торговых сигналов.
  2. В перечисление ENUM_SYMBOL_INFO_INTEGER добавлено read-only свойство SYMBOL_VISIBLE.

MQL4

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

Tester

  1. Добавлено ограничение при тестировании демо-версий индикаторов и экспертов из MQL5 Market. Теперь тестирование демо-версий платных продуктов принудительно завершается за неделю до текущей даты в терминале.

MetaEditor

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


Исправления по крешлогам.
22 октября 2015
MetaTrader 4 build 900: Шаблоны классов в MQL4 и оптимизация работы с памятью

Терминал

  1. Исправлена ошибка смены пароля у неактивного (неподключенного) счета.




  2. Оптимизировано использование и освобождение памяти при работе с большими объемами исторических данных.
  3. Исправлена и оптимизирована работа с большим количеством категорий новостей.

Сигналы

  1. Исправлена отписка от сигналов из контекстного меню окна "Навигатор".


MQL4

  1. Добавлены шаблоны классов, что позволяет создавать параметризованные классы, как в C++. Это позволяет добиться еще большего абстрагирования и использовать один и тот же код для работы с объектами разных классов единообразно. Пример использования:
    //+------------------------------------------------------------------+
    //|                                                    TemplTest.mq5 |
    //|                        Copyright 2015, MetaQuotes Software Corp. |
    //|                                             https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2015, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    //+------------------------------------------------------------------+
    //| Объявляем шаблонный класс                                        |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArray
      {
    protected:
       T                 m_data[];
    
    public:
    
       bool              Append(T item)
         {
          int new_size=ArraySize(m_data)+1;
          int reserve =(new_size/2+15)&~15;
          //---
          if(ArrayResize(m_data,new_size,reserve)!=new_size)
             return(false);
          //---
          m_data[new_size-1]=item;
          return(true);
         }
       T                 operator[](int index)
         {
          static T invalid_index;
          //---
          if(index<0 || index>=ArraySize(m_data))
             return(invalid_index);
          //---
          return(m_data[index]);
         }   
      };
    //+------------------------------------------------------------------+
    //| Шаблонный класс массива указателей, в деструкторе он удаляет     |
    //| объекты, указатели на которые хранились в нем.                   |
    //|                                                                  |
    //| Обратите внимание на наследование от шаблонного класса TArray    |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArrayPtr : public TArray<T *>
      {
    public:
       void             ~TArrayPtr()
         {
          for(int n=0,count=ArraySize(m_data);n<count;n++)
             if(CheckPointer(m_data[n])==POINTER_DYNAMIC)
                delete m_data[n];
         }
      };
    //+------------------------------------------------------------------+
    //| Объявим класс, указатели на его объекты будем хранить в массиве  |
    //+------------------------------------------------------------------+
    class CFoo
      {
       int               m_x;
    public:
                         CFoo(int x):m_x(x) { }
       int               X(void) const { return(m_x); }
      };
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    TArray<int>     ExtIntArray;   // инстанцируем шаблон TArray (специализируем шаблон TArray типом int)
    TArray<double>  ExtDblArray;   // инстанцируем шаблон TArray (специализируем шаблон TArray типом double)
    TArrayPtr<CFoo> ExtPtrArray;   // инстанцируем шаблон TArrayPtr (специализируем шаблон TArrayPtr типом CFoo)
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- наполняем массивы данными
       for(int i=0;i<10;i++)
         {
          int integer=i+10;
          ExtIntArray.Append(integer);
          
          double dbl=i+20.0;
          ExtDblArray.Append(dbl);
          
          CFoo *ptr=new CFoo(i+30);
          ExtPtrArray.Append(ptr);
         }
    //--- выведем содержимое массивов
       string str="Int:";
       for(i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- созданные через new объекты CFoo удалять не нужно, они удалятся в деструкторе объекта TArrayPtr<CFoo>  
      }
    Результат выполнения:
    TemplTest EURUSD,M1: Ptr: 30 31 32 33 34 35 36 37 38 39
    TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19
  2.  Исправлено перераспределение памяти в функции ArrayCopy, в некоторых случаях приводившее к падению MQL4-программ.

Tester

  1. Исправлена ошибка, приводившая к обнулению переменных, объявленных на глобальном уровне, после завершения тестирования индикатора.
  2. Исправлено тестирование при отсутствии связи с торговым сервером.

MetaEditor

  1. В MetaAssist исправлено определение имени функции при наличии приведения типа.
  2. Исправлено открытие больших файлов.
  3. Добавлена горячая клавиша F для вызова поиска из вкладки Библиотека, а также множество подсказок в статусной строке для команд работы с кодом: увеличение/уменьшение отступов, перемещение, смена регистра и т.д.

Исправления по крешлогам.

предыдущая123456