Как я арбитражного бота писал.
Здравствуйте, дорогие друзья! Это мой первый пост, не судите строго.
Не помню, когда я узнал о биткоине, но помню, что узнал о нем по телевизору и стоил он тогда, как мне казалось, бешенных $600. В тот день по телевизору говорили о том, что некий политик обладает новой, электронной валютой. Это и был биткоин. Женщина-журналист удивилась, что политик в своей декларации указал количество биткоинов очень точно, до одной десятитысячной. Я, наверное, как и она, тогда еще не знали, что биткоин делится на сатоши. Тогда, они обсуждали о том, что это криминальная валюта, что ее используют для торговли наркотиками, оружием и другими незаконными вещами. Информация о том, что на эту валюту положили глаз хитрые политики, а также что эта валюта замешана в криминале из-за ее анонимности, меня сразу толкнула на мысль что у этой валюты есть будущее.
Я начал искать информацию о биткоине и тогда же я узнал о майнинге, трейдинге, кранах криптовалют, ну и о том, что биткоины делятся на сатоши=). В течении нескольких дней я узнал, что моя видеокарта тут не рулит и майнить биток (сокращенно от биткоин) я не смогу. И я решил просто взять и купить биткоин. Я порылся в интернете и нашел биржу bitfinex. Выделив часть денег из стипендии, я купил через обменник 0.01 биток. Чем я только не занимался, и покупал скорости на бирже скоростей nicehash, и майнил форки в minergate, но ничего существенного я не заработал. В очередной раз, когда я понес убытки на nicehash я решаю вывести биток назад в фиат. Эти деньги я потратил, когда мы с друзьями поехали на 3 дня в лес. Это было круто проведенные время, но когда я приехал и отдохнул несколько дней дома, то биток уже стоил $2000. В тот момент я начал нервничать, боялся опять покупать биткоин, но это произошло.
Прошло несколько месяцев, и я заметил, что на разных биржах цена на биткоин и форки не всегда одинакова. У меня появилась идея покупать какой-то коин на одной бирже, а продавать на другой, где он сейчас стоит дороже. Я тогда еще не знал, как это называется. Через какое-то время, я нашел видео на ютубе, человек описывал мою идею, и он сказал, что это называется арбитраж. Теперь, уже зная крутое слово, я открыл 2 вкладки с разными биржами (Bittrex и Bitfinex) и ждал пока цена начнет расходится. Такие расхождения происходили, но я банально не успел посчитать рентабельность сделки, и я на это плюнул. После этих событий я несколько ночей плохо спал. Я точно был уверен, что арбитраж на крипто биржах возможен и что это легкие деньги, но то, что я не мог его реализовать, это меня угнетало.
И в один момент меня осенило, я же знаю язык программирования СИ!, я же могу бота написать, я же знаком со средой разработки C++ Builder. В программировании я-самоучка. И в планах было реализовать такую идею: бот следит только за одной парой на двух биржах, каждые 10 секунд бот скачивает странички, с выбрано парой, на обеих биржах, потом он парсит цены и в случае если есть возможность, то он принимает решение осуществить арбитраж методом симуляции нажатия кнопок и симуляции кликанья мышкой. Алгоритм смешной, но даже его я не смог реализовать и палки в колеса мне совал протокол https, из-за него я не мог скачать страницы. Builder был удален, я ушел в депрессию.
Через какое-то время, случайно, я узнал, что биржи предоставляют API и что мой алгоритм был извращенским. Так же, я принял решение изучить, что-то новое и установить Qt Creator вместо дедушки Builder-a который был популярен в далеком 2006 году, а мне тогда было всего 10.
Qt меня обрадовал, я просто на лету осваивал С++ и ООП. Уже через неделю я решил писать бота обратно. Я выбрал уже не одну, а сразу три пары криптовалют. Решил торговать к эфириуму. Как только я начал писать первые строчки, они сразу заставили меня вернуться к идее торговать на одной паре, так как чувствую себя слабовато в роли программиста.
Кстати вот те самые первые строчки кода:
Торговать решил пару OMG-ETH. Быстро накидал интерфейс.
Писал для себя, поэтому даже иконку не добавлял. После открытия приложения сразу нужно было ввести ключи. После того, как вы их ввели, нажимаем login. Если все в порядке, то форма с авторизацией пропадет, станет активна кнопка Start и мы получим наши балансы.
Выглядит это так:Сразу объясню, что бот не переводит деньги с биржи на биржу. Тут все было задумано проще и поэтому гениально. На одной бирже мы должны иметь ETH, а на другой OMG. Когда в этом есть смысл, то на одной бирже бот меняет ETH на OMG, а на другой - OMG на ETH, но по более привлекательном курсу.
Таким образом, OMG как-бы перекачивается с одной биржи на другую, то же самое происходит и с ETH. При этом мы ничего не переводим, а значит и не платим комиссий за этот самый перевод, только за исполнение ордера на биржах. И из-за разницы курсов, получаем немного больше коинов чем было изначально.
Вернемся к боту.После нажатия на кнопку Start, бот начинает мониторить цены и выставлять ордера на покупку и продажу на биржах в случае если цена разная. Для моментального исполнения сделок покупать бот будет по цене Ask, а продавать по Bid. Поэтому, бот ожидает пока Ask на одной бирже будет меньше чем Bid на другой, так же он ждет, чтобы разница была больше чем комиссия на биржах, плюс процент с желаемой прибылью. Это нужно, чтобы не уйти в минус
.На рисунке, зеленым показаны цена на биржах по которой готовы купить(Bid), а красным- цены по которых готовы продать(Ask). Cлева показана ситуация на двух биржа, когда Ask на одной из бирж не больше Bid-a другой. Арбитраж в такой ситуации не возможен.
А на рисунке справа, показана ситуация, когда Ask на левой бирже меньше Bid-a на правой. Не обращая внимания на комиссии можно сказать, что арбитраж возможен.
Прошу извинения, если картинки не понятны Вам, но в своей голове я все воспроизводил именно так.
Если показатель prof будет больше чем комиссия за выполнение сделки на обеих биржах, плюс желаемая прибыль, то бот выставляет ордера на биржах.
Бот покупает по ask2 , а продает по bid1. Все свои действия бот записывает в поле внизу приложения. Когда ордера исполнились, бот начинает ждать момента, чтобы провести сделку в обратном направлении.
Если вам понравилась статья и вы желаете узнать: как бот показал себя в работе, с какими проблемами я столкнулся и как я их решал, то напишите это в комментариях и поддержите меня голосами.