Прежде всего - спасибо всем, кто дождался выхода этой публикации и поддерживал меня, проявляя интерес к теме. Это мотивирует! Думаю, настало время перейти от теоретических рассуждений (начало и продолжение) об основах автоматизированной торговли на биржах криптовалют к практическому примеру готового алгоритма такого бота.
Необходимый дисклаймер: я не призываю вас начинать торговать. Я предполагаю, что читающие эти строки люди обладают достаточной компетенцией и знаниями, чтобы самостоятельно принимать решения об эффективности биржевой торговли в целом и автоматическом трейдинге в частности.
Эта серия постов несёт цель систематизации моих знаний для меня лично и дать вам пищу для самостоятельных размышлений, если тема вас заинтересует.
Логика торгового бота
Блок-схема алгоритма работы бота приведена на рисунке. Это был мой первый бот, разрабатывая который я хотел чтобы:
- Бот не был бы слишком сложным для реализации и не требовал много времени на отладку. Поэтому я отказался от использования индикаторов и технического анализа. Во-первых, написание самих индикаторов (или адаптация готовых кодов) требует дополнительных затрат времени и усложняет код. Во-вторых, поиск оптимальных точек входа и выхода из рынка требует времени. Совсем не обязательно что прямо сейчас на рынке сложились благоприятные условия. Мне же нужен был бот, который приходит на биржу и сразу начинает торговлю.
- В структуре бота были бы все необходимые элементы, которые могут пригодиться для построения в будущем более сложных торговых систем. Мне нужен был механизм выставления и закрытия ордеров на биржах, а также функции сбора рыночных данных, чтобы бот мог принимать решение о входе в рынок или выходе из него.
- Желательно, чтобы торговая стратегия, несмотря на свою простоту, приносила прибыль в долгосрочной перспективе.
В итоге я выбрал следующую торговую стратегию для реализации: бот приходит на рынок и анализирует данные только по текущему состоянию. Для работы ему необходимы лишь данные о лучшей цене на покупку (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 прямо сейчас):
Подробнее о я языках программирования, существующих библиотеках, форматах API вызовов для реализации этого алгоритма - в следующей статье на эту тему (выйдет заметно быстрее, чем эта :).
Если у вас есть свои торговые стратегии (и вы готовы ими поделиться) или если есть вопросы, дополнения и предложения по улучшения описанной торговой стратегии - буду рад ваши комментариям!
Спасибо @primus за отличную статью. Могу подтвердить, что данная стратегия работает. Первый мой алгоритм был практически такой же и торговал стабильно в плюс. Самое главное, подобрать правильную биржу с большими спредами и не залазить на совсем уж низколиквидные валютные пары. Хотя, чем низколиквиднее, тем профитнее. Пробовал различными способами анализировать рынок, но как не странно существенного улучшения результатов я не добился. Едиственное, что реально увеличило профит, это сверка с текущей ценой и стаканом, на другой, более крупной бирже.
Было бы интересно почитать про экпириенс использования других стратегий.
Вопросы будут позже, если можно, они должны созреть). А вообще, завидую я вам ребят, по хорошему завидую, светлые головы у вас. Я конечно тоже "корячусь", тяжелова-то, но думаю поэтапно торговый скрипт всетаки осилю. Спасибо, @primus за то, что делитесь опытом, ведь опыт это самое ценное знание. Удачи Вам в Ваших делах и начинаниях!
А такой вопрос.
Ранг у Вас считается по формуле.
А как сортируется если он всегда отрицательный?
Как он может быть отрицательным, если всегда Ask>Bid?
Это скорее всего моя ошибка.Завтра проверю. Я похоже в формуле при расчете не умножение а минус вставил.
Да моя вина. Неправильно знак поставил. Пойду дальше писать посмотрим что получиться.
Ваш пост заставил меня вернуться к изучению программирования. И это хорошо...Очень много вопросов по описанию алгоритма, так как программ такой сложности (для профи эт конечно дет.сад) я не писал. Жду ваших дальнейших постов. Профита..!
Честно говоря, я немного в смятении. Ждал этой публикации, но очень уж масштабно у Вас выходит!
В предыдущих статьях мне ну очень понравилась идея следить за крупной биржей, а играть на площадке поменьше. И главными критериями были надежность и низкая комиссия.
Здесь же целая масштабная спецоперация!
Надо подумать. Но за работу и огромное количество хорошего материала большое спасибо!
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!
Огромная благодарность за статьи по теме автокриптотрейдинга :)
Примерно такая же страта в голове и зрела.
"Подробнее о я языках программирования, существующих библиотеках, форматах API вызовов для реализации этого алгоритма - в следующей статье на эту тему (выйдет заметно быстрее, чем эта :)."
А где эту статью можно найти?
Привет всем. Я, конечно, согласен с @primius, что работать с сторонними роботами с закрытым кодом не рекомендуется, но так как я не программист, то предлагаю рассмотреть бота бесплатного с github. Проверить его код, нет ли тайный переводов денег и не нужных команд. Вот страничка https://gekko.wizb.it/docs/introduction/about_gekko.html
Итак, мое предложение написать под стратегией @primius один файл, поместить его в бота Gekko и проверить как это работает.
Как выглядят стратегии Gekko можно увидеть здесь https://gekko.wizb.it/docs/strategies/creating_a_strategy.html
А какие объемы по каждой паре закупаются? Чем это определяется?
ждем часть 4. Скоро?
Это же классический алгоритм скальпинга, издавна используемый на других биржах, валютных, фондовых и прочих.
Но, мне кажется, что показатель Rang нам ни о чем не говорит. Потому что, чем более ликвидна пара на данной бирже (чем больше сделок по ней проходит), тем чаще меняется ask и bid, и, соответственно, может меняться спред (если он, конечно, не фиксирован биржей, как например, у брокеров форекс), в том числе и становиться очень маленьким. Особенно это характерно для крупных бирж типа Bittrex. А с маленьким спредом показатель Rang тоже сильно падает, несмотря на суточные объемы торгов. И основываясь на показателе Rang алгоритм спокойно выкидывает из торгов самую ликвидную пару, которая может спокойно расти в данный момент с минимальным спредом.
Решением этой проблемы мне видится в накоплении статистики среднего спреда (скажем, за прошедшую неделю) пары при каждом обращении к бирже. И ориентироваться нужно на средний спред пары, а не мгновенный.
Либо второй вариант - отказаться от спреда при вычислении Rang. Поскольку от текущего спреда не зависит доходность пары, по сути нам больше важен суточный объем и/или число сделок за сутки.
@imp По поводу ранжирования я согласен с вами. Жаль, что автор не рассказал, откуда взялась данная формула. Какие предпосылки были? Я не понимаю, почему мы объем торгов за 24 часа умножаем на коэфициент, отражающий мгновенную ликвидность актива. Погуляв по интернету, я наткнулся на формулу определения ликвидности другого плана: мы определяем количество и качество сделок, совершенных за определенный промежуток времени. bittrex позволяет получить по апи кол-во сделок и сумму сделок за определенный промежуток времени. Я хочу,как появится свободное время сегодня сравнить две формулы ранжирования, "мою" и Вашу.
Здравствуйте, @primus. У меня такая ситуация: хочу торговать сам, сам буду анализировать и принимать решения. Но я хочу поручить "черную работу" боту: выставление ордеров. Так как я имею под своим управлением несколько аккаунтов с разных бирж, я хочу чтобы бот сам заходил на несколько аккаунтов одновременно и выставлял мои ордера. То есть бот, выполняющий мои команды на всех аккаунтах.
Спасибо, за статью. У любой пары будет не нулевая вероятность уйти в минус. Поэтому важно торговать большим количеством пар. Соответственно вопрос, какая вероятность уйти в минус для одной пары и сколькими по-минимуму парами надо торговать для профита?
@primus, подскажите, пожалуйста, как распределить равномерно начальный баланс btc. Допустим, в настройках указать 10 пар, а начальный баланс не очень большой. Какой механизм Вашего бота, и сколько каждой монеты купить? Разделить btc на количество пар, допустим 10, и покупать каждую по одной десятой баланса btc? Спасибо.
Всем хочется потестить бота.
Предположу, что автор не выкладывает в открытый доступ, чтобы потом к нему не было притензий.
Приписка: используете на свой страх и риск очень помогла бы
А почему лучше брать пару ,у которой спред больше?
Я понимаю, что разница между покупкой и продажей будет больше, но ведь и ждать пока цена продажи обгонит цену покупки придётся дольше. Или это незначительно совсем?
Здравствуйте,"primus". Хочу сказать для начала Большое Спасибо+++. За доступность в изложении материала, не только в этой теме, но и вообще всего что касается основ "крипто-все...". Я обычный трейдер с Форекс, и мне все эти "заумные умствования" отдельных Гуру как-то не очень. Скажу больше, неудачный просмотр на Ютубе одного из таких "Гуру", отложил мое знакомство с этим явлением на полгода. И как я теперь понимаю весьма продуктивных для тех кто в теме. Но мой вопрос о другом. Торговать на этом рынке, при помощи классического тех.анализа... "Я Вас умоляю", нет еще никого тех анализа. Просто рынок еще очень молодой и своих исторических хаев и лоев у него просто нет. Как только более менее освоюсь тут, открою блог для трейдеров с "игрового автомата Форекс МТ4". Там по полочкам разложу, где этот рынок и где тех. анализ. Вопрос у меня вот о чем. В классическом форекс, принято новый продукт, выкладывать на тестовый период, где все под свою собственную ответственость торгуют или не торгоют "ботом "и высказывают свои пожелания и замечания. Поэтому предлагаю, Вам как разработчику первого вменяемого алгоритма, сделать что-то подобное, или хотя бы если вам это не интересно, как... это правильно сказать, что то типа ботов с Форекс с открытым кодом и каждый пусть сам делает настройки на свой страх и риск. Но уже не придется изобретать велосипед с нуля. Хотя языки "программеров" теперь придется учит по любому. Как-то так...
Привет. Автор статьи не упоминал эту биржу, но у нее есть своя тестовая площадка.
https://testnet.bitmex.com
Может попробовать робота написать для этой биржи?
И вам Привет. Я не умею писать ботов. Я практик с форекс.И если есть хоть одна "вменяемая" биржа криптовалют. К которой прикручен терминал для торгов типа мт4 или мт5. Указал эти просто потому, что они у всех на слуху, но по факту, это не важно. Важно что бы это был терминал который ты можешь установить на свой ПК. И тогда по алгоритмам торгов можно будет создать армию ботов на любой вкус и цвет. А пока все эти привязки к Ай-Пи биржам ... для меня "темный лес". И изучать его лично мне пока незачем. Поэтому жду биржу с терминалом. Наверное и "Примус" этого ждет-с. Как-то так
В качестве P.S. Некоторые форекс-брокеры пытаются сейчас создавать,( внедрять!), мульти-терминалы для торговли всем от CFD + валютные пары+ (BTC-USD - убого и не понятно откуда котировки и вообще...), но пока это у них в стадии разработок. Но понимая, что крипто-это инструмент без которого от них уйдут трейдеры. Думаю что будут первые в этой области. Так-что трейдеры, ( не путать с инвесторами!), ждем-с и смотрим на этот "дикий рынок". И как только появятся "правила игры"...:-)
Примус, напишите, пожалуйста, на каком языке программа? Или это веб сервис?
@primus, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:
Почему приведена одна сделка. покажите работу бота за несколько дней, вы ведь его не вчера написали :)
но направление интересное, будем наблюдать.
Дадите попользоваться вашим ботом ?
посмаковал статьей! Отлично изложено, блок-схему не до конца правда, так как не силен еще в трейдинге. Жду продолжения. Кстати вчера переводил статью о Enigma-Catalyst, как будто идеи где-то пересекаются. Оставлю ссылку, может кому-то будет интересно почитать: https://golos.id/ru--kriptovalyuty/@novy/enigma-catalyst-platforma-agloritmicheskogo-treidinga
Будет здорово, если автор напишет простого учебного бота на котором можно было бы тренироваться и развивать его самому.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yefet, knopki, gidlark, vlad, litrbooh, ukrainian, neo, oleg257, dreamer, vik, shuler, genyakuc, amikphoto, nefer, romannn, lira, voltash, karusel1, asuleymanov, exan, retoldname, yuriks2000, boltyn, acidgarry, on1x, vika-teplo, lenutsa, anatolich, optimist, del137, mixtura, manavendra, makcum52, novy, dimas102, nerengot, dim447, now, jebosheer, shenanigan, mirumir, wedge, nod, karmoputnik, dunsky, gbot, ikana
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
А бота вашего можно как-то приобрести? А то не все умеют программить, пусть даже на простейшем уровне .
Возник еще один вопрос:
Если одна и таже пара в разные дни имеет одинаковый объем торгов, но разные спреды, то у той что спред больше будет приоритетней?
Бот не анализирует спреды в разные дни - он смотрит только на текущее состояние рынка.
И ещё важен не абсолютный спрэд, а относительный.
И да, если объём торгов одинаковый, то приоритет будет отдан монете, у которой больше относительный спред. Просто потому, что с этой монеты получается большая прибыль на круг.
если правильно понял, то чем больше спред, тем больше волатильность.
Вот отдельное спасибо за выбор ликвидных пар!
Еще можно при покупке сразу выставлять profit limit и не париться по поводу продажи! Хотя есть вероятность, что прибыли будет меньше) Но алгоритм будет однозначно проще.
Я новичок в торговле. Написал простейшего бота. Он делает примерно тоже самое (ликвидность пар не учитывает). Он наблюдает все пары, если видит что какая-то пара начинает быстро расти - покупает ее. А продает ее только если выгодно (%комиссии+min profit) , когда цена начинает падать. Т.е. фактически бот пытается словить вершину цены. Соотвественно, наблядать за рынком он должен постоянно).
В общем, работает он чуть меньше суток. Есть какой-то минимальный профит. Поглядим, что будет дальше.
А Вам спасибо за статью!!
@slava7450745 - ты что-нить автоматизировал ?)
а что в логике этого алгоритма обеспечивает прибыльность торговли? на первый взгляд непонятно почему он будет торговать в плюс как на растущем так и на падающем рынке?
можно как-то подробнее пояснить в чем плюсовость такой стратегии. почему убытки от закрытых минусовых ордеров не превысят в один момент прибыльные сделки?
Смотрите - бот снимает спред на ликвидных парах - это его заработок. И даже если рынок глобально падает, то всё равно есть колебания вокруг линии тренда и даже на падающем рынке бот получает часть прибыли.
У меня была идея, состоящая именно в том, чтобы исключить необходимость анализа текущего тренда цены. И даже в таком простом приближении на практике результат себя оправдал.
Опять же - вы всегда можете добавить анализ линии тренда и ставить ордера на покупку только в случае растущего или стабильного рынка.
Тот же STEEM из примера сейчас вполне себе планомерно падает:
Но это не помешало боту сделать на нём +5.4% за сделку в течение часа.
а по какой причине тогда если такая простая стратегия стабильно ведет в плюс, вокруг все не делают аналогичных ботов? есть же торговые боты и никто из них постоянно в плюс не торгует..
то есть если такая простая модель работает, почему она не пошла в массы?
Увы, у меня нет ответа на этот вопрос.
Я не могу говорить за всех, могу говорить только за себя. У меня бот на таком алгоритме нормально работает.
С другой стороны, я могу задать вам аналогичный встречный вопрос: почему, зная что за криптовалютами будущее и курс их растёт на сотни процентов в год, люди продолжают нести свои сбережения в Сбербанк под 6% годовых?
Спасибо. Отлично описан алгоритм, хоть прямо сейчас садись и пиши своего бота... Но зачем писать своего, если автор это уже сделал. @primus а вы не продаете (сдаете в аренду) свой бот?
Вот это уже надо репостить ;) Спасибо. Отличная вводная для нового выводка Остапов. Пускай развивают творческое мышление и учатся применять его на практике ;)
Подпишись и лайкай посты все взаимно)
Ничего не понял, но всё равно спасибо за труды )))
@primus я тоже не сильна во всех этих знаниях торговли на биржах))). Так пишу для души, а если что-то накопится, то не глядя на курс вывожу))). Все равно не особо понимаю). Это нужно скорее всего тем, кто торгует на биржах)).