Обсуждение статьи "Математика в трейдинге: Коэффициенты Шарпа и Сортино"

 

Опубликована статья Математика в трейдинге: Коэффициенты Шарпа и Сортино:

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

3-D график годового коэффициента Шарпа на EURUSD за 2020 год по месяцам и таймфреймам

На графике хорошо видно, что значения годового коэффициента Шарпа на каждом месяце меняется. Это зависит от того, как изменялся график EURUSD в этом месяце. Но при этом значение годового коэффициента Шарпа для каждого месяца на всех таймфреймах почти не меняется.

Таким образом, годовой Sharpe Ratio мы можем вычислять на любом таймфрейме, при этом полученное значение так же не зависит от количества баров, на которых были получены доходности. Это значит, что приведенный алгоритм вычисления можно использовать при тестировании, оптимизации и во время мониторинга в режиме реального времени. Главное, чтобы массив доходностей не был слишком мал по размеру.


Автор: MetaQuotes

 

Совпадают, но не всегда? В чем причина различий?


 

Мы добавили штраф за малое количество трейдов в проходе. Это позволили обеспечить сходимость результатов при генетической оптимизации.

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

 
MetaQuotes #:

Мы добавили штраф за малое количество трейдов в проходе. Это позволили обеспечить сходимость результатов при генетической оптимизации.

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

Разве это не задача "Комплексного критерия"?

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

Пересмотрите этот вопрос, пожалуйста.

 
MetaQuotes #:

малое количество трейдов

Опять же, что такое "малое количество"? Как по мне, то и 70-80 мало, но у вас на такие проходы штраф не накладывается.

Кол-во сравнивается с другими проходами?

Нормируется на длину интервала тестирования?

 
Я правильно понял, что Sharpe.mqh вычисляет только годовой коэф. Шарпа? Месячный Сортино не получится?
 
Ivan Titov #:
Я правильно понял, что Sharpe.mqh вычисляет только годовой коэф. Шарпа? Месячный Сортино не получится?

Статья содержит ответ на ваш вопрос.

 
Andrey Khatimlianskii #:

Опять же, что такое "малое количество"? Как по мне, то и 70-80 мало, но у вас на такие проходы штраф не накладывается.

Кол-во сравнивается с другими проходами?

Нормируется на длину интервала тестирования?

Скорее всего установлено какое-то фиксированное значение, иначе бы пришлось пересчитывать всю таблицу результатов по много раз.

Согласен с твоими доводами выше.

 
Andrey Khatimlianskii #:
Совпадают, но не всегда

Если задавать недельный таймфрейм в тестере, то практически всегда сильно не совпадают:

На месячном таймфрейме разброс еще больше:


 
Rashid Umarov #:

Статья содержит ответ на ваш вопрос.

Не нашел ответ на мой вопрос в статье, но судя по коду Sharpe.mqh Сортино в нем нет. Поэтому ниже прилагаю дополненный код с опцией расчета Сортино. Заодно оптимизировал код в части лишнего вызова функций.

На мой взгляд недостаток коэффициента Сортино в том, что для его расчета берутся только доходности ниже безрискового (в данном случае нулевого). Но положительная доходность на одном из периодов ниже рассчитанной средней для тестируемой стратегии - тоже риск. Поэтому добавил расчет коэффициента, в котором учитываются только доходности ниже средней. Не нашел аналог, поэтому пока скромно назвал его коэффициентом Титова)). Найду - переименую.

В оригинале неудобно, что период расчета зависит от текущего таймфрейма. Поэтому добавил задание периода расчета (если явно не задан, то берется текущий таймфрейм):

Returns.SetTF(PERIOD_MN1);

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

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

Пример использования для расчета коэффициента Шарпа как в оригинале:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SHARPE));
}

Пример расчета коэффициента Сортино при прочих равных:

#include <Sortino.mqh>
CReturns Returns;

..

void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_SORTINO));
}

Для себя решил оценить риск получения доходности ниже средней на месячных интервалах:

#include <Sortino.mqh>
CReturns Returns;

..

int OnInit()
{
        Returns.SetTF(PERIOD_MN1);
        ..
}


void OnTick()
{
        Returns.OnTick();
        ..
}


double OnTester(void)
{
        return(Returns.OnTester(DEF_TITOV, false, false, false));
}
Файлы:
Sortino.mqh  10 kb
 
Ivan Titov #:
Не нашел ни в одном источнике необходимости использовать логарифм доходности при расчете коэффициента Шарпа

Отвечу цитатой

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

От себя добавлю - попробуйте без логарифмов и расскажите потом о необычном побочном ээфекте. Вы должны с этим столкнуться.