MetaTrader 5 build 1455: Библиотеки математических функций в MQL5

Что нового в MetaTrader 5?

14 октября 2016

Terminal

  1. Добавлены всплывающие подсказки для кнопок Buy, Sell и Close в диалогах торговли. Подсказки поясняют, какие именно активы будут куплены и проданы при выполнении той или иной операции, помогая начинающим трейдерам понять суть торгового процесса.




  2. Добавлены новые пиктограммы ордеров, сделок и позиций на вкладках "Торговля" и "История".




  3. Оптимизировано и значительно ускорено (до 4 — 5 раз) отображение и обновление стакана цен, тикового графика стакана цен и ленты сделок.
  4. Исправлена ошибка синхронизации тиковой истории в неторговое время. В некоторых случаях ошибка приводила к чрезмерному потреблению сетевого трафика.

MQL5

  1. В стандартную библиотеку включена MQL5-версия библиотеки численного анализа ALGLIB.

    Возможности библиотеки

    • Линейная алгебра
    • Решение систем уравнений — линейных и нелинейных
    • Интерполяция
    • Оптимизация
    • Быстрое преобразование Фурье
    • Численное интегрирование
    • Линейная и нелинейная аппроксимация по методу наименьших квадратов
    • Решение обыкновенных дифференциальных уравнений
    • Вычисление специальных функций
    • Описательная статистика и проверка гипотез
    • Анализ данных — классификация, регрессия
    • Реализация алгоритмов линейной алгебры, интерполяции и т.д. в арифметике высокой точности (с использованием MPFR)

    Как использовать

    Файлы библиотеки ALGLIB расположены в каталоге \MQL5\Include\Math\Alglib. Для использования функций включите основной файл библиотеки в свою программу:

    #include <Math\Alglib\alglib.mqh>

  2. В стандартную библиотеку включены функции работы с математической статистикой. Теперь в MQL5 доступны возможности языка R —  одного из лучших инструментов статистической обработки и анализа данных.

    Возможности библиотеки

    Статистическая библиотека содержит функции для расчета статистических характеристик данных, а также функции для работы со статистическими распределениями:

    • Функции для расчета статистических характеристик элементов массива
    • Функции для работы со статистическими распределениями: нормальное распределение, логнормальное распределение, бета-распределение и т.д.

    Как использовать

    Файлы статистической библиотеки расположены в каталоге \MQL5\Include\Math\Stat. Для использования включите файл с нужными функциями в свою программу, например:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    

    Подробное описание функций библиотеки читайте в статье Статистические распределения в MQL5 - берем лучшее из R.


  3. В стандартную библиотеку включена MQL5-версия библиотеки Fuzzy, в которой реализованы системы нечеткого логического вывода Мамдани и Сугено.

    Возможности библиотеки

    • 13 функций принадлежностей
    • Гибкая форма написания правил для нечетких систем
    • Система нечеткого логического вывода Мамдани
    • Система нечеткого логического вывода Сугено
    • 5 методов дефаззификации для систем типа Мамдани
    • Неограниченное количество входных и выходных переменных

    Как использовать

    Файлы библиотеки Fuzzy расположены в каталоге \MQL5\Include\Math\Fuzzy. Для использования включите файл с нужными функциями в свою программу, например:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    

    Подробное описание библиотеки можно найти в Code Base: Fuzzy - библиотека для работы с нечеткой логикой


  4. Добавлено свойство CHART_QUICK_NAVIGATION для включения/отключения строки быстрой навигации на графике. Для изменения и получения состояния свойства используйте функции ChartSetInteger и ChartGetInteger.




    Строка вызывается нажатием клавиши Enter или Space. При помощи нее можно быстро переместиться к заданной дате на графике, переключить символ и таймфрейм. Если ваша MQL5-программа обрабатывает нажатия клавиш Enter или Space, отключите свойство CHART_QUICK_NAVIGATION, чтобы терминал не перехватывал эти события. При этом останется возможность вызова строки навигации двойным кликом мыши.

  5. Добавлены функции FileLoad и FileSave для легкого чтения и сохранения массивов в файлы. В отличие от FileRead* и FileWrite*, этим функциям не требуется хэндл файла. FileLoad и FileSave работают с массивами числовых типов, а также с простыми структурами, не имеющими строк, динамических массивов или объектов класса.
    long  FileLoad(
       const string filename,      // [in] имя файла
       void         &buffer[],     // [out] массив, в который считывается файл
       uint         common_flag=0  // [in] 0 - поиск файла в папке Files терминала, FILE_COMMON - в общей папке терминалов
       );
    
    bool  FileSave(
       const string filename,      // [in] имя файла
       const void   &buffer[],     // [in] массив, который сохраняется в файл
       uint         common_flag=0  // [in] 0 - создание файла в папке Files терминала, FILE_COMMON - в общей папке терминалов
       );
    Пример записи массива тиков в файл с последующим чтением этих данных:
    //--- входные параметры
    input int      ticks_to_save=1000; // количество тиков
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- если тиковая история синхронизирована, то код ошибки равен нулю
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  запишем тики в файл
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- теперь прочитаем эти тики обратно из файла
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }

  6. Модифицировано отображение пользовательского индикатора с режимом рисования DRAW_CANDLES. Теперь для этого стиля можно задавать от одного до трех цветов, в зависимости от этого меняется внешний вид свечей.

    Если указан один цвет, все свечи на графике будут полностью окрашены этим цветом.
    //--- одинаковые свечи, окрашенные в один цвет 
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- указан только один цвет, поэтому все свечи будут одного цвета
    #property indicator_color1  clrGreen  
    Если указано два цвета, контуры свечи будут отрисовываться первым цветом, а тело — вторым цветом.
    //--- цвет свечей отличается от цвета теней
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- тени и контур свечей зеленого цвета, тело белого цвета
    #property indicator_color1  clrGreen,clrWhite 
    Если указано три цвета, контур свечи будет нарисован первым цветом, а цвет бычьей и медвежьей свечей будет задаваться вторым и третьим цветом.
    //--- цвет свечей отличается от цвета теней
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- тени и контур зелёного цвета, тело бычьей свечи белого цвета, тело медвежьей свечи красного цвета
    #property indicator_color1  clrGreen,clrWhite,clrRed
    Таким образом, с помощью стиля DRAW_CANDLES можно создавать собственные пользовательские варианты раскраски свечей. Все цвета можно также менять динамически в процессе работы индикатора с помощью функции PlotIndexSetInteger(индекс_построения_DRAW_CANDLES, PLOT_LINE_COLOR, номер_модификатора, цвет) , где номер_модификатора можеть иметь следующие значения:
    • 0 – цвет контура и теней
    • 1– цвет тела бычьей свечи
    • 2 – цвет тела медвежьей свечи
    //--- установим цвет контура и теней
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- установим цвет тела для бычьей свечи
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- установим цвет тела для медвежьей свечи
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
  7. Исправлен ряд ошибок и ускорена работа с тиковой историей при помощи функций CopyTicks.
  8. Разрешено использование операторов в интерфейсах.

Market

  1. Исправлена ошибка, в некоторых случаях приводившая к повторному запросу авторизации на MQL5.community при покупке в Маркете.

Tester

  1. Добавлен перевод пользовательского интерфейса на греческий язык, малайский язык и иврит.

Обновлена документация.