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

Это часть документации библиотеки WalkForwardOptimizer для МетаТрейдер 4/5 - оглавление.
Формулы показателей
Выражения для расчета показателя эффективности могут содержать следующие переменные:
NP - чистая прибыль
GP - общая прибыль
GL - общий убыток
PF - фактор прибыли
SHARPE - Шарп
TRADES - количество сделок
DDMAX - максимальная просадка по балансу
DDREL - максимальная относительная просадка по балансу
WIN - количество выигрышных сделок
LOSS - количество проигрышных сделок
DEPOSIT - начальный депозит
AR - средняя доходность, т.е. средний процент прибыли на сделку (прибыль/убыток, разделенный на текущий баланс и усредненный по всем торгам) - это показатель наклона кривой баланса, аналогичный используемому в коэффициенте Шарпа (MT5, версия 1.6+)
STDEV - стандартное отклонение кривой баланса (MT5, версия 1.6+)
Поддерживаются все математические и логические операции, а также общеупотребительные функции, такие как abs, exp, max, min, pow, sqrt. Вот пример выражения для модифицированной формулы 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; } };Имена допустимых ключей в карте приведены в списке выше.