Как я распределяю капитал по позициям

30.07.2023 palmax

Как я распределяю капитал по позициям

В этом посте (лонгрид):

  1. Как я управляю капиталом сейчас
  2. Какие варианты управления капиталом я собираюсь тестировать/применять

 Термины и определения

  • ТА — торговый алгоритм. Кусок кода или набор правил, по которым определяется точка входа в сделку / выхода из сделки
  • ИД — идеальная доходность с методикой расчёта, варианты описаны в моём посте, в посте Sprite или в посте Buybuy. Эту идею я уже публиковал больше года назад, но прошлое забыто.
  • ДТА — доходность торгового алгоритма

Простейший способ

До последнего времени я не усложнял себе жизнь распределением капитала. В соответствии с моими правилами, риск на позицию должен быть меньше 3% от депозита, и это означает, что я должен иметь как минимум 33 позиции с разными ТА на разных инструментах. Поскольку я всегда использую таймфрейм M1, то акцентирую на этом внимание и дальше упоминать про таймфрейм не буду. Ещё раз скажу, что я использую M1 по той причине, что он даёт наиболее высокую доходность и теоретически меньшие просадки. Доходность выше достигается, похоже, только HFT-техниками внутри стакана.

Таким образом, число позиций для меня определяется как число уникальных комбинаций инструмент-ТА. Кому-то нужно будет добавить TF.
Определившись с приемлемым риском на позицию, я могу рассчитать нужный размер капитала исходя из числа позиций, или нужное число позиций исходя из размера капитала, которым я хочу торговать.
Однако, есть ещё одно ограничение — это минимальный размер лота, определяемый правилами биржи. В общем случае, размеры всех позиций должны быть равны, и это значит, что я должен установить минимальным размером позиции максимальную стоимость лота торгуемых инструментов.

Для примера я буду рассматривать активность на Binance.
Самый дорогой инструмент там — BTC. Минимальный разрешенный размер лота BTC составляет 0.001, а используемое плечо — 10. Поэтому, минимальную стоимость позиции для всех ТА я определяю как стоимость BTCUSDT 30000 * лот 0.001 и / плечо 10, что = 3. Поскольку цена BTCUSDT сейчас близка к 30000 и иногда заходит выше, я использую значение 3.5.

Число фьючерсов, которые я торгую, = 11. Это ADAUSDT, BCHUSDT, BNBUSDT, BTCUSDT, ETCUSDT, ETHUSDT, LINKUSDT, LTCUSDT, TRXUSDT, XLMUSDT, XRPUSDT.
На каждый фьючерс я подбираю одно и то же число ТА, которое равномерно делится на Long- и Short- алгоритмы.

Я перестал использовать переворотные ТА, которые закрывают long и тут же входят в short и так далее, находясь при этом всё время в рынке, по той причине, что бэктесты этих алгоритмов иногда не воспроизводимы. В зависимости от того, в какое время я начинаю тестирование, входы могут различаться, потому что точек входа может быть несколько, и причина в этом. Другой аспект состоит в том, что, улучшая что-то в лонговых ТА, я одновременно ухудшаю шортовые. Разделение ТА отдельно на лонговые и шортовые, такая их специализация, делает торговую систему более управляемой и предсказуемой. Кроме того, проще анализировать результаты как тестов, так и реальной торговли и точно вносить изменения в состав работающих ТА, просто отключая плохие. Последнее даже более важно для меня.

Для игр и тестов я выделяю объём депозита в 1000.
Определяю, сколько нужно выделить на инструмент, их у меня в данном примере 11: 1000 / 11 = 90.
И рассчитываю нужное мне число ТА. Делю на 2 (лонг+шорт) и на минимальный размер позиции, который был рассчитан ранее:
90 / 2 / 3.5 = 12 (тут округляем до целого вниз, поскольку нельзя торговать половиной ТА).
Таким образом, мне нужно 12 лонговых ТА и 12 шортовых ТА на каждый инструмент.
Суммарное число ТА = 11 * 12 * 2 = 264 ТА.
Проверяем: 1000 / 264 = 3.79, что примерно соответствует значению 3.5.
В реальности будет использоваться несколько меньший объём депозита суммарно, потому что размер позиции на открытии определяется шагом лота.
Кроме того, не все ТА будут в рынке в моменте и часть депозита не будет задействована. Поэтому то, что 3.79 > 3.5, в данном случае является нормой.

Риск на позицию в моём случае составляет 3,79 / 1000 = 0,379% и он даже несколько завышен, как следует из изложенного выше.
Так моя ТС работает в настоящее время.

Динамические техники

Недавно Тимофей задавался вопросом о динамическом распределении капитала по позициям. В прошлом году, когда мы встречались с ICWiener в Петербурге, я слышал от него тот же вопрос-идею, что хорошо бы динамически регулировать размер входа. Тема регулярно всплывает в околотрейдерской тусовке, но дальше фраз «вот бы хорошо…» дело не идёт, или вы всё скрываете. Попробую порассуждать, что тут можно сделать, но сразу хочу отметить два следствия, вытекающие из идеи динамического управления капиталом:

  1. Придётся проверять перед каждым входом в сделку, достаточно ли у меня свободного капитала, чтобы её совершить и, возможно уменьшать размер позиции, чтобы открыть хоть что-то, если на рассчитанный объём средств недостаточно.
  2. Ожидаю, что абсолютная прибыль должна вырасти, так как динамическое управление капиталом должно привести к более полному использованию депозита, его утилизации, это предстоит проверить.
  3. Как будет изложено далее, я планирую увеличивать или уменьшать долю капитала на позицию в интервале -25%..+25%, поэтому я не превышу свои ограничения по максимальному риску на позицию (нюансы опущу), но эти вещи нужно внимательно отслеживать.

Заход с точки зрения ИД

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

Размышления у меня такие. Есть некий инструмент, и наш ТА, поторговав на истории, показал некую кривую доходности. Очевидно, что она нам не нравится в тех местах, где она загибается вниз. Но откуда мы знаем, что и по инструменту в целом в такие моменты прибыльность не падает, а потому и поведение нашего ТА закономерно и нормально? Я имею ввиду, что когда мы смотрим на кривую, которую выдал нам наш ТА, в отрыве от того, что в реальности происходило с инструментом, а потом ещё накручиваем на это кучу разных метрик, большей частью, к тому же, бестолковых, то мы как бы смотрим через несколько кривых зеркал. И возникает сооблазн решить, что ТА «протух», да здравствует новый ТА. Меж тем, ТА может быть совершенно прекрасен, а проблема с инструментом.
Заголовком этого раздела я как бы намекаю способ решения этой проблемы. Нужно сравнивать кривую ДТА с кривой ИД. И не просто сравнивать, а считать корреляцию. Если она есть и она положительна и велика, ТА работает прекрасно, невзирая на его доходность относительно размера рабочего капитала. Этот метод оценки работоспособности ТА, который на днях пришёл мне в голову, конечно, нужно протестировать. Но логично, что если мы стремимся к ИД, то наш ТА должен повторять кривую ИД, пусть и в 10% объёме.
Второй метрикой я хочу посчитать корреляцию ДТА с ценой актива и изучить эти данные. Гипотеза состоит в том, что эта корреляция должна быть низкой или отсутствовать, а если она есть и положительна, то ТА зарабатывает на трендовом росте рынка и теряет в остальных случаях, ну, то есть, проще было купить и держать. А если она положительна на трендовых нисходящих движениях — то это так же плохо, как вытекает из изложенного.
Поэтому, с точки зрения принятия решения о работоспособности ТА в принципе, хорошо бы скорректировать его кривую доходности на идеальную доходность, а потом считать всякие шарпы. Мне можно оппонировать, что живём-то мы в реальной жизни, и просадки должны учитывать реальные, а не скорректированные. И это верно, но управляйте этим, диверсифицируя портфель, а не рубя голову ТА, который, возможно, не так уж и плох. В конце концов, все ТА временны (если вынести за скобки оптимизацию), но неприятно выбросить рабочий ТА, а потом обнаружить, что он не ломался.

Способ 1: распределение капитала по приведённой доходности ТА

Он состоит в том, что нужно посчитать ДТА по отношению к ИД по каждому ТА и нормировать к 100% обычной пропорцией. Получу веса для каждого ТА и могу распределять капитал между ТА согласно этих весов, с дискретизацией по лотности. Но это довольно сложно, поэтому подумал об упрощённом варианте.

Он заключается в следующем: нужно создать таблицу, в которой для каждой комбинации инструмент-ТА нужно будет определить три варианта объёма входа: пониженный (-25%), нормальный и повышенный (+25%). Из полученной в предыдущем разделе доходности ТА нужно составить список и отсортировать его в убывающем порядке по размеру доходности ТА. Разделить список на три приблизительно равные группы. Верхнюю торговать с повышенным объёмом из созданной таблицы, среднюю с нормальным, а нижнюю — с пониженным.

С учётом моего подхода, описанного здесь, расчёт ДТА и ИД я буду осуществлять на основании размера окна, предшествующего началу торгов, как это описано в посте. Протестирую на днях.

Вероятно, для этого метода не подойдут ТА, доходность которых не коррелирует с ИД. Такие ТА я думаю пометить как ТА второго эшелона или вообще отправить на скамейку запасных, поскольку у меня их в принципе овердохера.

На картинках видно: доход по инструментам и доход по ТА (на первой доход отображается суммарно, на второй цвета определяют длинные ТА короткие ТА). Такие вот разбросы в доходности толкают меня в пользу упрощённого варианта, либо нужно вводить дополнительные ограничения на размер капитала на позицию, чтобы не нарушить принципы по рискам, что усложнит подход.

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

Если ТА открывает лонг на инструменте, на котором установился длительный восходящий тренд, вероятность того, что эта сделка закроется в плюс, выше. Поэтому я протестирую эту гипотезу, а так же зеркальную, по нисходящим трендам, как само утверждение, так и результаты торгов, если его применить. По сделкам, открываемым в направлении тренда, устанавливается повышенный объём. По всем иным, в том числе, флэт — нормальный, но можно так же рассмотреть понижение объёма для контртрендовых сделок так же при установившемся тренде: если на восходящем тренде ТА открывает шорт, то установлю пониженный объём.

Способ 3: расчёт вероятности успешности позиции при открытии и коррекция размера на её основании

Несколько раз я использовал ML и DL в трейдинге. Сама по себе технология отлично справляется, если не пытаться забивать гвозди микроскопом. Моя первая итерация классифицировала точки входа для длинных и коротких сделок с точностью 85-92%. Почему я тогда не запустил это? Причин было две: сложность архитектуры и то, что я не сумел сбалансировать сеть. Но выводы, которые я сделал, говорят о том, что технология прекрасно справляется с задачами классификации и регресса. Просто не нужно заниматься ерундой и пытаться предсказать цену. НС и это сделать в теории смогла бы, но у вас просто нет формализованных данных, которые нужно ей для этого скормить, а-ля: кто что подумал, какие новости опубликовали, куда побежала толпа и мозг каждого в отдельности, какие решения приняли киты и какие у них сейчас объёмы и позиции и что они собираются делать.

В марте был заход № 2, когда я поторговал фьючерсы МосБиржи на истории. Большинство позиций оказались прибыльны и размеры этой прибыли были прекрасны с точки зрения инвестора, но не спекулянта (5-15% в месяц), и меня абсолютно не устроило метание кривой доходности вверх-вниз по каждому инструменту. Это было полезное упражнение с целью освежить знания по нейронным сетям. Думаю, тут всё может быть успешно, если добавить фильтры. Но, если добавлять фильтры, зачем городить огород с нейросетью? Выгоды счёл сомнительными, убрал пока эту поделку на полку.

В данном случае я хочу протестировать не торговлю по командам нейросети, а рассчитать с её помощью вероятность успешности сделки для конкретного ТА. На вход уйдут векторы о наличии или отсутствии тренда, о совершенных ранее в таких же обстоятельствах сделках и их результатах, и самих этих обстоятельствах, в привязке к инструменту и ТА. На выходе будет один нейрон, который будет выдавать значение 0..1, которое будет являться вероятностью успешности сделки. Эта информация будет использоваться только для определения размера входа. Нейросеть — простой регресс, 4-5 слоёв, до 500-700 нейронов в слое, со слоями нормализации и защиты от переобучения, линейная.

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

В чём принципиальная разница? Во-первых, в том, что точки входа и выхода не будут определяться нейронной сетью. Во-вторых, на вход добавляется информация об успешности/неуспешности сделки конкретным ТА в конкретных условиях. Будем посмотреть на то, что получится. Это не то, чтобы сложная, но трудоёмкая работа, поэтому не в ближайших планах.

Заключение

Хочу отметить, что во всё, вышеописанное, можно добавить нелинейность — например, только увеличивать долю капитала на позицию, или только уменьшать. Кроме того, можно изначально внести дисбаланс в размеры позиций по ТА с использованием таблицы, упомянутой выше, таким образом создав изначально дисбаланс, и в дальнейшем организуя работу системы в рамках него. Наверняка можно выделить критерии и разбить ТА на группы по доходности и по надёжности. Можно отключить управление капиталом для ТА вторых эшелонов, используя для них всегда нормальный объём входа.

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

Ну а как управляете капиталом вы?