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

 
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 #:
Не нашел ни в одном источнике необходимости использовать логарифм доходности при расчете коэффициента Шарпа

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

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

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

 
Ivan Titov #:
Не нашел ни в одном источнике необходимости при расчете коэффициента Шарпа и приводить его к годовому значению.

Еще цитата

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

 
Rashid Umarov #:
Отвечу цитатой

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

Rashid Umarov #:
Что касается приведения коэффициента Шарпа к годовому значению, это делается для стандартизации показателя, позволяющей сравнивать его между различными инвестиционными стратегиями и портфелями, независимо от изначального временного масштаба инвестиций.
Коэффициент Шарпа - это отношение средней доходности на отрезках заданного периода к стандартному отклонению на ЭТИХ ЖЕ отрезках. То есть длина отрезков большого значения не имеет для возможности сравнения стратегий между собой. На мой взгляд ее просто целесообразно выбрать больше в несколько раз средней продолжительности сделки, чтобы убрать ненужный шум.
Rashid Umarov #:
попробуйте без логарифмов и расскажите потом о необычном побочном ээфекте. Вы должны с этим столкнуться

Попробовал: ничего необычного. Правда одну ошибку нашел, прилагаю исправленный вариант.

Файлы:
Sortino.mqh  10 kb
 
Rashid Umarov #:

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

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

Любопытно, что вот для такой эквити этот скрипт выдает шарпа 2.08:

А для такой (то же самое с реинвестом) 3.66:

Хотя очевидно, что качество 2й эквити хуже (реинвест вообще всегда ухудшает качество эквити).

А если вместо логарифмов приращений эквити воспользоваться самими приращениями:

         log_return = (m_equities[i] - prev_equity); // increment      
         //log_return = MathLog(m_equities[i] / prev_equity); // increment logarithm

То получится 3.85 для первой и 2.1 для второй. Намного более адекватно.

 
Кроме того, шарп на логарифмах существенно зависит от размера начального депозита. В приведенном выше примере (эквити 1) при исходном депо 4000 он дает 2.08. При депо 400000 он дает 3.83. Хотя форма эквити никоим образом не изменилась (торговля фикс.лотом).
 

Шарп на логарифмах не зависит от размера депо только в случае, если идет торговля с реинвестом.

Но в этом случае и шарп на простых приращениях не зависит от размера депо.

Следовательно, пока не понимаю, зачем использовать шарп на логарифмах.