Библиотека пошаговой форвард-оптимизации для МетаТрейдер: Формулы показателей

15 августа 2016, 19:41
Stanislav Korotky
0
230

Это часть документации библиотеки WalkForwardOptimizer для МетаТрейдер 4/5 - оглавление.

Формулы показателей

Выражения для расчета показателя эффективности могут содержать следующие переменные:

NP - чистая прибыль

GP - общая прибыль

GL - общий убыток

PF - фактор прибыли

SHARPE - Шарп 

TRADES - количество сделок

DDMAX - максимальная просадка по балансу

DDREL - максимальная относительная просадка по балансу

WIN - количество выигрышных сделок

LOSS - количество проигрышных сделок

DEPOSIT - начальный депозит

AR - средняя доходность, т.е. средний процент прибыли на сделку (прибыль/убыток, разделенный на текущий баланс и усредненный по всем торгам) - это показатель наклона кривой баланса, аналогичный используемому в коэффициенте Шарпа (MT5, версия 1.6+)

STDEV - стандартное отклонение кривой баланса (MT5, версия 1.6+)

Поддерживаются все математические и логические операции, а также общеупотребительные функции, такие как absexpmaxminpowsqrt. Вот пример выражения для модифицированной формулы PROC (Pessimistic Return on Capital):

(GP * (1 - 1/sqrt(WIN + 1)) + GL * (1 + 1/sqrt(LOSS + 1))) + NP / TRADES

 

Начиная с версии 1.6 для МТ5 доступна следующая возможность.

Если способ расчета показателя эффективности торговли слишком сложный для выражения формулой (например, в нем есть логические условия), можно реализовать в эксперте функцию следующего вида:

typedef double (*FUNCPTR_WFO_CUSTOM)(const datetime startDate, const datetime splitDate, const wfo_string2double_map &map);

и передать её в библиотеку с помощью вызова wfo_setCustomPerformanceMeter(FUNCPTR_WFO_CUSTOM funcptr). WFO вызовет вашу функцию из OnTester с актуальными датами и прочими поименованными величинами внутри карты map. Функция должна вернуть пользовательское значение для OnTester (в расчетах внутри нельзя использовать TesterStatistics!).

Карта определена следующим образом:

/**
 * Optional Custom Performance Meter support (introduced in version 1.6)
 *
 * Built-in type to hold a pair of estimator [name,value]
 */
struct wfo_string2double_pair
{
  string key;
  double value;
};

/**
 * Built-in container of [name,value] pairs.
 * The map is returned to EA as output parameter of FUNCPTR_WFO_CUSTOM function (see below)
 * It can contain predefined estimators (such as PF, SHARPE, etc., see formula description in the docs)
 */
class wfo_string2double_map
{
  protected:
    wfo_string2double_pair array[];
  
  public:
    /**
     * Returns size of the map
     */
    int size() const
    {
      return ArraySize(array);
    }
    
    /**
     * Returns key name by index
     */
    string operator[](const int i) const
    {
      return array[i].key;
    }
    
    /**
     * Returns value by key name
     * If given key does not exist, returns DBL_EPSILON
     */
    double operator[](const string k) const
    {
      int i, n = ArraySize(array);
      for(i = 0; i < n; ++i)
      {
        if(array[i].key == k) return array[i].value;
      }
      return DBL_EPSILON;
    }
    
};

Имена допустимых ключей в карте приведены в списке выше.
Поделитесь с друзьями: