MetaTrader 5 build 3210: добавлены новые методы матриц и управление минимальным/максимальным значением индикатора

Изменен алгоритм расчета Sharpe Ratio — теперь он считается классическим способом, а его значение приводится к годовому интервалу

11 февраля 2022

MQL5

  1. Добавлены функции Min, Max, ArgMin, ArgMax и Sum для векторов и матриц, которые позволяют находить минимальное и максимальное значения, соответствующие индексы и сумму.
  2. Добавлена поддержка методов Flat для матриц. Это позволяет адресоваться к элементу матрицы через один индекс, а не через два.
    double matrix::Flat(ulong index) const;      // getter
    void matrix::Flat(ulong index,double value); // setter

    Псевдокод вычисления адреса элемента матрицы:

    ulong row=index / mat.Cols();
    ulong col=index % mat.Cols();
    
    mat[row,col]

    Например, для матрицы matrix mat(3,3) доступы можно записать так:

      на чтение — x=mat.Flat(4), что эквивалентно записи x=mat[1][1]
      на запись — mat.Flat(5, 42), что эквивалентно записи mat[1][2]=42

    В случае вызова функции с некорректным для матрицы индексом будет сгенерирована критическая ошибка исполнения OutOfRange.

  3. Улучшено форматирование дробных чисел во входных параметрах MQL5-программы. При чтении некоторых вещественных чисел в input-параметры подставлялись числа с большим количеством нулей, например, 0.4 представлялось как 0.400000000002.
  4. Исправлены ошибки в математической библиотеке Math\Stat\Math.mqh. Кроме того, изменена работа функции MathSample этой библиотеки, чтобы соответствовать классическому поведению таких же математических библиотек при выборке с возвратом.
  5. Исправлена ошибка в работе CopyTicks/CopyTicksRange, приводящая к отдаче устаревших данных при переходе через полночь для тех случаев, когда по инструменту не поступают тики
  6. Добавлены новые значения INDICATOR_FIXED_MINIMUM и INDICATOR_FIXED_MAXIMUM в перечисление ENUM_CUSTOMIND_PROPERTY_INTEGER.
    При помощи этих свойств можно включать/отключать фиксирование минимального и максимального значений индикатора с помощью функции IndicatorSetInteger. При вызове IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true) используется текущее минимальное/максимальное значение, соответственно


Tester

  1. Изменен алгоритм расчета Sharpe Ratio — теперь он считается классическим способом, а его значение приводится к годовому интервалу. Предыдущий алгоритм строился на разбросе полученных прибылей и убытков (PnL), но не учитывал колебания эквити при открытых позициях. Теперь в расчет принимаются взлеты и падения эквити, а само значение коэффициента Шарпа трактуется классическим образом:
    •  Sharpe Ratio < 0              Стратегия убыточна, не годится. Плохо.
    •  0 < Sharpe Ratio  < 1.0    Риск не окупается. Такие стратегии могут браться в работу, если нет альтернатив. Неопределенно.
    • Sharpe Ratio ≥ 1.0             Если коэффициент Шарпа превышает единицу, это означает, что риск окупается, портфель/стратегия работает. Хорошо.
    • Sharpe Ratio ≥ 3.0            Высокий показатель говорит о том, что вероятность получить убыток в каждой конкретной сделке очень мала. Очень хорошо.

Terminal

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


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