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



Мой друг - робот

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

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

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

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

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

  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 вызовов для реализации этого алгоритма - в следующей статье на эту тему (выйдет заметно быстрее, чем эта :).

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


Comments 44


Ничего не понял, но всё равно спасибо за труды )))

09.08.2017 11:10
0

@primus я тоже не сильна во всех этих знаниях торговли на биржах))). Так пишу для души, а если что-то накопится, то не глядя на курс вывожу))). Все равно не особо понимаю). Это нужно скорее всего тем, кто торгует на биржах)).

09.08.2017 11:20
0

Подпишись и лайкай посты все взаимно)

09.08.2017 11:33
0

Вот это уже надо репостить ;) Спасибо. Отличная вводная для нового выводка Остапов. Пускай развивают творческое мышление и учатся применять его на практике ;)

09.08.2017 11:40
0

Спасибо. Отлично описан алгоритм, хоть прямо сейчас садись и пиши своего бота... Но зачем писать своего, если автор это уже сделал. @primus а вы не продаете (сдаете в аренду) свой бот?

09.08.2017 12:09
0

Вопросы будут позже, если можно, они должны созреть). А вообще, завидую я вам ребят, по хорошему завидую, светлые головы у вас. Я конечно тоже "корячусь", тяжелова-то, но думаю поэтапно торговый скрипт всетаки осилю. Спасибо, @primus за то, что делитесь опытом, ведь опыт это самое ценное знание. Удачи Вам в Ваших делах и начинаниях!

09.08.2017 12:27
0

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

09.08.2017 14:13
0

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

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

Опять же - вы всегда можете добавить анализ линии тренда и ставить ордера на покупку только в случае растущего или стабильного рынка.

Тот же STEEM из примера сейчас вполне себе планомерно падает:

Но это не помешало боту сделать на нём +5.4% за сделку в течение часа.

09.08.2017 14:36
0

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

09.08.2017 18:02
0

Увы, у меня нет ответа на этот вопрос.

Я не могу говорить за всех, могу говорить только за себя. У меня бот на таком алгоритме нормально работает.

С другой стороны, я могу задать вам аналогичный встречный вопрос: почему, зная что за криптовалютами будущее и курс их растёт на сотни процентов в год, люди продолжают нести свои сбережения в Сбербанк под 6% годовых?

09.08.2017 18:05
0

А такой вопрос.
Ранг у Вас считается по формуле.
А как сортируется если он всегда отрицательный?

09.08.2017 14:28
0

Как он может быть отрицательным, если всегда Ask>Bid?

09.08.2017 14:38
0

Это скорее всего моя ошибка.Завтра проверю. Я похоже в формуле при расчете не умножение а минус вставил.

09.08.2017 19:13
0

Да моя вина. Неправильно знак поставил. Пойду дальше писать посмотрим что получиться.

10.08.2017 06:52
0

@slava7450745 - ты что-нить автоматизировал ?)

09.08.2017 14:55
0

Честно говоря, я немного в смятении. Ждал этой публикации, но очень уж масштабно у Вас выходит!
В предыдущих статьях мне ну очень понравилась идея следить за крупной биржей, а играть на площадке поменьше. И главными критериями были надежность и низкая комиссия.
Здесь же целая масштабная спецоперация!
Надо подумать. Но за работу и огромное количество хорошего материала большое спасибо!

09.08.2017 15:01
0

Вот отдельное спасибо за выбор ликвидных пар!
Еще можно при покупке сразу выставлять profit limit и не париться по поводу продажи! Хотя есть вероятность, что прибыли будет меньше) Но алгоритм будет однозначно проще.

Я новичок в торговле. Написал простейшего бота. Он делает примерно тоже самое (ликвидность пар не учитывает). Он наблюдает все пары, если видит что какая-то пара начинает быстро расти - покупает ее. А продает ее только если выгодно (%комиссии+min profit) , когда цена начинает падать. Т.е. фактически бот пытается словить вершину цены. Соотвественно, наблядать за рынком он должен постоянно).
В общем, работает он чуть меньше суток. Есть какой-то минимальный профит. Поглядим, что будет дальше.
А Вам спасибо за статью!!

09.08.2017 15:44
0

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

09.08.2017 16:05
0

Бот не анализирует спреды в разные дни - он смотрит только на текущее состояние рынка.

И ещё важен не абсолютный спрэд, а относительный.

И да, если объём торгов одинаковый, то приоритет будет отдан монете, у которой больше относительный спред. Просто потому, что с этой монеты получается большая прибыль на круг.

09.08.2017 18:09
0

если правильно понял, то чем больше спред, тем больше волатильность.

10.08.2017 02:08
0

А бота вашего можно как-то приобрести? А то не все умеют программить, пусть даже на простейшем уровне .

10.08.2017 06:13
0

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

10.08.2017 09:21
0

посмаковал статьей! Отлично изложено, блок-схему не до конца правда, так как не силен еще в трейдинге. Жду продолжения. Кстати вчера переводил статью о Enigma-Catalyst, как будто идеи где-то пересекаются. Оставлю ссылку, может кому-то будет интересно почитать: /ru--kriptovalyuty/@novy/enigma-catalyst-platforma-agloritmicheskogo-treidinga

10.08.2017 11:29
0

Дадите попользоваться вашим ботом ?

10.08.2017 12:06
0

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

10.08.2017 14:47
0

Спасибо @primus за отличную статью. Могу подтвердить, что данная стратегия работает. Первый мой алгоритм был практически такой же и торговал стабильно в плюс. Самое главное, подобрать правильную биржу с большими спредами и не залазить на совсем уж низколиквидные валютные пары. Хотя, чем низколиквиднее, тем профитнее. Пробовал различными способами анализировать рынок, но как не странно существенного улучшения результатов я не добился. Едиственное, что реально увеличило профит, это сверка с текущей ценой и стаканом, на другой, более крупной бирже.
Было бы интересно почитать про экпириенс использования других стратегий.

11.08.2017 05:52
0

@primus, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:

  • Голосов - 6 позицию - 219 Голосов
11.08.2017 06:08
0

Примус, напишите, пожалуйста, на каком языке программа? Или это веб сервис?

13.08.2017 13:08
0

Здравствуйте,"primus". Хочу сказать для начала Большое Спасибо+++. За доступность в изложении материала, не только в этой теме, но и вообще всего что касается основ "крипто-все...". Я обычный трейдер с Форекс, и мне все эти "заумные умствования" отдельных Гуру как-то не очень. Скажу больше, неудачный просмотр на Ютубе одного из таких "Гуру", отложил мое знакомство с этим явлением на полгода. И как я теперь понимаю весьма продуктивных для тех кто в теме. Но мой вопрос о другом. Торговать на этом рынке, при помощи классического тех.анализа... "Я Вас умоляю", нет еще никого тех анализа. Просто рынок еще очень молодой и своих исторических хаев и лоев у него просто нет. Как только более менее освоюсь тут, открою блог для трейдеров с "игрового автомата Форекс МТ4". Там по полочкам разложу, где этот рынок и где тех. анализ. Вопрос у меня вот о чем. В классическом форекс, принято новый продукт, выкладывать на тестовый период, где все под свою собственную ответственость торгуют или не торгоют "ботом "и высказывают свои пожелания и замечания. Поэтому предлагаю, Вам как разработчику первого вменяемого алгоритма, сделать что-то подобное, или хотя бы если вам это не интересно, как... это правильно сказать, что то типа ботов с Форекс с открытым кодом и каждый пусть сам делает настройки на свой страх и риск. Но уже не придется изобретать велосипед с нуля. Хотя языки "программеров" теперь придется учит по любому. Как-то так...

14.08.2017 09:14
0

Привет. Автор статьи не упоминал эту биржу, но у нее есть своя тестовая площадка.
https://testnet.bitmex.com
Может попробовать робота написать для этой биржи?

07.09.2017 06:23
0

И вам Привет. Я не умею писать ботов. Я практик с форекс.И если есть хоть одна "вменяемая" биржа криптовалют. К которой прикручен терминал для торгов типа мт4 или мт5. Указал эти просто потому, что они у всех на слуху, но по факту, это не важно. Важно что бы это был терминал который ты можешь установить на свой ПК. И тогда по алгоритмам торгов можно будет создать армию ботов на любой вкус и цвет. А пока все эти привязки к Ай-Пи биржам ... для меня "темный лес". И изучать его лично мне пока незачем. Поэтому жду биржу с терминалом. Наверное и "Примус" этого ждет-с. Как-то так
В качестве P.S. Некоторые форекс-брокеры пытаются сейчас создавать,( внедрять!), мульти-терминалы для торговли всем от CFD + валютные пары+ (BTC-USD - убого и не понятно откуда котировки и вообще...), но пока это у них в стадии разработок. Но понимая, что крипто-это инструмент без которого от них уйдут трейдеры. Думаю что будут первые в этой области. Так-что трейдеры, ( не путать с инвесторами!), ждем-с и смотрим на этот "дикий рынок". И как только появятся "правила игры"...:-)

07.09.2017 10:19
0

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

14.08.2017 10:18
0

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

14.08.2017 11:42
0

@primus, подскажите, пожалуйста, как распределить равномерно начальный баланс btc. Допустим, в настройках указать 10 пар, а начальный баланс не очень большой. Какой механизм Вашего бота, и сколько каждой монеты купить? Разделить btc на количество пар, допустим 10, и покупать каждую по одной десятой баланса btc? Спасибо.

15.08.2017 07:17
0

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

15.08.2017 12:55
0

Ваш пост заставил меня вернуться к изучению программирования. И это хорошо...Очень много вопросов по описанию алгоритма, так как программ такой сложности (для профи эт конечно дет.сад) я не писал. Жду ваших дальнейших постов. Профита..!

20.08.2017 08:41
0

Здравствуйте, @primus. У меня такая ситуация: хочу торговать сам, сам буду анализировать и принимать решения. Но я хочу поручить "черную работу" боту: выставление ордеров. Так как я имею под своим управлением несколько аккаунтов с разных бирж, я хочу чтобы бот сам заходил на несколько аккаунтов одновременно и выставлял мои ордера. То есть бот, выполняющий мои команды на всех аккаунтах.

31.08.2017 05:41
0

Это же классический алгоритм скальпинга, издавна используемый на других биржах, валютных, фондовых и прочих.
Но, мне кажется, что показатель Rang нам ни о чем не говорит. Потому что, чем более ликвидна пара на данной бирже (чем больше сделок по ней проходит), тем чаще меняется ask и bid, и, соответственно, может меняться спред (если он, конечно, не фиксирован биржей, как например, у брокеров форекс), в том числе и становиться очень маленьким. Особенно это характерно для крупных бирж типа Bittrex. А с маленьким спредом показатель Rang тоже сильно падает, несмотря на суточные объемы торгов. И основываясь на показателе Rang алгоритм спокойно выкидывает из торгов самую ликвидную пару, которая может спокойно расти в данный момент с минимальным спредом.
Решением этой проблемы мне видится в накоплении статистики среднего спреда (скажем, за прошедшую неделю) пары при каждом обращении к бирже. И ориентироваться нужно на средний спред пары, а не мгновенный.
Либо второй вариант - отказаться от спреда при вычислении Rang. Поскольку от текущего спреда не зависит доходность пары, по сути нам больше важен суточный объем и/или число сделок за сутки.

31.08.2017 07:58
0

@imp По поводу ранжирования я согласен с вами. Жаль, что автор не рассказал, откуда взялась данная формула. Какие предпосылки были? Я не понимаю, почему мы объем торгов за 24 часа умножаем на коэфициент, отражающий мгновенную ликвидность актива. Погуляв по интернету, я наткнулся на формулу определения ликвидности другого плана: мы определяем количество и качество сделок, совершенных за определенный промежуток времени. bittrex позволяет получить по апи кол-во сделок и сумму сделок за определенный промежуток времени. Я хочу,как появится свободное время сегодня сравнить две формулы ранжирования, "мою" и Вашу.

01.08.2018 06:41
0

ждем часть 4. Скоро?

02.09.2017 05:02
0

А какие объемы по каждой паре закупаются? Чем это определяется?

07.09.2017 17:52
0

Привет всем. Я, конечно, согласен с @primius, что работать с сторонними роботами с закрытым кодом не рекомендуется, но так как я не программист, то предлагаю рассмотреть бота бесплатного с github. Проверить его код, нет ли тайный переводов денег и не нужных команд. Вот страничка https://gekko.wizb.it/docs/introduction/about_gekko.html
Итак, мое предложение написать под стратегией @primius один файл, поместить его в бота Gekko и проверить как это работает.
Как выглядят стратегии Gekko можно увидеть здесь https://gekko.wizb.it/docs/strategies/creating_a_strategy.html

08.09.2017 20:11
0

If you want to sell this file for Bitcoins, use https://SatoshiDisk.com/
Don't need to create account or pass KYC. Upload, Share, Profit!

02.07.2019 20:00
0