Блог им. bosco

Управление бюджетом и просадкой нескольких роботов на одном счёте

    • 19 июля 2017, 12:19
    • |
    • П М
  • Еще
Для начала загадка: предположим есть у вас 3 робота, с просадками 30%, 50% и 70%, ну естественно они прибыльные и profit factor что-то там порядка 1.7. При этом эти данные для полного рефинанса и на интервале в 2 года. И надо вам получить
а) максимальное использование средств портфеля
б) максимальное рефинансирование
в) суммарную просадку не более 13%

загадка в том, как это правильно сделать?

Я назвал это загадкой, а не вопросом, потому что я наконец-то понял как, спустя несколько лет. До этого я пытался выжать из роботов максимум, и использовал как мне казалось передовую технологию: отдавал роботам ~90% от доступного бюджета, таким образом чтобы роботы имели возможность выбирать весь бюджет (0.9 + 0.09 + 0.009 — типа того), с целью, естественно — максимального возможного разгона депозита. получалось кто первый встал, того и тапки. Для двух роботов всё просто, а когда их было штук 7, то уже были всякие сложности.

Иногда у меня неплохо получалось, в 2014м я довольно мощно разогнал робота со 184 тыс до 1300 тыс с января по сентябрь. Потом ещё немного заработал. А потом получаться уже перестало. И дальше я занимался решением разного рода «философских» проблем, типа почему на истории миллиарды, а в реале просадка, и почему роботы пилятся быстрее, чем зарабатывают.

В итоге только несколько дней назад меня наконец-то «озарило», какой-то нейрон наконец пробурил свой дендрит куда надо. Как обычно для «озарений», логика оказалась простейшая. Просто чтобы понять почему она такая и не иначе, понадобилось много времени.

В комментах попозже расскажу, какое же я придумал наконец решение этой проблемы. Заодно провалидирую, если вдруг ещё чего не учёл.
★6
30 комментариев
и… интересно…
avatar
ну и где ответ?
avatar
Denis, я думал кто-нибудь хотя бы попытается угадать?
avatar
ПBМ, ну подождем ;) может кто попытается…
avatar
Самый простой портфельный подход. даем каждому роботу по одинаковой доле риска. Если верим в наличие некоторой расфазировки убытков примерно по 5%, если не верим, по 13/3=4,3%. Неважно, считаем далее для 5%.
Первому роботу даем 5/30=16,7% от счета, второму 5/50=10% от счета, третьему 5/70=7,1% от счета.
Итого, грубо, 35%. На остальное покупаем облигации. При каждом новом максимуме счета восстанавливаем соотношение путем новой покупки облигаций.
Все более сложные методы требуют исследования совместного распределения эквити роботов. 
avatar
SergeyJu, кстати это интересный момент — чем занять чудовищный остаток, спасибо!
avatar
вобщем так, немного воды, т.е. истории, сори.

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

вопросы просадки, да, изучались, но казалось что просадка в 30% — это мелочи, по сравнению с теми возможными профитами, которе будут у роботов. 
но в реале просадки доходили до 70% (с восстановлением). и каждый раз возникала мысль — ну почему же мои роботы так сильно пилятся?

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

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

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

ключевая точка была — когда я нашел ГЛАВНУЮ ошибку.
мне казалось, что если два робота просаживаются на 70% каждый, то дать каждому по 1/2 бюджета, значит уменьшить суммарную просадку напополам. я даже не проверял, казалось верным. но не тут-то было.
на самом деле если 1 робот просаживает полный бюджет на 70%
и второй робот просаживает полный бюджет на 70%, то вместе, просадив свои пол бюджета на 70% они просадят полный бюджет на теже 70%.

отсюда вывод сразу — что перехлёсты бюджета, когда одному роботы даётся более чем 1/N бюджета — не правильно! это повышает риск выше, чем его максимальная просадка, пропорционально разнице между его бюджетом и 1/N

ок, дальше проще. если максимум для одного робота это 1/N
то чтобы получить просадку в 13%, надо взять максимальную историческую в 70% и выдать роботу бюджет в 
13/70, вуаля.

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

итого бюджет робота должен быть
МИБ* МДП / (МИП * N) 
где
  — МИБ — максимальный бюджет на истории, считается для суммы роботов в динамике, просто некий X
  — МДП — максимально допустимая просадка для общего бюджета
  — МИП — максимальная историческая просадка для этого робота
  — N — количество ваших роботов

из этого кстати есть интересные выводы:
если у вас 1 робот даёт просадку в 40% и ваша комфортная просадка в 20%, бюджет робота 1/2 = 50% депозита
если есть другой робот, менее успешный, с просадкой 50%
то его бюджет (одного) должен быть 2/5 = 40%

если запустить их вместе, на 90% депозита, они просадят баланс в худшем случае на 20 + 20 = 40%!

бюджеты когда они запущены вместе должен быть 25% + 20% = 45%, против 50% загрузки бюджета для одного робота.

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

зачем всё это надо? теперь, имея формулу,  я могу добавлять и убавлять роботов в «коллектив» и видеть как они работают в толпе при полном рефинансировании _по_честному_, с любой начальной суммы бюджета и на любом куске истории.
avatar
если запустить их вместе, на 90% депозита, они просадят баланс в худшем случае на 20 + 20 = 40%! 

так не получается комфортная просадка 20%
avatar
Max, именно, не получается, поэтому вместе надо запускать не на 40+50=90%, а на 20+25 = 45% бюджета, тогда просадка будет 20%
avatar
 а почему нельзя посчитать допустим дневные доходы каждого робота, потом посчитать суммарную эквити (весь портфель роботов) и потом оптимизировать (макс. коэф. восстановления) количество торгуемых контрактов у каждого робота. 
avatar
можно оптимизировать по максимальной доходности при заданной просадке портфеля, но нужно что бы были роботы с просадкой меньше чем заданная для оптимизации. Возможна ситуация что некоторые роботы останутся не у дел. 
avatar
Max, я много раз принимался за решению портфельной задачи, как раздать веса на N систем так, чтобы получить в каком-то смысле наилучшую эквити. Можно искать максимум доходности при фиксированной максимальной просадке, можно, наоборот, зафиксировать доходность и минимизировать просадку. Можно пользоваться квадратичными мерами риска. Монте-карло — и ни в чем себе не отказывай. Потом можно наблюдать за результатом портфеля. Вывод следующий. Все эти подходы дают неустойчивые решения. Одновременная оптимизация и доходности на максимум и риска на минимум получается, не очень понимаю почему, оверфиттингом. И самый простой метод, некогерентное выравнивания риска по системам, дает наиболее устойчивый результат. Единственное, что к этому стоит добавить, что все мои системы зарабатывают на трендах. Пусть на разных инструментах и в разных таймфреймах. Возможно, для более разнообразной выборке из систем результаты были бы иными.
avatar
SergeyJu, спасибо за полезные заметки!
avatar
вроде формула рабочая. только в такой модели вы закладываете риск что максимальные просадки по роботам реализуются в один момент. На деле же они реализуются в разные моменты времени, т.е. есть некая диверсификация. 

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

Насчёт всех роботов да, согласен, как раз этот инструмент позволяет посмотреть, каких роботов добавлять не стоит.
avatar
ПBМ, рад что удалось решить задачу, успехов вам, коллега!
avatar
Max, спасибо, взаимно!
avatar
можно дополнительно взвесить бюджеты роботов по просадке
т.е. для случая когда первый проседает на 40, второй на 50
средняя просадка будет 45%
соответственно первому надо дать не
25%, а 
25 * 45 / 40 = 28.125%
а второму не
20%, а
20 * 45 / 50 = 18%
тогда бюджет будет загружен на
46.125% вместо 45% без доп. взвешивания.
а просадка, насколько я могу судить, станет хуже на 0.25%
28.125 * 40 + 18 * 50 = 20.25%

avatar
управление капиталом прочитать не?
avatar
Что ты  делаешь, когда робот достигает своей макс. просадки? (Любая торговая система, по мере своей жизни, обновляет макс. просадку несколько раз, перед тем как окончательно сдохнуть. Это так… на подумать=))
avatar
SenSoR, у меня в отличие от тебя ни один робот больше полугода пока не прожил. я ещё только учусь.
обычно примерно на 50% просадке я робота выключаю.
некоторые потом восстанавливаются. 
как раз вчера лазил по архивам, нашел, что эта эпопея с роботами (а она была второй и удачной) началась у меня 4 года назад в июле. так вот, есть один робот от апреля 2014, который просел где-то на 56%, но потом восстановился и сейчас просадка у него 0%
но это я по истории смотрю, в реале я его использовал месяца три, не больше. сейчас у меня более прибыльные варианты, как мне кажется. 

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

вообще у меня опять же в отличие от тебя счёт болтается куда сильнее, примерно как у тебя в начале, просадка реально достигает 70%, поэтому он стоит на месте последние три года, исправно кормя брокера комиссом.
и только большая работа кипит и надежда теплится :)

получается моя проблема была в выкрученном по максимуму риске.

после применения формулы появилась уверенность в просадке, надо посмотреть месяца два, и можно пробовать досыпать немножко денег.
avatar

ПBМ, мораль такова, что три бота с просадками 30%, 50% и 70% на тестах, в реале обязательно обновят свои макс просадки. Пусть не все три сразу, а по отдельности. Может так статься что они все могут выровняться, показав 70-70-70. Поэтому я считаю, что лучше всем ботам давать одинаковый бюджет, потому что тесты — это одно, а реал — уже совсем другое) (я, например, отталкиваюсь от макс просадки и свожу всех ботов под одну макс просадку, т.е. что бы у всех она была одинакова. Ну а сколько заработают — столько заработают)

А выключать бота, когда он дошел до 50% своей макс просадки, да даже если обновил её — это хороший способ сгубить хорошую систему) Важна не столько макс просадка системы, сколько её рекавери фактор!

Ну и, для пущей диверсификации, системы должны быть разные: 
1. Трендовые.
2. Импульсные.
3. Контр-трендовые.

avatar
SenSoR, мои контр-трендовые самовыпилились после НГ чего-то. сейчас восстанавливаются. в планах их переделать.

помнишь был «разговор», как определить что робот «сломался»? ведь надо понимать, где разница между «обновил свою просадку» и «что-то пошло совсем не так»

а мысль(и) твою понял, спасибо!
avatar
ПBМ, Угадай, почему эта страта у меня всё еще в боевом строю?)



avatar
SenSoR, у тебя это ведь без рефинанса, судя по линейности, так?
тогда наверное твой подход правильный по выбору максимальной просадки. а я свои тестирую со 100% рефинансом, и получается до 45% просадка на последних 2.5 года, 75% на последних 5.5 лет. глубже пока бросил тестировать, но там наверное ещё побольше, хотя заканчивают всё равно с плюсом.

может я неправильно делаю, что определяю просадку с рефинансом, хз.

а так, 30% просадка это вообще мелочи, наверное ты её не бросаешь, потому что у остальных такие просадки были ещё раньше на графике? интересен твой ответ!

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

и вот он же, без рефинанса
тоже порядка 34% просадка

но график конечно хуже твоего… видимо всё-таки сломался, так?

цифры слева — это прибыль в %, на первом графике — тоже :)
т.е. порядка 400% он даёт при бюджете в 7 контрактов, т.е. около 35 тыс (зависит от ГО)

временной ряд — 2.5 года
avatar
SenSoR, exposure 3% означает что твои роботы торгуют всегда на 3 тыс в тесте? или вначале на 3 тыс, в конце на 27 тыс? 
avatar
ПBМ, У моих роботов всегда разный объем входа в сделку ( в зависимости от многих факторов). И да, торгуют в основном без реинвестирования, т.к. инвесторам важна линейность результата, и плавность эквити и просадок. Такие «заезды» далеко за макс. зону просадки бывают у некоторых, и это не повод думать, что система сломалась. Просто на рынке появляется какой-то форс-мажор, к которому бот может быть не готов и начинает терять больше обычного. Как правило, такие моменты редки, после чего эквити у нормальной тс начинает резко выравниваться, а у сломавшейся тс начинается период «плато» или, что хуже, планомерное пикирование вниз))
avatar

Добрый день. Разрешите встрять, как говорится… )
У меня принципиальный вопрос. А почему тестирование обычно ведется с полным рефинансированием?

В реале же так не происходит. Часть прибыли мы выводим. Иначе в для чего в обще этим заниматься?!

Тогда зачем тестировать с полным реф.?

avatar
Maximus, так проще увидеть максимальную возможную просадку с любой точки отсчёта.
avatar

Да. С этой точки зрения я еще не смотрел. Согласен, при полном реинвестировании все экстремумы станут более явными.

Но все равно, тестирование с одинаковым количеством контрактов в каждой сделке мне кажется более близким к реальным событиям. Думаю, такой подход тоже не стоит исключать?

avatar

теги блога П М

....все тэги



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