Блог им. MrFly

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

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


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

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

Для меня, основная идея оптимизации портфеля — это  нахождение таких весов каждой из стратегий, чтобы соотношение риска и доходности было на приемлемом уровне.
Для оценки того, насколько хороша наша стратегия я использовал показатель -отношение среднедневного ретурна портфеля к его стандартному отклонению. В меру природной скромности, называть его в свою честь не стал. ;)
Но ближе к делу:
 
Вот код оптимизатора (проект можно будет скачать, он внизу  статьи):
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!

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

Обязательно в файле нудно указать дату, формат даты можно изменить в коде.
 БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
После того, как все возможные варианты просчитались они сохраняются в ту же папку, под тем же именем файла, однако к нему добавляется .result.csv

И о чудо, открывая этот файл, мы найдем 30 лучших вариантов портфеля отсортированные от максимума к минимуму по показателю отношение среднедневного ретурна портфеля к его стандартному отклонению .
 БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
Показатель, как видно на рисунке записывается в графу value — так как теоретически можно использовать любой показатель. Предложенный мной показатель можно заменить в коде, на тот, какой вам нравится больше, как вариант Sharp Ratio, либо Sortino.

Количество лучших результатов можно изменить в строчке 54.
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно! 
Формат даты в строчке 24.
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно! 
Самый простой способ воспользоваться обретенными знаниями:
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
*Синхронизацию, можно выполнить в excel с помощью сводной таблицы. (Вставка=>Сводная таблица=>Ок)

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

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

 
Наилучший портфель:
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно! 
2-ой портфель по ранжированию оптимизатора:
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
3-иы портфель:
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
Помимо того, что Wealth-lab Score подтверждает адекватность работы оптимизатора, также доходность как правило получается выше, однако доходность не учитывает риск, поэтому ее для сравнения я брать не стал.
 
Если кто-нить захочет написать похожим образом генетический оптимизатор, по мотивам моей статьи — буду рад такому подарку на новый год. ;)

БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
После того, как найдены веса оптимального портфеля, нужно прописать расчет количества контрактов в самой стратегию. Обращаясь к количеству денег на счете метод управления капиталом должен рассчитывать количество контрактов.
 
Для S# стратегий данную функцию можно прописать одной строчкой:
Кол контрактов = (Сумма на счете*Вес в портфеле)/Гарантийное обеспечение
БУДЬ МУДРЕЙ! Определяй кол. контрактов правильно!
 
В результате, торговля начинает приобретать абсолютно другое качество — данный подход не только избавляет трейдера от головной боли, думая каким кол контрактом заходить, в каждой отдельной сделке. Торговля портфелем обоснованно упорядочивает торговый процесс,  становится философией. Портфель сам  адаптируется к изменению  количества денег на счете. Мы же высвобождаем время на создание новых стратетий и реализацию новых идей.
 
Спасибо всем, кто дочитал до конца!
Учитесь программировать, тестируйет свои идеи, получайте прибыль и узнавайте много всего нового!
 
И как вы помните, я сам начал изучать программирование сравнительно недавно — поэтому получится и у Вас. Главное не стесняться обращаться к профессионалам, в этом хорошо помогают курсы да и просто общение с программистами -  http://stocksharp.com/lesson/stocksharp/
 
Буду рад, если моя программа улучшит качество вашего трейдинга!
 
 
 
★22
56 комментариев
Обещанный проект оптимизатора здесь — yadi.sk/d/S-a1saPIEV5tt
avatar
Задача нахождения хорошей системы на порядки сложнее задачи выбора лота. Поэтому человек, имеющий несколько хороших систем, скорее всего, достаточно мудр, чтобы справиться с выбором лота.
avatar
anatolyutkin, важны все составляющие. И подход к поиску, и дисциплина в исполнении (риск-менеджмент). И выбор лота (правильное название money management). Правильные ММ увеличивает доходность алгоритма. Года 1.5 назад даже Каленкович выступал на эту тему… Вообщем все важно, даже руки мыть перед едой :-)
avatar
Евгений, а Каленкович зарабатывает? ) Вы так сказать как бы это помягче сказать, «прекрасные» советы даете, а как в реале с торговлей. Есть чем похвастаться?))
avatar
Евгений, Согласен, тут как в авиации, важно все. Я про сложность, а не про важность. Выбор лота--это тривиальная и легкоформализуемая задача. Поиск систем--это искусство, основанное на опыте и знаниях. Одна задача много сложней другой--и логично изучатть сложную задачу, а не складывать 2+2. Имхо, конечно.
avatar
anatolyutkin, я бы не сказал, что там тривиально. Хорошая методика для ММ подчас сложнее выработки алгоритма. И эффективность такого решения выше. Одно дело управлять одной системой, другое дело несколькими (которые суммарно давали бы профит как одна, но при правильном ММ). В ММ есть далеко идущие последствия ввиде time management.
avatar
Евгений, «Одно дело управлять одной системой, другое дело несколькими (которые суммарно давали бы профит как одна, но при правильном ММ)»

еще раз прочтите сами...)
avatar
Евгений, У нас разный опыт. Хорошие системы стабильны--и ответ для не редких событий можно получать даже не марковицем--а просто делением «риска на систему» на характерный дд системы. Для редких же событий (редкие паттерны, сезонность, ООМ опционика) надо, условно говоря, результат предыдущего предложения уменьшить разика в 2-3.
avatar
Евгений, нашел это видео vimeo.com/25638210 Жаль в москве редко бываю т ту встречу я пропустил. Дискуссия была жаркая. Алексей как всегда хорош в публичной перепалке :-)
avatar
Евгений, Видео по теме! Порадовала 24 минута 55 сек. Каленкович: «Ты говоришь правильные вещи — это понятно, но понять их невозможно»! =D
avatar
Николай Флёров, строго говоря, собеседник Каленкочива спросил здравую вещь — сколько мерить в граммах. Дело в том, что ГО у опционов не лицейно, и раз мы говорим о мани менджменте, то хотели как раз услышать рассчет этой нелинейной стоимости.

Но ответить в рамках конфы на такое нереально. У биржи для этого программа продается для брокеров — ClientGO. И там вшита своя, подчас неправильно, но биржевая формула расчета ГО.
avatar
Евгений, Посмотрел, каюсь, не до конца. Минут пять--семь первых--дальше времени жалко. Имхо, банальщина, и просто удивительно, о чем там вообще говорить, тем более таким знатокам, как опционщикам. Имхо, человек, знающий теорию БШ, вещи, о которых Каленкович вещает, просто обязан не просто знать, а печенкой чувствовать. Ибо уровень теории БШ на порядок круче уровня арифметики школьной.

То, что зависимость финреза от доли имеет максимум--очевидно: anatoly-utkin.livejournal.com/7040.html второй абзац. Все это следует из простейшей формулы--финрез при вкладывании постоянной доли есть ПРОИЗВЕДЕНИЕ (а не сумма) каких-то сомножителей, поэтому задача трейдера--не умножиться на ноль. Вот и все, и о чем там говорить--не понимаю.
avatar
anatolyutkin, У нас с Вами разное понятие того, что такое стратегия. Представьте себе, что у Вас 1 рабочий вход и 2 хороших выхода — у вас уже как минимум стратегий 20. Разные тайм-фреймы, разные тикеры. разные выходы. А также, что часто совсем не понятно интуитивщикам — это то, что и разные параметры в одной и той же стратегии создают абсолютно разный денежный поток и их ретурны тоже нужно загонять в оптимизатор
avatar
При оптимизации с шагом 10 стратегий с шагом 0,01 нужно сравнить 25937424601 вариантов(если я не ошибаюсь). А мы уже поняли, что из одного входа и 2-х выходов можно составить огромное число стратегий (вернее их денежных потоков). Поэтому — не такая уж это и простая задача!
avatar
Николай Флёров, Технически я совсем не против решения задачи вашим методом. По видимому, это стандартная идея Марковица максимизировать некий функционал.

Мне не нравится сама философия. Эти величины--СКО, средняя сделка, корреляции--они ведь неустойчивы. Поэтому ваш портфель--он оптимален в прошлом. Имхо, это такая хитрая подгонка под прошлое, причем, в отличие от создания системы, ничем не подкрепленная подгонка.

Я считаю, что следует торговать много хороших систем, лот каждой из которых определять независимо от других по характерной просадке. Тогда автоматически будет правильная диверсификация. И поскольку никаких корреляций между системами не учитывается, то ММ весьма прост.
avatar
Столько расчетов (ужас), а выхлоп где и какой?
avatar
Silent Hamster, Вам ничего уже рассчитывать не придется, программа уже есть и ей можно пользоваться ;)
avatar
Николай Флёров, Это мне напоминает шахматный решатель ходов!
Да мне со своим головным компом достаточно окинуть взглядом позицию, чтобы поставить два моих любимых контракта))))) И все. Спасибо за код и программу! Только есть правило- в каждой новой программе обязательно есть ошибка!))))
avatar
Silent Hamster, В кои то веки Silent Humster со мной согласился :)
Но заметьте, при всем при этом комп вас выиграет :)
avatar
Silent Hamster, Я не обладаю супер-способностями. Вам повезло!
avatar
«Оптимизация портфеля — процесс относительно несложный»

ну да, ну да… как всегда вам придет на помощь некий гуру со своей программой. Сколько таких программ уже было, и волфикс и фиксвол )) что то не слышал чтобы те кто их пиарил (вождь) заработали на рынке )
avatar
EVG, надо вообще выключить все программы, отнести деньги в банк и успокоиться… По крайней мере до тех пор, пока лицензию у банка не отобрали :-)
avatar
Евгений, рекомендую вам это сделать… больше заработаете )
avatar
EVG, Если вы умеете работать с matlab или R — используя готовые решения — это относительно не сложно. Уровень сложности скорее зависит от того, каким из языков программирования Вы владеете. Но, как видно для меня проще работать с C#.
avatar
+++
Оптимизация портфелей — правильная задача. Просто многие игруны не доросли до нее. Зато, они с гордостью могут говорить о слиых счетах. :)))
avatar
FZF, Спасибо за поддержку.=) Да, и несколько стратегий еще нужно разработать, но видимо большинство работает с интуитивном.
avatar
Я хотел выложить еще пару примочек, но народ странно реагирует…
avatar
Спорный метод
avatar
vinipuh, да есть еще генетическая оптимизация, алгоритмы отжига и т.д. может Вы выложите, я пока только с этим разбираюсь…
avatar
Николай Флёров, Метод отжига: www.2stocks.ru/utkin/?p=681
avatar
anatolyutkin, Спасибо за ссылку, Монте-Карло это, конечно более продвинутый метод, чем я выложил, но все-таки, я не стал бы работать в этом направлении, скорее именно в тех, что я перечислил в ответе vinipuh-у. PS к тому же Вы дали ссылку на оптимизацию системы — это совсем другой разговор.
avatar
Николай Флёров, расслабся
пост хорош но метод спорный.
avatar

теги блога Николай Флёров

....все тэги



UPDONW
Новый дизайн