Николай Флёров
Николай Флёров личный блог
18 декабря 2013, 14:56

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

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


Когда мы имеем больше одной стратегии, в которых уверены, возникает вопрос каким количеством лотов торговать. На данный вопрос еще в 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/
 
Буду рад, если моя программа улучшит качество вашего трейдинга!
 
 
 
56 Комментариев
  • anatolyutkin
    18 декабря 2013, 15:07
    Задача нахождения хорошей системы на порядки сложнее задачи выбора лота. Поэтому человек, имеющий несколько хороших систем, скорее всего, достаточно мудр, чтобы справиться с выбором лота.
    • Евгений
      18 декабря 2013, 15:09
      anatolyutkin, важны все составляющие. И подход к поиску, и дисциплина в исполнении (риск-менеджмент). И выбор лота (правильное название money management). Правильные ММ увеличивает доходность алгоритма. Года 1.5 назад даже Каленкович выступал на эту тему… Вообщем все важно, даже руки мыть перед едой :-)
      • EVG
        18 декабря 2013, 15:18
        Евгений, а Каленкович зарабатывает? ) Вы так сказать как бы это помягче сказать, «прекрасные» советы даете, а как в реале с торговлей. Есть чем похвастаться?))
      • anatolyutkin
        18 декабря 2013, 15:18
        Евгений, Согласен, тут как в авиации, важно все. Я про сложность, а не про важность. Выбор лота--это тривиальная и легкоформализуемая задача. Поиск систем--это искусство, основанное на опыте и знаниях. Одна задача много сложней другой--и логично изучатть сложную задачу, а не складывать 2+2. Имхо, конечно.
        • Евгений
          18 декабря 2013, 15:26
          anatolyutkin, я бы не сказал, что там тривиально. Хорошая методика для ММ подчас сложнее выработки алгоритма. И эффективность такого решения выше. Одно дело управлять одной системой, другое дело несколькими (которые суммарно давали бы профит как одна, но при правильном ММ). В ММ есть далеко идущие последствия ввиде time management.
          • EVG
            18 декабря 2013, 15:28
            Евгений, «Одно дело управлять одной системой, другое дело несколькими (которые суммарно давали бы профит как одна, но при правильном ММ)»

            еще раз прочтите сами...)
          • anatolyutkin
            18 декабря 2013, 15:35
            Евгений, У нас разный опыт. Хорошие системы стабильны--и ответ для не редких событий можно получать даже не марковицем--а просто делением «риска на систему» на характерный дд системы. Для редких же событий (редкие паттерны, сезонность, ООМ опционика) надо, условно говоря, результат предыдущего предложения уменьшить разика в 2-3.
          • Евгений
            18 декабря 2013, 16:12
            Евгений, нашел это видео vimeo.com/25638210 Жаль в москве редко бываю т ту встречу я пропустил. Дискуссия была жаркая. Алексей как всегда хорош в публичной перепалке :-)
              • Евгений
                18 декабря 2013, 20:09
                Николай Флёров, строго говоря, собеседник Каленкочива спросил здравую вещь — сколько мерить в граммах. Дело в том, что ГО у опционов не лицейно, и раз мы говорим о мани менджменте, то хотели как раз услышать рассчет этой нелинейной стоимости.

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

              То, что зависимость финреза от доли имеет максимум--очевидно: anatoly-utkin.livejournal.com/7040.html второй абзац. Все это следует из простейшей формулы--финрез при вкладывании постоянной доли есть ПРОИЗВЕДЕНИЕ (а не сумма) каких-то сомножителей, поэтому задача трейдера--не умножиться на ноль. Вот и все, и о чем там говорить--не понимаю.
        • anatolyutkin
          18 декабря 2013, 22:48
          Николай Флёров, Технически я совсем не против решения задачи вашим методом. По видимому, это стандартная идея Марковица максимизировать некий функционал.

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

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

    ну да, ну да… как всегда вам придет на помощь некий гуру со своей программой. Сколько таких программ уже было, и волфикс и фиксвол )) что то не слышал чтобы те кто их пиарил (вождь) заработали на рынке )
    • Евгений
      18 декабря 2013, 15:29
      EVG, надо вообще выключить все программы, отнести деньги в банк и успокоиться… По крайней мере до тех пор, пока лицензию у банка не отобрали :-)
      • EVG
        18 декабря 2013, 15:31
        Евгений, рекомендую вам это сделать… больше заработаете )
  • FZF
    18 декабря 2013, 15:36
    +++
    Оптимизация портфелей — правильная задача. Просто многие игруны не доросли до нее. Зато, они с гордостью могут говорить о слиых счетах. :)))
  • Алексей
    18 декабря 2013, 21:45
    Спорный метод
      • anatolyutkin
        18 декабря 2013, 22:53
        Николай Флёров, Метод отжига: www.2stocks.ru/utkin/?p=681
      • Алексей
        19 декабря 2013, 01:10
        Николай Флёров, расслабся
        пост хорош но метод спорный.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн