Секреты TSLab | Торговые роботы | События
15 Сен

Эквити. Оценка гладкости эквити.

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

Начало.

Выходной. На улице полный хаос. Холод, дождь, ветер. На личный самолет пока не заработал, поэтому не летаю в Лондон пить чай по вечерам. Сижу дома. В голове крутятся различные картинки на тему статистики, так как последнее время плотно сел на робастные методы оценки характеристик временных рядов. Все это дело изучается не только путем чтения книжек, но и на практике, путем изучения реальных данных взятых из торговых стратегий. Препарируются данные на R , что здорово ускоряет процесс по сравнению с C# и TSLab в голом виде. Конечно без TSLab API тоже не обошлось, но только для выгрузки данных. Вдруг слышу где-то внутри головы:

- А давай-ка покрутим линейную регрессию на эквити и посмотрим что там получается? Заодно проверим расхождения между стандартной линейной регрессией и робастными методами типо “Tukey line”. (прим. толкового описания в инете не нашлось. По факту это регрессия не от среднего а от медианы, что позволяет избежать влияния выбросов на результат регрессии и давать лучший результат на реальных данных)

Мужик сказал, мужик сделал. И началось.

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

Загружаю мартингала, даю ему данные и без каких либо подкруток получаю жутковатую картинку, изображенную на Рисунке 1. Чтобы выгрузить эту эквити из TSLaba пришлось немного пошаманить на TSLab API и накидать метод экспорта данных. Для уменьшения количества данных, экспорт делаю на конец каждого часа (да и нет смысла выгружать минутки, это не изменит результаты, только увеличит время расчета).

Эквити. Оценка гладкости эквити.

Рисунок 1. Исходная эквити в TSLab

Эквити. Оценка гладкости эквити.

Рисунок 2. Эта же самая эквити в R

- Хм… что за ерунда. Какие-то странные разрывы между данными. Их нет на исходной эквити. Где то ошибка. Думай сиди.

Непродолжительное обдумывание принесло плоды. Разрывы – это не торгуемые часы, например ночь. На графике они рисуются разрывами, и в результате видим линию там где есть разрыв. График построен в виде “timeSeries” и учитывает часы, когда данных нет. Так что все нормально.

- Ну и зачем ты нарисовал тогда эту картинку? Регрессию по ней посчитать не получится, нарисовать ее на график тоже не получится. Надо переводить в другие единицы измерения ось Х.

Сложно было с самим собой не согласиться. Быстро конвертирую данные в другую форму и получаю новую картинку, уже больше похожую на исходную.

Эквити. Оценка гладкости эквити.

Рисунок 3. Эта же самая эквити в R без учета не торгуемых дней.

- Ну ведь можешь когда хочешь. Можешь даже сходить пообедать. – сказал я себе на этом этапе.

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

Эквити. Оценка гладкости эквити.

Рисунок 4. Эта же самая эквити в R с регрессиями.

- Тэксь… вот эта красная штука есть Tukey line, а черная обычная регрессия. И что-то они почти совпадают. Подозрительно. Опять что-то упустил или сделал не так.

Проверил со всех сторон, перестроил графики, перечитал документацию. Все в порядке. Нет проблем. Видимо на самом деле они расположены рядом и претензия была не обоснована.

- Ок. Ладно, если наши регрессии показывают тенденцию эквити, что показывает линия медианы с рисунка 1? Какую то ерунду. Ты так не думаешь?

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

- Ну а метод расчета этой линии медианы ты не знаешь что-ли?

Увы, метод расчета я не знал. Спросил у разработчиков, но они были все в глубоком отдыхе и не отвечали. Ждать было нереально, нужно было двигать процесс вперед.

- Короче, берешь простой скрипт на API генерируешь поддельную эквити с идеальной гладкостью, рисуешь обе регрессии. Смотришь. Потом портишь исходную эквити добавив в нее много крупных просадок малой длительности, эмулируя, таким образом, выбросы в данных. Опять строишь обе регрессии и смотришь. Полюбому будет большая разница между линиями регрессии. Усек?

Так точно! Через 5 минут скрипт генерирующий супер эквити был готов. Результатом его работы стала мечта любого трейдера.

Эквити. Оценка гладкости эквити.

Рисунок 5. Ах, какая эквити! Мне б такую!

Эквити. Оценка гладкости эквити.

Рисунок 6. Эквити и обе регрессии.

Обе регрессии совпадают почти полностью, что вполне логично. Ведь у нас эквити почти идеально прямая. Необходимо теперь подпортить данные и получить новый график. Добавляю в эквити 200 различных просадок разной глубины. В принципе это 5% от общего числа данных, должно повлиять на результат простой регрессии.

Эквити. Оценка гладкости эквити.

Рисунок 7. Эквити с просадками и обе регрессии.

- Хм… чтобы заметно отклонить простую регрессию нужно испортить больше чем 5% исходных данных. Пожалуй, больше чем реально может быть в жизни выбросов на эквити. Завязывай с этими робастными методами.

Ну уж нет! Теперь я эту эквити живой не отпущу. Буду мучить до наступления летального исхода. Беру и порчу аж 30% исходных данных. Получаю кучу кратковременных просадок и график становится жутко страшным, НО наконец получаю серьезное расхождение между двумя типами регрессии.

Эквити. Оценка гладкости эквити.

Рисунок 7.1. 30% данных испорчены просадками.

- Наделал ты делов. Даже робастная линия регрессии наклонилась вправо, не говоря о простой линейной регрессии. Однако. Сходи отдохни пол часа, а то еще что нибудь эдакое вытворишь, а мне потом думай над этим пол ночи.

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

Оценка гладкости эквити. Реализация в TSLab.

Как вы, наверное, догадались на этом ничего не закончилось, а только началось.

- Погоди, а ведь это… регрессия … она ведь того … методом наименьших квадратов. То есть у нее есть показатель качества, показывающий насколько она хорошо представляет исходные данные. Там ведь на реформале просили отклонения от медианы. Чем хуже будет отклонения от регрессии? Да я гений! Однозначно!

Посмотрим на оценку качества линейной регрессии в R для идеальной эквити и для порченной на 30%. Там есть два основных показателя, которые мы можем использовать для себя.

Эквити. Оценка гладкости эквити.

Рисунок 8. Показатели качества регрессии для  идеальной эквити.

Эквити. Оценка гладкости эквити.

Рисунок 9. Показатели качества регрессии для  эквити порченной на 30%.

Явно прослеживается заметное отличие искомого показателя (если он равен 1, то исходные данные являют собой прямую линию). Отлично.

Мысль задала направление и сразу был выбран способ реализации линейной регрессии в TSLab. Это библиотека alglib. Она позволяет использовать ее в коде C#, что естественно дает нам возможность написать кубик вычисляющий отклонения эквити от регрессии.

- Стой! А как ты будешь данный кубик в TSLab подключать? Нужно ведь чтобы в него приходили все данные обо всех сделках происходящих на заданном инструменте. Только тогда мы сможем выдернуть эквити и построить регрессию. Похоже тупик.

Вообще, в TSLab нет никакой штатной возможности получать данные по эквити и делать над ними свои собственные операции. Приходится выдумывать разные ходы вокруг возможностей TSLab API. Остановить мысль было уже сложно и через дцать минут решение было найдено. Сделаем обычный последовательный кубик на вход которого будем подавать инструмент и все позиции которые есть в скрипте. Тогда наш кубик будет обсчитываться всегда после того как обсчитаются позиции и мы сможем видеть все сделки по инструменту. Супер! Рисую заготовку такого кубика, собираю dll и подключаю к TSLab. Собираю скрипт и подключаю туда кубик. FAIL! Не работает. Невозможно в текущей версии сделать последовательный кубик с неопределенным числом входов в который подаются позиции.

Еще дцать минут прошло и новый вариант был собран. Есть такой крутой кубик “Доход за все время”, и он по факту представляет собой эквити. Вот волатильность этой кривой мы и будем пытаться найти. Бинго.

- Ах, ты ж морда. Соображаешь. Хвалю.

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

Эквити. Оценка гладкости эквити.

 

Рисунок 10. Скрипт с кубиком оценки волатильности эквити.

Конечно, “волатильность эквити” не совсем точное определение того, что кубик рассчитывает, но ничего умнее в голову не пришло. Поэтому кубик называется именно так.

Пишу начинку кубика, походя решив пару проблем касающихся оптимизации по скорости. Все уже почти завершено как …

- Слушай, а что мы будем из кубика выдавать? Мы же еще не знаем как оценивать качество регрессии и какие возможности для этого дает alglib.

Точно. В пылу работы я забыл про главное, про показатель качества модели. В R они есть и их несколько, а вот в alglib их возможно нет совсем. Изучив документацию вздохнул с облегчением. Есть один показатель, позволяющий оценить качество регрессии в относительных величинах. Значит будем его и применять.

Собираю все воедино, запускаю скрипт. Бах, трах, все завелось и я лицезрел следующую картинку:

Эквити. Оценка гладкости эквити.

Рисунок 11. Рабочий скрипт с оценкой гладкости эквити.

Эквити. Оценка гладкости эквити.

Рисунок 11а. Эквити скрипта.

По левой шкале можно видеть число 2231, которое являет собой ту самую оценку гладкости.

 – Надо проверить на другой менее волатильной эквити. Не доверяю я что-то этой поделке. Выглядит странно, работает странно. Не верю!

Сказано, сделано. Загружаю другие данные, рисую другую эквити. Вижу другой показатель.

Эквити. Оценка гладкости эквити.

 

Рисунок 12. Результат с меньшей волатильностью эквити.

Эквити. Оценка гладкости эквити.

Рисунок 13. Сама эквити с меньшей волатильностью.

Легко заметить, что для менее волатильной эквити показатель гладкости меньше. То есть, чем больше число, тем хуже регрессия может описать эквити. Значит эквити более волатильна относительно линии регрессии.

- А что это оно у тебя только на самом последнем баре что-то показывает? А на остальных что? Эквити гладкая как стекло?

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

- Ладно, чертяка. Кого хочешь уговоришь. А как насчет выдачи этой цифры в окно результатов оптимизации? Задача исходная была такая. Или опять все забыл?

Не забыл конечно но …  это уже другая история о которой можно будет прочитать в следующей статье.

Все описанные здесь крутые кубики можно скачать с нашего сайта.


comments powered by HyperComments

mars
2014-10-11 11:16:47
Люблю я этого парня за приступы альтруизма! Он делает мир богаче.
mars
2014-10-11 13:02:32
Прочитал статью вместе с продолжением. Статья очень интересная и познавательная. Многое прояснилось. Осталось понять, что за хрень эта медиана и что она показывает. И какое отношение имеет к ней эквити. А если убрать медиану с графика, анализ графика от этого пострадает? В чем польза от этой медианы?
ra81
2014-10-12 08:33:56
если убрать медиану с графика эквити вообще ничего не изменится. эта линия на мой взгляд совершенно бесполезная. в других программах обычно используют линейную регрессию, что собственно применил и я.
kain198
2015-02-19 17:03:23
А у меня возникла такая мысль. Если TSlab строит сам некоторую линию регрессии на графике эквити, то соответственно можно именно эту линию как-то получить. И для нее рассчитать неопходимые показатели для оценки качества. И в идеале добавить в список параметров оптимизации и тестировать скрипты уже с учетом нового параметра. Надо поглядеть сами библиотеки tslab поподробнее...
ra81
2015-02-22 19:52:26
не строит тслаб никакую линию регрессии. Это медиана, и странная медиана. Получить ее никак нельзя. В общем и целом, изыскания всегда полезны :). Особенно для самообразования.
Виктория
2017-01-01 06:38:42
Казино Вулкан раздают деньги сегодня http://cenforce100.ru/casino-vulkan.php
14
Июл
2017

Доверительное управление. Результаты в июне 2017 года.

Доверительное управление. Результаты в июне 2017 года. Июнь индекс РТС вновь провел преимущественно в боковых движениях, а… »

11
Июн
2017

Доверительное управление. Результаты в мае 2017 года.

Доверительное управление. Результаты в мае 2017 года. В мае “болтанка” индекса РТС продолжилась, на паре… »

7
Май
2017

Доверительное управление. Результаты в апреле 2017 года.

Доверительное управление. Результаты в апреле 2017 года. В апреле мы наблюдали очередной месяц “боковика” по… »

2
Апр
2017

Доверительное управление. Результаты в марте 2017 года.

Доверительное управление. Результаты в марте 2017 года. В марте волатильность на рынке несущественно выросла. Все… »

7
Мар
2017

Доверительное управление. Результаты в феврале 2017 года.

Доверительное управление. Результаты в феврале 2017 года. Февраль был самым коротким торговым месяцем, к тому же… »