Всем привет!
Год назад мне стало интересно, можно ли заработать на крипте, копируя сделки других трейдеров. Я решил хорошо разобраться в этом вопросе, поэтому вместо инвестирования денег в тех трейдеров, которые мне понравились, написал парсер, который мониторил в среднем около 2000 портфолио в режиме реального времени на протяжении года.
Сначала я парсил сайт Traderwagon, который, к сожалению, закрылся. Тогда я переключился на Binance copy trading, который в то время начинал работу.
Количество портфолио для инвестирования на Binance непрерывно растёт. Сейчас их более 10 тысяч, поэтому мой скрипт парсил только часть из них, чтобы поддерживать уровень в ~2000 одних и тех же портфолио. Это было нужно для того чтобы отслеживать изменения в позициях трейдеров не реже чем раз в 20 минут на тех серверных мощностях, которые я выделил под проект.
Есть ещё несколько особенностей работы моего парсера, например когда трейдер скрывает свои позиции - мой скрипт закрывает их, поскольку не может отслеживать. Когда трейдер сильно корректирует свою позицию (например переворачивает) - скрипт выходит из неё, поскольку на данном этапе я решил сэкономить время на разработке алгоритма следования за сделками и доработать его впоследствии в случае успеха на этапе тестирования. Также я ограничил время нахождения трейдера в сделке в несколько дней и принудительно закрывал позиции при превышении этого периода. Я это делал потому что увидел что длительное нахождение в сделке незначительно увеличивает среднюю доходность/убыток, в то время как сокращение времени нахождения в сделке позволяет инвестировать те же средства в большее количество трейдеров и их сделок.
После каждого цикла парсинга - скрипт присылает мне в телеграм такой отчёт:
"list":"2180: 2180 / 2180"
"yes_content":"2180 / 0"
"no_driver":0
"restart_driver":0
"proxy_change":0
"refresh":0
"hide":0
"closed":1
exec_time: 18.8 mins
curThreads: 0
по которому я вижу сколько портфолио спарсилось, сколько и каких ошибок возникло. Вероятно на сервере Binance стоят какие-то фильтры для защиты от чрезмерного количества запросов и временами он плохо отдаёт контент моему парсеру:
"list":"2186: 2186 / 2177"
"yes_content":"2134 / 43"
"no_driver":26
"restart_driver":360
"proxy_change":161
"refresh":68
"hide":0
"closed":0
exec_time: 23.5 mins
curThreads: 10
Помогает в таком случае увеличение/смена количества прокси.
За 4 месяца работы на Binance этот скрипт собрал данные по 300 000 сделок трейдеров и ниже я расскажу об их результативности.
Но прежде чем это сделать. Я хочу сакцентировать ваше внимание на некоторых манипуляциях, которым подвержены данные на платформах копитрейдинга. Эти манипуляции и сподвигли меня написать парсер:
В случае потери всех денег, трейдеры, в большинстве случаев, закрывают убыточное портфолио и отрывают новое. Закрытое портфолио пропадает с сайта. Это приводит к тому что на платформе для копитрейдинга вы видите только выживших трейдеров. Их меньшинство. На Binance за 4 месяца около 75% наблюдаемых мной портфолио закрылось. Вы видите 25% выживших за 4 месяца и у вас складывается иллюзия того, что вы скорее заработаете деньги, чем потеряете. Но статистика говорит об обратном. Кладбище трейдеров скрыто.
Из оставшихся 25% приблизительно половина находится в прибыли, а половина - в убытке. На странице со списком портфолио расположены фильтры по доходности, PnL, и прочим показателям, которые по умолчанию обычно включены и выводят лучших трейдеров сверху. Вы видите показатели лучших, видите сколько они заработали и думаете что они будут зарабатывать и в будущем и инвестируете в них. Но заработают ли они в будущем? Ведь если бы вместо трейдеров торговали 10 000 обезьян, многие из них случайным образом тоже получили бы хорошую статистику за 4 месяца. Однако инвестирование денег в них привело бы к потерям.
После того как трейдер неудачно входит в сделку и оказывается в просадке - он зачастую скрывает свои текущие позиции (на платформе есть такая функция). В результате картина на странице со списком портфолио для копитрейдинга становится ещё красивее. А вы, зайдя на страницу портфолио какого-нибудь трейдера, можете ошибочно в него инвестировать видя его положительные результаты и не видя того, как он несколько недель пересиживал свою 70-процентную просадку по открытым позициям, которая чудом для него вышла в плюс.
Многие трейдеры (наверное большинство, но я не считал) используют Мартингейл, то есть увеличивают размер своих сделок (или их количество) для отыгрывания убытков. За счёт этого у них привлекательные, красиво растущие графики прибыльности, но такие трейдеры в итоге всегда теряют деньги.
На некоторых платформах (по крайней мере на Traderwagon так было) есть способы манипулирования статистикой торговли. Там можно было сначала открыть сделку, а затем, когда она будет в плюсе, закрыть её несколькими частями. Получалось что у трейдера много прибыльных сделок и мало убыточных и это искажало некоторые показатели статистики на сайте в лучшую сторону. Трейдеры находят такие лазейки и манипулируют своей статистикой.
Осознав всё это, я решил самостоятельно мониторить всех трейдеров, считать их статистику в том числе так, будто они торгуют с плечом 1:1 и фиксированным размером сделки и мониторить реальное плечо, размер сделки и другие показатели.
С таким подходом я мог перед входом в каждую сделку оценивать - стоит ли в неё входить и не копировать те сделки из портфолио, которые мне не нравятся.
Анализ
Давайте приступим к анализу результативности трейдеров.
Вот первый график, который стоит рассмотреть. Это имитация моего инвестирования во все сделки всех трейдеров если бы я торговал одинаковым плечом 1:1, одинаковым лотом (1$), находился бы не более чем в 1031 сделке одновременно. При таких условиях я заработал бы 21% к своему депозиту за 4 месяца (на самом деле не заработал бы, потому что приблизительно такой процент ушёл бы на оплату комиссии за сделки). На горизонтальной шкале указано количество сделок для светло-синего графика и время (не указано на шкале) для тёмного-синего, на вертикальной - доходность в % относительно сделки. То есть здесь 2 графика, один (светлый) отображается с одинаковым шагом (по оси X), второй (тёмный) правильно растянут во времени.
Откуда взялись числа в 1031 одновременную сделку и 250 000 сделок за 4 месяца?
Это - распределение максимального количества одновременно открытых сделок, которые нужно поддерживать для того, чтобы скопировать все 300 000 сделок. На середине графика видна точка, когда темп прироста количества одновременно открытых сделок растёт, а в конце графика рост начинает ускоряться. Ускорение темпа прироста количества одновременно открытых сделок связано с двумя факторами: 1 - краткосрочные скачки цен, в которые трейдеры массово открывают позиции, 2 - отыгрывание убытков (Мартингейл).
Отыгрывание убытков будет особенно хорошо видно если рядом с этим графиком в том же масштабе отобразить график сумм доходностей по всем сделкам. На нём видно что на уровне 1 500 сделок темп их открытия начинает расти сильнее, но трейдеры продолжают терять деньги. А на уровне 1800 сделок рост усиливается кратно и тут у трейдеров получается отыграть примерно половину полученных убытков.
На самом деле отыгрывание убытков может привести только к потере всех денежных средств, потому что требует бесконечного увеличения размера позиции. Если я буду давать трейдерам отыгрывать убытки, то мне нужно быть готовым одновременно поддерживать бесконечное количество открытых сделок бесконечного размера. Это невозможно.
Даже если бы трейдеры, использующие Мартингейл, не теряли свои депозиты, эффективность инвестирования в таких трейдеров была бы низкой. Поскольку (смотрите график) для работы с такими трейдерами нужно всегда иметь возможность увеличить вложения в них в несколько раз на короткий промежуток времени чтобы трейдер отыгрался. Это особенно хорошо видно в конце графика, где он начинает расти практически по экспоненте. Остальное время эти средства будут незадействованы. То есть из 1000 долларов, я дам трейдеру 100 долларов, а 900 буду держать, чтобы он в случае получения убытков с высокой долей вероятности смог отыграться. Как правило трейдеры начинают отыгрывать убытки в одно и то же время, поэтому мне придётся держать эти деньги незадействованными. Вместо этого я могу инвестировать свои 1000 долларов в 10 трейдеров (по 100 долларов на трейдера), которые не отыгрывают убытки и в таком случае мои деньги будут работать эффективнее и будут подвержены меньшим рискам.
Чтобы решить проблему неэффективного использования денежных средств в результате необходимости их резервирования для трейдеров, испольузющих Мартингейл, мой скрипт бектестинга стратегий выбора сделок для копирования сначала строил распределение количества одновременно открытых сделок для каждой проверяемой стратегии (то есть для каждого набора параметров), затем отсекал 40% самых крупных чисел и проводил тестирование по всему отрезку времени с ранее вычисленным ограничением для максимального количества открытых сделок. Для 300 000 сделок с 2 250 одновременно открытыми позициями получилось число 1031 и 250 000 сделок, которые будут скопированы с таким лимитом. На самом деле 1031 - это не оптимальное число и мне стоило выбрать 750, но у меня было запрограммировано отсекать 40%, поэтому выбралось большее число.
На последующих этапах разработки я планировал вычислять трейдеров, использующих мартингейл и не копировать их.
Давайте продолжим анализ. Посмотрим как изменялась цена фьючерса на биткоин за время копирования сделок трейдеров.
По графикам видно что когда рынок растёт - трейдеры зарабатывают, а когда снижается - теряют деньги. Это печально, потому что в моём представлении хороший трейдер должен зарабатывать на любом рынке (или по крайней мере не терять много на падающем рынке).
Это же будет видно если сделать сортировку сделок сначала по признаку лонг/шорт, а затем по времени. На графике слева (смотрите только на синий полупрозрачный график) при сделках в шорт (0 - 85 000 по оси X) мы бы теряли деньги, а при сделках в лонг (85 000 - 300 000) - зарабатывали.
Теперь давайте попробуем найти лучших трейдеров для копирования их сделок. Сначала будем ориентироваться на те качественные показатели портфолио, которые предоставляет платформа копитрейдинга, в моём случае Binance.
Я решил выбирать сделки по коэффициенту Шарпа, рассчитанного для портфолио. Мне нравится, что этот коэффициент показывает, на сколько равномерно растёт депозит и позволяет исключать трейдеров с большими просадками депозита. Вот пример портфолио с высоким коэффициентом Шарпа 7.63 и график прироста его депозита за 90 дней.
Я сделал сортировку доходности всех сделок по возрастанию (синий полупрозрачный цвет) и убыванию (красный полупрозрачный) к-та Шарпа. В правой части графика можно сравнить доходность сделок трейдеров при отрицательном (от 0 до -10) и положительном (от 0 до 13) к-те Шарпа. Точками отмечены значения к-та Шарпа (справа от графика на логарифмической шкале зеленым цветом указаны его значения), сплошными линиями выделены графики прибыльности при росте (синий) и снижении (красный) к-та Шарпа. На остальном участке графика к-т Шарпа не был указан для портфолио, потому что Binance его рассчитывает только для портфолио, соответствующих определённым условиям (торговля более N дней, более M сделок и т.п.). Также был момент, когда Binance немного поменял вёрстку и мой парсер несколько дней не собирал к-т Шарпа, пропустив большое падение. Из-за этого по графику может сложиться ложное впечатление что наличие к-та Шарпа для портфолио повышает вероятность получение прибыли. Это не так, я отдельно замерил последнее снижение рынка, которое не отображено в общей статистике) и получил схожую картину: и трейдеры с высоким к-м Шарпа и трейдеры с низким (отрицательным) к-м Шарпа теряли деньги приблизительно с одинаковой скоростью.
По полученному графику хорошо видно, что текущие значения к-та Шарпа не влияют на доходность новой заключаемой сделки. И трейдер, который "успешно" торгует 3 месяца с к-м Шарпа 10 и трейдер, который уже 3 месяца сливает деньги и имеет к-т Шарпа -10, с равной долей вероятности заработают или потеряют деньги на новой сделке.
К-т Шарпа - это действительно хороший показатель. И отсутствие его корреляции с будущими результатами трейдеров важно, потому что указывает на то, что никто из трейдеров на платформе не умеет торговать.
На этом можно было бы заканчивать. Но мне захотелось всё перепроверить, и я это несколько раз сделал, в том числе проверил, как на будущую доходность влияют другие показатели, которые рассчитывает платформа копитрейдинга: PnL, ROI, MDD, Copy Traders Count, Mock Copy Traders Count, Days Trading, AUM, Leading Margin Balance, Win Rate.
На основе собранных статистических данных я пришёл к выводу, что ни один из этих показателей не влияет на будущую доходность.
Поэтому как бы хорошо не смотрелось портфолио для инвестирования, его качественные показатели, к сожалению, имеют нулевую ценность.
На этом следовало бы закончить исследование.
Но мне хотелось получить железную уверенность в том, что я не ошибся. Я решил самостоятельно пересчитать все показатели, попробовать убрать некоторые из допущений, которые я делал (торговля плечом 1:1, фиксированный лот, принудительное закрытие сделок по истечении определённого времени и др.), попробовать внедрить собственные качественные показатели. И я это сделал, закопавшись в этой задаче на несколько месяцев. В результате я получил несколько показателей, которые на рассматриваемом 4-месячном участке (и на полугодовом участке TraderWagon) успешно прогнозировали сделки, приносящие доход в будущем.
Например вот распределение прибыльности сделок, перед входом в которые трейдер заработал не менее N% за последние 30 дней, если бы торговал с плечом 1:1 одинаковым лотом. Выглядит перспективно. Потенциально интересный участок с результатами имитированных сделок при прошлой доходности >100% я выделил красным. Потенциальную прибыльность стратегии можно увеличить, поигравшись с другими параметрами, типа максимальной просадки и т.п. (я рассчитывал до 150 показателей), но проблема (помимо возможной излишней оптимизации) в том, что любые стратегии инвестирования, построенные при помощи моих рассчитанных показателей, коррелируют с доходностью рынка. Возможно к-т Шарпа от Binance был лучшим показателем.
Вот пример такой стратегии выбора сделок, опирающейся всего на один показатель трейдера. Стратегия даёт 40% прибыли за 3.5 месяца в среднем принося 0.28% за сделку, что больше комиссии, которую брокер возьмёт за эти сделки. Но этот график коррелирует с рынком. Это значит что когда произойдёт обвал - деньги будут потеряны пропорционально величине обвала.
Можно поиграться с параметрами и оптимизировать стратегию таким образом, чтобы она защищала от просадок. Но это сделать, похоже, невозможно, ввиду случайности результатов трейдеров на платформах для копитрейдинга. Чтобы не увлекаться подбором параметров, я старался выбирать только те из них, которые имеют под собой фундаментальное обоснование, но всегда приходил к одному и тому же результату. Вот пример стратегии, основанной всего на двух параметрах. Слева отображён результат бэктестов. А справа - реальный результат после запуска стратегии на небольшом счёте.
Красной вертикальной линией отмечена точка, в которой стратегия была запущена на реальном счёте. Причина потери денег в том, что рынок резко пошёл вниз. Величина сокращения депозита приблизительно равна величине снижения рынка. Получается что прежний рост по результатам бэктеста обусловлен только ростом рынка и излишней оптимизацией параметров (хотя казалось бы их только 2 и можно красиво обосновать, почему они должны работать).
Поняв, что все поучаемые стратегии не защищают от падения рынка, я решил исследовать, какие показатели влияют на прибыльность шортов.
Оказалось что никакие.
На нижнем левом рисунке представлено распределение прибыльности сделок short, в зависимости от предыдущей доходности портфолио (рассчитано для другого временного интервала). По нему видно что никакая доходность в прошлом не влияет на вероятность получения прибыли в будущем.
А на графике справа построены те же распределения, построенные для обоих типов сделок: long + short. По нему видно что прошлая доходность повышает вероятность прибыли в будущем. Так получилось, потому что за последние 4 месяца часто был растущий трендовый рынок.
Мои собственные расчёты показали то же самое, что я увидел изначально: если рынок растёт - трейдеры на платформе копитрейдинга зарабатывают деньги, если снижается - теряют. И среди них невозможно выбрать того, кто заработает. К сожалению заработки и потери на этих платформах объясняются случайностью, а не компетенциями и опытом их участников.
Вывод
Брокеры придумали очередной способ как спровоцировать наблюдателя отдать им свои деньги. (Если кто-то не в курсе, брокеры зарабатывают комиссию с каждой совершённой вами сделки и это единственное что они умеют и единственное что их интересует).
И напоследок
Мне давно было интересно, как влияет размер сделки и размер используемого маржинального плеча на результативность сделок. Кому тоже интересно, привожу данные с Binance. На самом деле я не знаю на сколько они репрезентативные, возможно большинство трейдеров на этой платформе - это случайные роботы и скамеры и в таком случае этим данным не стоит доверять:
leverage - Результат сделки в среднем не зависит от используемого плеча. Я отдельно проверил маленькие плечи (от 1:1 до 1:3) и увидел что на 1:2 и 1:3 результаты лучше рынка, но на 1:1 они почему-то хуже. Большие плечи (1:100 и выше) показывают результаты хуже рынка, но стратегия, построенная на торговле в направлении, противоположном им, показывает доходность, которая коррелирует с направлением рынка.
leverage_level - Зависимость результата сделки от величины отклонения текущего плеча от среднего плеча, которое ранее использовал данный трейдер. Здесь результаты похожие.
volume - Зависимость результата сделки от её объёма в долларах. Здесь получилось небольшое отклонение в положительную сторону при торговле объёмами больше средних, но влияние этого показателя на прибыльность стратегии минимально.
volume_level - Зависимость результата сделки от величины отклонения текущего объёма от среднего объёма, который ранее использовал данный трейдер. Здесь закономерности нет.