БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!



 Когда мы имеем больше одной стратегии, в которых уверены, возникает вопрос каким количеством лотов торговать. На данный вопрос еще в 50-60х годах попробовал ответить Гарри Марковиц, за что в 1992 году получил нобелевскую премию.


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


 Оптимизация портфеля — процесс относительно несложный, если использовать специальные программные средства, такие как матлаб, или R. В обоих языках в свободном доступе можно скачать оптимизаторы инвестиционных портфелей, в R, их несколько. Мне как не профессиональному программисту довольно сложно перекидываться с одного языка на другой, не освоив толком C# и S# (до сих пор приходится пересматривать курсы). Поэтому,  реализация простого механизма подбора оптимального портфеля была выполнена именно на C#.


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


Для оценки того, насколько хороша наша стратегия я использовал показатель — отношение среднедневного ретурна портфеля к его стандартному отклонению. В меру природной скромности, называть его в свою честь не стал. ;)


Но ближе к делу


Вот код оптимизатора:



Данный оптимизатор принимает на вход Ecxelфайл, сохраненный, как csv. В данный файл должны быть загружены ретурны стратегий, из которых нужно собрать портфель (Формат ретурнов, как на картинке).  Для тех, кто знаком в концепцией оптимального F, там все аналогично, за исключением того, что вместо ретурнов подставляются HPR.


Обязательно в файле нудно указать дату, формат даты можно изменить в коде.



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


И о чудо, открывая этот файл, мы найдем 30 лучших вариантов портфеля отсортированные от максимума к минимуму по показателю отношение среднедневного ретурна портфеля к его стандартному отклонению.



Показатель, как видно на рисунке записывается в графу value — так как теоретически можно использовать любой показатель. Предложенный мной показатель можно заменить в коде, на тот, какой вам нравится больше, как вариант SharpRatio, либо Sortino. 


Количество лучших результатов можно изменить в строчке 54.



Формат даты в строчке 24.



Самый простой способ воспользоваться обретенными знаниями:



*Синхронизацию, можно выполнить в excelс помощью сводной таблицы. (Вставка=>Сводная таблица=>Ок)



Для того, чтобы проверить адекватно ли работает мой оптимизатор, я использовал CombinationStrategy, один из инструментов WealthLab.


Наилучший портфель



2-ой портфель по ранжированию оптимизатора



3-ий портфель



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


Если кто-нибудь захочет написать похожим образом генетический оптимизатор, по мотивам моей статьи — буду рад такому подарку на новый год. ;)



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


Для S# стратегий данную функцию можно прописать одной строчкой:


Кол контрактов = (Сумма на счете*Вес в портфеле)/Гарантийное обеспечение



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


Спасибо всем, кто дочитал до конца!


Учитесь программировать, тестируйте свои идеи, получайте прибыль и узнавайте много всего нового!


И как вы помните, я сам начал изучать программирование сравнительно недавно — поэтому получится и у Вас. Главное не стесняться обращаться к профессионалам, в этом хорошо помогают курсы, да и просто общение с программистами — http://stocksharp.com/lesson/stocksharp/


Буду рад, если моя программа улучшит качество вашего трейдинга!


 Николай Флеров наш ученик!









0 комментариев

Добавить комментарий