Artemunak
Artemunak личный блог
16 июля 2020, 10:12

алго - протестил разный сайзинг позиций

В 2020 перешёл на тслаб 2.0, в котором наконец реализовано плавное изменение размера позиции без костылей. В связи с чем более плотно потестил разные варианты и в итоге всё оставил как есть, самый простой вариант. Но в последнее время мне кажется что я туповат и что-то упустил, так что пишу чтобы разобраться.

1. Вариант с изменением сайзинга в зависимости от цены, например если нефть упала на 10% то логично изменить размер позиции на 10%. 
В принципе использовать можно, особенно если большие плечи и там где инструменты в разы скачут, но у меня такого нет, а нефть скачет раз в 5 лет так что мало данных для норм выводов. Никакой подгонки тут нет, но и профита тут нет.

2. Вариант с изменением сайзинга в зависимости от волы. Вот вроде многие так делают, но я не заметил преимуществ, хз почему.  Для некоторых систем есть небольшой профит, но минус в том что это даёт ещё одну степень подгонки и подгонкой чего-то другого также можно увидеть виртуальный профит.

3. Сайзинг позиций по MFE — Maximum Favorable Excursion/ MAE
Идея в том чтобы быть больше в позиции в моменты где выше mfe и сокращать там где ниже чтобы освободившиеся средства отдать другим системам. Был очень позитивно настроен на этот метод, специально написал макрос в эксель чтобы посчитать mfe всех ботов. Но видимо где-то ошибся в расчётах. Тслаб не умеет показывать графики mfe\mae что довольно странно, так как почти во всём другом софте они есть, а было бы интересно глянуть их и сравнить со своими.
Получилась такая картинка для всех ботов без учёта комиссии. По оси Х время удержания, по У прибыль. Лонг-шорт цветным отдельно и верхняя линия это их сумма.
По картинке видно что теоретически профит максимален около входа и далее постепенно падает, что вполне логично.
алго - протестил разный сайзинг позиций

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

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

Сверху сильные шорты, в центре нулевая позиция, внизу сильные лонги. Столбики:
1. Суммарная прибыль в зависимости от количества ботов которые одновременно в позиции.
2. Сколько раз такая позиция была по сравнению с другими.
3. Прибыльность на один контракт поделить на 2 столбик.
4. Прибыльность на один контракт суммарная.

алго - протестил разный сайзинг позиций

Интересным моментом является то что когда все боты сильно в позициях то эффективность\прибыльность таких ситуаций большая и казалось бы выгодно быть сильно в позициях (см столбик 3). Но количество таких случаев по сравнению с тем когда боты мало в позициях заметно меньше (см столбик 2) и получается что вклад в прибыль случаев когда позиции небольшие примерно такой-же (см последний столбик) и если увеличить им сайз то то на то и выходит.

5. Что-то ещё немного тоже тестил, уже не помню, но тоже не зашло.
А вообще хочется динамический сайзинг, может кто подскажет норм вариант?
51 Комментарий
  • VladMih
    16 июля 2020, 10:24
    если нефть упала на 10% то логично изменить размер позиции на 10%
    Не сказали в какую сторону. Полагаю, уменьшить?
    Если так — не вижу в этом прямой логики.

    П.2 логичный, но очень сложный. Тут вопрос КАК использовать. Это как работа с мувингами, на которых пересечение слишком запаздывающий сигнал, после которого для входа лучше дождаться отката к мувингу (или входить ДО пересечения на сильном расхождении мувингов).
    С волой также — на максимальной увеличивать сайз уже поздно, на минимальной может быть идеально. Но для этого надо четко решить где для текущей ситуации Мах, а где Мин, т.к. они будут разными, в зависимости от «старшей» волатильности.
    В общем, очень сложно. Поэтому если не получается — надо искать.
    Я пока не нашел, но буду рыть пока есть силы )

    Про МФЕ вообще не понял.
    Этот показатель вряд ли можно использовать «в моменте».
  • Laukar
    16 июля 2020, 10:29
    Кое-где использую снижение лота когда выросла волатильность. Прирост эффективности минимальный, но вроде что-то есть.
  • Сергеич
    16 июля 2020, 10:40
    Величина стопа от волатильности, соответственно и сайз меняется. Проще некуда
    • VladMih
      16 июля 2020, 11:09
      Сергеич, это называется «фиксированный риск» — самый простой из вариантов привязки к волатильности без учета конфигурации рынка — действительно проще некуда… Уверен, что автор такой способ не только знает, а уже и забыть успел )
      Аналогичный вариант, который наоборот учитывает только конфиг рынка — стоп за экстремум и объём изменяется от размера стопа. Тоже «проще некуда», но мне показалось, что в посте о другом.

      Кстати, Artemunak, неплохо бы уточнить — вы хотите менять сайз без изменения риска или увеличивать риск в определенных условиях?
  • SergeyJu
    16 июля 2020, 10:40
    1. Трендовые системы не любят низкую волу, а многие контртрендовые может вдребезги порвать на высокой. Поэтому нет универсального рецепта.
    2. Проблема непосредственного использования волы для управления сайзом состоит в запаздывании оценки. 
    3. Предпочитаю топорный метод (много раз писал). Сайз системы обратно пропорционален амплитудной оценке риска. 
    4. Неплохо было бы при составлении портфеля (сайзинге) учитывать коррелированность результатов систем. Но тут есть сложности и я для себя эту задачу решенной не считаю.
    5. Рядом стоит задача обнаружения слома систем. Чисто теоретически, есть математические методы обнаружения разладки (смены режима). Практически они не очень-то подходят для нас.
    • T-800
      16 июля 2020, 12:00
      SergeyJu, а такой вариант — уменьшение сайза после серии успешных сделок и увеличение после серии неудачных. 
      • SergeyJu
        16 июля 2020, 12:24
        Мейстор Эймон, не практикую
    • bascomo
      15 августа 2023, 11:32
      SergeyJu, п. 4 решился? :)
      • SergeyJu
        15 августа 2023, 14:04
        bascomo, скорее да, чем нет. При явной оптимизации весов элементов портфеля (без всяких корреляций) учет взаимного влияния систем происходит автоматически. Другое дело, что такой подход почему-то не сделали священной коровой теории портфеля и да, риски все равно не убить, только понизить, на любую гайку природа найдет поц с болтом. 
        • bascomo
          15 августа 2023, 14:07
          SergeyJu, а в чём заключается оптимизация и на основании чего производится?
          • SergeyJu
            15 августа 2023, 14:16
            bascomo, я максимизирую отношение доходности эквити портфеля к риску. Задача слегка нелинейная и чуток неустойчивая, а так — все в порядке. Кстати, на этом сайте 2 или три раза писал об этом в своем блоге. 
  • GOLD
    16 июля 2020, 11:00
    С научной точки зрения, НИОКР на тему динамического сайзинга имеет смысл проводить, если выявлена зависимость результатов от волатильности или от цены актива.

    В вашем случае такая зависимость выявлена?
  • А вообще хочется динамический сайзинг, может кто подскажет норм вариант?

    А самый простейший не рассматриваете? — сайз в зависимости от риска в сделке? Типа рискуем 0,5-2% от капитала в одной сделке)
  • wrmngr
    16 июля 2020, 11:50
    Проще разбить одну стратегию на ансамбль подстратегий с разными параметрами и чуть различающимися входами выходами. Такая декомпозиция даст больше понимания. А непрерывное изменение загрузки это уже ближе к опционной математике дельтахеджа для некого профиля ПнЛ
  • Serj90
    16 июля 2020, 11:52
    Я конечно дилетант в алготрейдинге, только первые шаги делаю на этом поприще, но вдруг автор что-то полезное из такого подхода почерпнет. Рассматривался ли вариант сайзинга по статистике последних сделок каждым ботом в отдельности? Еще лучше на мой взгляд использовать комбинацию с процентом убытков/прироста относительно портфеля. Условно, если бот начинает пилить маржу, то оценка размеров след сделок делается с поправкой на некий процент в меньшую сторону, если и эта сделка провальная, то след сделка снижается уже не линейно, а в геометрической прогрессии. Аналогичный алгоритм и выхода из пилы, когда каждая последующая сделка выходит в плюс, то сайз растет не линейно, а также в геометрической прогрессии. При этом геометрическая прогрессия включается только между сделками А+1 и А+2, а между сделками А (последняя закрытая) и А+1 изменение размера входа осуществляется линейно. При этом мы имеем гибкость в вопросе момента включения геометрической прогрессии, на пример после очередной убыточной сделки А+4. Таким образом можно гораздо плавнее подходить к пороговому убытку по портфелю (например 2%) при котором (если так заложено) бот останавливается вовсе. А может я и чушь написал, и у автора гораздо глубже проблема((

    UPD. геометрически увеличивается/уменьшается не сам сайз, а процент на который мы уменьшаем или увеличиваем сайз.
      • Serj90
        16 июля 2020, 12:07
        Artemunak, понял, спасибо.
      • SergeyJu
        16 июля 2020, 12:31
        Artemunak, на самом деле, если для каждой системы использовать подход типа Р.Джонса или Л.Вильямса, все будет не так уж и плохо. 
  • robot_bsk
    16 июля 2020, 12:00
    smart-lab.ru/blog/631499.php
    Пятно параметров торгует эффективнее. Мини-отчет за второй квартал 2020 года
    Так сайзинг очень плавно изменяется, если 1000-2000 систем виртуальной торгуется
    • SergeyJu
      16 июля 2020, 12:28
      robot_bsk, пятно параметров как правило очень сильно скоррелировано с каждым своим членом. Для повышения емкости и даже устойчивости пятно — это хорошо. Поставленную задачу не решает. Потому что замена N систем на N пятен оставляет нас перед тем же вопросом, как делить объем на N долей. 
      • robot_bsk
        16 июля 2020, 13:46
        SergeyJu, для этого делается корреляционная матрица и задаются веса системам в зависимости от корреляции
        • SergeyJu
          16 июля 2020, 13:54
          robot_bsk, что такое ковариационная  матрица я знаю уже лет 40 примерно. Напишите что-то более содержательное, а то Вы даже до Марковица, похоже, не добрались в познании мира.
          • robot_bsk
            16 июля 2020, 13:58
            SergeyJu, зачем усложнять? Корреляция со временем при форвардном тестировании почти не изменяется 
          • robot_bsk
            16 июля 2020, 14:08
            SergeyJu, смотреть с 38:17 
            Как я задаю веса системам
            • SergeyJu
              16 июля 2020, 16:17
              robot_bsk, спасибо.
              Просканировал до Луа. Выделил два пункта, фильтр и взвешивание. И то и другое обозначено, но не раскрыто. Фильтрами я тоже порядочно занимался. Что касается весов. Вы учитываете только коэф-ты корреляции или что-то еще. Например, доходности или оценки рисков?
              Работает ли Ваша формула в случае очень неоднородных систем, допустим, трендовой и контртрендовой.
              • robot_bsk
                16 июля 2020, 16:41
                SergeyJu, По поводу весов: я использую оценку рисков. Все системы, что есть привожу к одинаковому максдровдауну на истории. Мне нравиться цифра -35%. Когда все системы одновременно тестирую, то на истории получается — 20%. При этом доходность — средняя по всем системам, т.е. MAR и sharp порядочно растут.
                По поводу неоднородных стратегий: можно тоже применять корреляционную матрицу, в случае незначительного изменения корреляции во времени при форвардном прогоне.
                Все четко по формуле Анатолия Уткина https://russian-trader.com/content/205/?page=2
                • SergeyJu
                  16 июля 2020, 17:15
                  robot_bsk, а почему именно макДД — оценка риска? 
                  • robot_bsk
                    16 июля 2020, 17:28
                    SergeyJu, Ну в каждой системе у меня манименеджмент — риск на сделку в %. Это в принципе тоже параметр, прогоняю на истории этот параметр и делаю его константой — максдравдаун -35%. Понятно, что некоторые системы из 2000 этот дравдаун по ходу торгов пробивают и могут дойти и до -60%, а следить за 2000 систем — нереально. Но на этот случай я сделал степенное уменьшение сайза на основе комментариев того же Анатолия Уткина в статье Управление капиталом портфеля алгоритмических стратегий. https://smart-lab.ru/blog/419603.php

                    В
                    от как это выглядит



                    • SergeyJu
                      16 июля 2020, 17:32
                      robot_bsk, получается прямо-таки иерархическая система управления рисками. 
                      • robot_bsk
                        16 июля 2020, 17:37
                        SergeyJu, Ага, для меня риск важнее, чем прибыль.
  • Reznor
    16 июля 2020, 13:15
    Зачем искать профит там, где его нет? Управление сайзом — это прежде всего управление соотношением риск/доходность. Что является мерой риска? — волатильность. Все логично и очевидно. Поэтому многие и выбирают 2 вариант. Нет смысла заново изобретать велосипед.
    • SergeyJu
      16 июля 2020, 13:56
      Reznor, волатильность чего именно является мерой риска, как Вы полагаете? 
      • Reznor
        16 июля 2020, 13:59
        SergeyJu, волатильность цены торгуемого инструмента является мерой риска, оно же — стандартное среднеквадратическое отклонение.
        • А. Г.
          16 июля 2020, 14:13
          Reznor, ничего подобного. Для распределений с «тяжелым» «правым хвостом» и «легким» «левым» СКО мерой риска совсем не является. А у трендовых систем распределение доходностей за период, как правило такое. А в конце концов при системной торговле нас интересует риск системы и связь его с СКО цен далеко не предопределена.
          • Reznor
            16 июля 2020, 14:51
            А. Г., а это уже смотря какую систему торговать и на каких временных интервалах. Впрочем это всё нюансы. Как измерять волатильность и риск, каждый решает сам.
          • Kot_Begemot
            16 июля 2020, 18:40
            А. Г., а что для них является мерой риска, если не СКО?
            • А. Г.
              16 июля 2020, 22:33
              Kot_Begemot, ну вариантов много, но это должны быть характеристики отрицательных результатов. Например, риск по Сортино (корень из среднего квадратов отрицательных значений с заменой положительных на нуль), VAR или СVAR, среднее нескольких просадок (максДД в силу единичности не подходит) и т. п. вещи.
              • Kot_Begemot
                17 июля 2020, 01:53
                А. Г., странно, но у меня на бектестах (рынок) и моделях (случайный независимый сильноскошенный шум) разницы, тем более явно положительной, нет. 
                • А. Г.
                  17 июля 2020, 10:24
                  Kot_Begemot, вот гистограмма 21-дневных доходностей одной моей системы на Газпроме с октября 1998 (слайд из лекции учебного курса, посвященной тестированию торговых алгоритмов)


                   На базе этого слайда я объясняю почему СКО показателем риска для такого распределения не является. 

                  PS. Это эквити, построенная по сделкам системы плюс проскальзывание по чистому out of sample, оптимизации нет.
  • А. Г.
    16 июля 2020, 14:09
    Долгое время торговал с реинвестированием, т. е. объем позиции, открываемой по i-й системе «сегодня» равен округлению вниз до целого

    СЧА на конец предыдущего дня*долю i-й системы/цена лота(контракта) по закрытию предыдущего дня.

    Объемы в открытых ранее позициях запоминались в Excel для стоп-лимитов «сегодня».

    Но когда писал своего робота, чтобы не перегружать программу, стал торговать постоянным число лотов (контрактов) до изменения цен закрытия на 10%+ с момента предыдущего расчета, который делался по указанному правилу. Новый расчет также делается по указанному правилу для реинвестирования.

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

    А реинвестирование для систем считаю правильным: с ростом счета оно увеличивает прибыль, а с уменьшением — уменьшает просадки. Так как «в деньгах» в первом случае новая позиция растет, во втором — падает. 

    Другими правилами изменения объемов никогда не пользовался. Использовать волатильность для трендовых систем бессмысленно, так как на высокой волатильности больше прибыль и риски при торговле с реинвестированием, а при низкой — наоборот. Но риски я априори выбираю по всей истории и потому самые высокие учтены. По хорошему при низкой волатильности доли систем для вышеуказанного расчета надо бы увеличить, но у меня нет прогноза волатильности лучше, чем волатильность «вчера»= волатильность «завтра» и скачок волатильности будет нести в себе неконтролируемые риски.

    А, как я уже сказал, реинвестирование при изменении СЧА счета само по себе «выправляет» объем позиции «в деньгах».
  • Lagamail
    16 июля 2020, 14:20
    Artemunak, какая конечная цель тестирования вараинтов управления размером позиции.

    Например, цель привести портфель к заданому риску/волатильности. Каждый метод может быть лучше только под конкретные задачи.
  • Антон Иванов
    16 июля 2020, 14:32
    Больше половины моих ботов работают со 2-м вариантом управления позицией. Доходности это совсем не прибавляет, но эквити выравнивает неплохо, я во всяком случае доволен. Сплю гораздо спокойнее :)
  • MS
    17 июля 2020, 09:43
    По 2. Это работает, но только в том случае, если при этом «угадали» направление тренда. То есть нужен другой критерий кроме волатильности.
    И в моей системе я считаю её так, что запаздывание не играет отрицательной роли.  Даже чуть ещё выждать лучше для результатов. Выясняю почему.

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

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