May 11, 2019

Автоматизированная торговля альткоинами на биржах криптовалют.

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

Сразу оговорюсь, что я не большой эксперт в прогнозировании рынка криптовалют. Более того, считаю, что предсказать поведение рынка обычному трейдеру практически невозможно. Конечно, есть рабочие методики и алгоритмы, в основе которых лежит серьёзная математика. Но это вотчина HFT, алгоритмов высокочастотного трейдинга, и живым людям на этом поприще делать нечего. А вот рисование всяких треугольников, линий каналов, голов и плеч, волн Эллиота и прочие ритуалы технического анализа - они не нужны.

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

Чтобы не быть голословным, я месяц назад открыл счета на всех основных биржах криптовалют, пополнив каждый всего на 0.1 BTC, что составляло $200 по тому курсу. Типичный результат виден на скриншоте моего текущего счёта на бирже Livecoin:

Баланс счёта увеличился с 0.1 BTC до 0.9 BTC при суммарном торговом обороте более $75,000 в месяц. На остальных биржах ситуация похожа - где-то прибыль чуть меньше, где-то чуть больше. Livecoin выбрана для иллюстрации потому, что у неё в профиле есть данные об общем обороте за прошедший месяц. На других биржах такой информации нет, а считать вручную у меня нет желания. Livecoin хороша в качестве примера ещё и потому, что это совсем не крупная биржа по сравнению с Poloniex или Bittrex. Тем не менее, наглядно видно, что прибыль при торговле на мелких биржах может быть выше, чем при торговле на крупных.

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

Преимущества автоматизированной торговли по сравнению с ручной работой на рынках криптовалют.

  1. У вас будет много свободного времени на занятия полезной деятельностью. Так как торговля осуществляется автоматически, вам нет необходимости постоянно следить за ходом торгов - всё это делают роботы. А вы можете заниматься творческой работой, не отвлекаясь на отслеживание курсов криптовалют на куче бирж. Фактически, речь идёт об абсолютно пассивном заработке.
  2. В отличие от человека, роботы могут анализировать неограниченное количество торговых пар. На Poloniex 90 торговых пар, на Bittrex их уже 203, на Livecoin - 194, а на Yobit их уже больше 350. Понятно, что никто не в состоянии воспринимать такой массив данных. А вот для роботов всё это не имеет никакого значения - они анализирую все рынки в течение нескольких секунд.
  3. Роботы также способны принимать решения гораздо быстрее человека. Торгуя на десятках пар одновременно, робот всегда с точностью до одного сатоши знает - почём он купил актив и за какую цену его следует продать, чтобы получить заданную прибыть. При этом на анализ и выставление торгового ордера требуются лишь доли секунд.
  4. Роботы не делают ошибок. Робот не может ошибиться в одном знаке после запятой и случайно выставить крупную заявку на покупку по цене, в 10 раз превышающей рыночную. Человек совершает такие ошибки сплошь и рядом. Особенно, когда действует в стрессовой ситуации. Например, при резком изменении на рынке, когда цена на актив в течение секунд летит вверх или вниз в несколько раз.
  5. Роботы не испытываю эмоций. Их не терзают сомнения - они действуют строго в соответствии с заданным алгоритмом. Именно поэтому они не совершают классических ошибок всех трейдеров. Кроме того, доверившись роботу, вы сохраните своё душевное спокойствие - вас абсолютно не будет волновать изменения курса каждой криптовалюты. При правильных алгоритмах (об этом чуть позже) вы будете зарабатывать вне зависимости от того - падает ли курс, или растёт или две недели топчется на месте. Вам это не будет важно - прибыль вы получите в любом случае.
  6. Роботы работают круглые сутки. Им не нужно есть, спать и заниматься другими делами. Всё что они умеют делать - это торговать на биржах криптовалют. Но зато это делают гораздо лучше человека. И, работая круглосуточно, они смогут совершить гораздо больше сделок, чем это можете сделать вы. При этом никак не тратя ваше время (см. п. 1).

А что с безопасностью?

Говоря о роботах - я не имею в виду использование чужих готовых программ. Возможно, где-то действительно есть программы, с помощью которых вы сможете автоматизировать свои алгоритмы и получать прибыль. Я не тестировал чужие программы и сейчас никаких советов по ним дать не могу. Однако программирование собственного робота для торговли на бирже не является такой уж сложной задачей и я в подробностях расскажу вам о торговых алгоритмах, которые использую сам.

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

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

Что дальше?

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

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

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

Рассмотрим варианты гарантированно выигрышной торговли, т.е. случаи, когда есть гарантия получения прибыли. Например, в случае межбиржевого арбитража. В том числе рассмотрим пример торговли токенами GOLOS на примере независимых рынков GBG и GOLOS на бирже Bittrex и внутренней биржи.

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

Прежде всего - спасибо всем, кто дождался выхода этой публикации и поддерживал меня, проявляя интерес к теме. Это мотивирует! Думаю, настало время перейти от теоретических рассуждений (начало и продолжение) об основах автоматизированной торговли на биржах криптовалют к практическому примеру готового алгоритма такого бота.

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

Эта серия постов несёт цель систематизации моих знаний для меня лично и дать вам пищу для самостоятельных размышлений, если тема вас заинтересует.

Логика торгового бота

Блок-схема алгоритма работы бота приведена на рисунке. Это был мой первый бот, разрабатывая который я хотел чтобы:

  1. Бот не был бы слишком сложным для реализации и не требовал много времени на отладку. Поэтому я отказался от использования индикаторов и технического анализа. Во-первых, написание самих индикаторов (или адаптация готовых кодов) требует дополнительных затрат времени и усложняет код. Во-вторых, поиск оптимальных точек входа и выхода из рынка требует времени. Совсем не обязательно что прямо сейчас на рынке сложились благоприятные условия. Мне же нужен был бот, который приходит на биржу и сразу начинает торговлю.
  2. В структуре бота были бы все необходимые элементы, которые могут пригодиться для построения в будущем более сложных торговых систем. Мне нужен был механизм выставления и закрытия ордеров на биржах, а также функции сбора рыночных данных, чтобы бот мог принимать решение о входе в рынок или выходе из него.
  3. Желательно, чтобы торговая стратегия, несмотря на свою простоту, приносила прибыль в долгосрочной перспективе.

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

Все рынки на бирже ранжируются по убыванию параметра:

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

Полная блок-схема алгоритма приведена на рисунке:

Настроечные параметры алгоритма

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

  • Максимальное количество одновременно торгуемых пар $trade_pairs. Теоретически бот может торговать всеми активами, что есть на бирже, но для этого вам потребуется значительный начальный баланс (распределяемый равномерно между всеми торгуемыми активами). Торговля всеми парами - не очень оптимальная стратегия, если учесть, что даже на крупных биржах большинство торговых пар - это низколиквидные активы. Поэтому я ограничиваю количество одновременно торгуемых пар.
  • Минимальная цена криптовалюты для торговли. Для криптовалют с низкой ценой разница даже в 1 сатоши между Bid 0.0000001 и Ask 0.00000002 даёт уже маржу в 100%, но торговля такими активами имеет значительный риск. Ведь если цена на актив настолько низкая, то это означает, что данная криптовалюта сама по себе не несёт никакой ценности и представляет интерес лишь для спекулянтов. Я предпочитаю не связываться с такими активами, устанавливая минимальную планку цены в 100 сатоши.
  • Минимальный размер одного лота в BTC. Выставлять ордера на 10,000 сатоши нет смысла - прибыль будет минимальна. Поэтому имеет смысл ввести ограничение на минимальный размер одного лота.
  • Минимальный размер одного ордера на бирже - каждая биржа, в свою очередь, имеет ограничение на минимальный размер ордера. Например, на Биттрексе это 50,000 сатоши. Меньшие ордера будут отклонены биржей.
  • Минимальная прибыль (в процентах) которую должен обеспечить бот по каждой торговой паре. При торговле нужно учитывать, что у биржи есть комиссия, обычно это 0.2%, за каждую операцию. Поэтому на круг "купил-продал" уже теряется 0.4% на комиссию биржи и вам необходимо это учитывать, чтобы бот работал с положительным результатом. Поэтому устанавливать прибыль меньше 1% не очень разумно. Максимальный размер прибыли - на ваше усмотрение. Чем меньше он будет - тем чаще бот будет торговать, но с меньшей прибылью на одну сделку. В общем, параметр этот следует подбирать каждому индивидуально. Я обычно устанавливаю в районе 2-5%.
  • Время, в течение которого бот держит убыточные активы. Бот не может всегда торговать в профит. Часто возникают ситуации, когда после покупки актива его цена идёт только вниз и вы не получаете прибыль. Так как работа бота основана на постоянном обороте средств, нужен механизм фиксации убытков по отдельным парам. Я обычно жду время $loss_time, после которого бот фиксирует убыток, продавая актив по текущей рыночной цене, какая бы они ни была. Параметр этот эмпирический - я обычно устанавливаю срок в две недели.

Пояснения по работе боте

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

Прежде всего, бот не работает постоянно, а запускается по расписанию (cron в линуксе), выполняет свою работу и отключается от биржи. В зависимости от биржи я запускаю бота обычно раз в 5-20 минут.

Первым делом бот проверяет - есть ли у него открытые ранее ордера и если такие есть - закрывает все текущие ордера. Таким образом, он постоянно адаптируется к текущему состоянию рынка.

Следующим шагом на бирже запрашиваются данные о ценах Ask и Bid всех торгуемых криптовалют и объёмах суточных торгов по ним. При этом для себя бот для каждой криптовалюты выставляет цену покупки чуть лучше лучшей цены на бирже (Bid=Bid+0.00000001). Тоже самое и с ценой продажи (Ask=Ask-0.00000001). Все криптовалюты ранжируются по критерию Rank (сам формулу выше) потенциальной прибыли за счёт разницы Ask-Bid и с учётом объёма торгов.

Получив общие данные о рынке, бот получает данные о своём собственно балансе: сколько у него есть BTC на счету и сколько других криптовалют.

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

Затем бот для каждой криптовалюты анализирует - получит ли он заложенную прибыль, если выставит ордер по цене Ask. Бот всегда работает как маркетмейкер, т.е. не продаёт по существующей на рынке цене Bid, а выставляет лимитные ордера Ask, но эти лимитные ордера всегда с лучшей ценой на рынке.

Также проводится анализ времени с последней покупки актива и если это время больше настроечного параметра $loss_time - также выставляется ордер на продажу.

По завершению цикла выставления ордеров на продажу бот переходит к выставлению ордеров на покупку. Если у него есть свободные биткоины на балансе, он берёт ранжированный список $trade_pairs и выставляет Bid ордера с лучшей ценой на рынке.

Результаты торговли и возможные улучшения

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

Кроме того, в простоте алгоритма есть один большой плюс для новичков: вы не запутаетесь. Робот имеет все необходимые компоненты для создания ваших собственных ботов по вашим собственным торговым стратегиям. Он умеет выставлять и закрывать ордера и получать информацию о текущих котировках криптовалют, объёмах торгов и заполненности биржевых стаканов. Из этих кубиков вы легко сможете самостоятельно строить более сложные торговые стратегии. Но если вы не гуру программирования - начинать лучше с чего-то простого.

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

Видно, что в течение каждого часа бот успевает совершить несколько сделок, в том числе полностью завершив цикл покупки криптовалюты и её продаже с заложенной прибылью (на скриншоте на примере STEEM: покупка в 6:16 по 37,532 и продажа в 7:54 по 39,564; время UTC).

Подробнее о я языках программирования, существующих библиотеках, форматах API вызовов для реализации этого алгоритма - в следующей статье на эту тему (выйдет заметно быстрее, чем эта :).

Если у вас есть свои торговые стратегии (и вы готовы ими поделиться) или если есть вопросы, дополнения и предложения по улучшения описанной торговой стратегии - буду рад ваши комментариям!