Содержание
Рад приветствовать всех читателей топового блога о крипте!
В этой статье (а, скорее, даже – рассказе) я хочу поделиться с вами личным опытом создания программы-бота для работы на криптовалютной бирже. Сразу раскрою карты – с программированием на профессиональном уровне я не знаком и сложных программ никогда не писал. Но текст, по сути, и не об этом – он о том, как не бояться нового, ставить цели и добиваться их. И, если кого-то мой пример сможет вдохновить или хотя бы вызовет добродушную улыбку — это уже прекрасно.
Как все начиналось
- в новостях по радио – «биткоин установил новый рекорд за год»;
- в интернетовских новостных лентах – обсуждение роста цен на новые монеты и много-много тем про ICO;
- даже на ТВ-каналах нет-нет, да и мелькало что-то про майнинг.
Последний работодатель пропал с письмом о том, что с разработки профильного ПО их команда переключается на программы, связанные с криптовалютами. И даже Топовый блог о хайпах стал не менее Топовым блогом о крипте.
Я на минутку закрыл глаза и дал себе помечтать – чем занялся бы, если бы смог обеспечить себе достаточный пассивный доход. Как распорядился бы временем, которое не будет больше целиком проводиться в работе «на дядю», пусть даже и удаленно. Ради любопытства вбил в поисковик «криптобиржа», и среди прочих новостей взгляд зацепился за строчку о закрытии BTC-e. Еще через несколько минут после пары запросов в гугле я вышел на «наследника» соскамившейся биржи – Wex – и наблюдал размеренные волны «японских свечей» графика. И какой-то неугомонный исследователь внутри шепнул: «Смотри, как это интересно! Попробуй, ты же сможешь!»
Что именно я должен смочь и что вообще делать на бирже, я тогда представлял с трудом, но интерес не отпускал. С нулевыми знаниями финансового анализа и таким же нулевым чутьем я понимал, что торговать вручную – не вариант. Небольшой, но стабильный заработок без нервов и метания «а вот сейчас купить или не купить, продать или не продать?» казался идеальным вариантом. И еще через пару часов раздумий паззл, громко щелкнув, сложился.
Торговый бот! Вот она, мечта каждого ленивого уважающего себя трейдера! Не знающая усталости программа, торгующая на бирже 24 часа в сутки 7 дней в неделю. И, разумеется, постоянно приумножающая депозит.
Запретив себе мечтать о шкуре неубитого медведя, я начал вдумчиво изучать информацию. Во всяком случае теперь я знал, что именно я ищу и чего хочу в результате добиться.
Знакомство с биржей
Еще день или два прошли в изучении биржи и методов работы с ней. Я читал инструкции по инструментам разработчика (API), и, низкий поклон создателям биржи, там же нашел много примеров. Обнаружились готовые коды и на Python, и на PHP, и на С++/C#, и даже наработки для Excel (привет, старый добрый Visual Basic). Через некоторое время я уже мог смотреть на сделанное собственными руками окошко с динамикой курсов покупки и продажи.
Смотреть на статистику было приятно, и особых знаний такая мини-программа тоже не требовала, но к цели это не приблизило меня ни на шаг. И от публичного API я перешел к изучению торгового API. Он позволял:
- получать информацию о текущем балансе;
- выставлять отложенный ордер на покупку/продажу криптовалюты;
- просматривать сводку всех своих ордеров или данные конкретного ордера;
- отменять ордер.
Баланса еще не было. Поняв, что от теории пора переходить к практике, я зарегистрировался на бирже и пополнил счет, переведя с кошелька Advanced Cash оставшиеся после старых забав с хайпами 350 долларов. Еще день или два ушли на то, чтобы разобраться с тем, как получать ключи для торговли, отправлять через программу команды на биржу и как настроить аутентификацию через HTTP-запросы. Поначалу понятного было мало, но примеры чужих кодов, собственное упорство и всезнающий гугл помогли успешно пройти это испытание.
Поверьте – это очень приятное чувство: когда нажимаешь на кнопку в программе, и через секунду видишь в кабинете биржи торговый ордер, созданный автоматически. Начало было положено.
Круговорот валюты
И вот тут началось самое интересное. Я примерно понимал принцип работы программы, но четкой стратегии торговли еще не было. Да, разумеется: купить подешевле и продать подороже. Но когда и сколько купить? Когда и сколько продать? Как найти оптимальную точку входа и начала торгов? Все эти вопросы и еще с десяток других роем рассерженных ос клубились в голове. И ответов на них не было.
Дисклеймер: все, что касается выбранной мной стратегии, является лишь личным мнением человека, еще очень и очень далекого от принципов торговли. Не пробуйте подобное, не осознавая последствий. И не ругайте автора за незнание базовых принципов чего бы то ни было. Любым идеям и мнениям я буду рад в комментариях.
Я попробовал рассмотреть ситуацию с «механической» позиции. Иными словами, бот торгует криптовалютой полностью самостоятельно, без моего участия. С момента включения и далее постоянно. Что в это время происходит с ценой? Правильно: она может расти или падать.
Если цена падает, нужно закупить какое-то количество криптовалюты. Чтобы потом при росте курса продать ее по более выгодной цене. Если цена растет, нужно продавать купленное ранее. Все было логичным, за исключением одного «но»: наблюдая за скачкообразным ростом цены на биткоин, я подумал, что можно покупать монеты и по текущей цене, не ожидая снижения – при росте их все равно получится продать более выгодно. Впрочем, этот момент для меня до сих пор остается спорным, и в самом конце я объясню, почему.
Стоимость ордера решил сделать минимальным для данной биржи – 0,001 BTC, и сразу столкнулся с тем, что продать купленную крипту и получить обратно доллары не получится. Биржа берет комиссию в 0,2% от каждой сделки, поэтому на балансе после исполненного ордера на покупку окажется не 0,001, а 0,00998 BTC. В итоге цену ордера увеличил до 0,0011 BTC. При дальнейшем падении цены бот должен был снова и снова закупать 0,0011 BTC, пока на балансе есть средства для этого, а с приближением баланса к нулю – перестать закупать крипту и ждать исполнения ордеров на продажу. Если баланс пополнится – снова начать закупать. Шаг изменения цены для выставления нового ордера я определил в 10 долларов.
При росте цены бот, соответственно, должен продавать крипту и получать взамен фиат, но уже с определенной прибылью. Прибыль я ограничил 1% от каждой пары сделок (закупка + продажа). Жадничать и стремиться к большей прибыли не стал, так как в этом случае роста курса пришлось бы ждать долго. В то же время и уменьшать прибыль до минимума не имело смысла, так как большую ее часть «съедала» бы двойная комиссия – с покупки крипты и с ее последующей продажи.
Алгоритм работы бота для торговли криптовалютой становился все яснее и яснее:
- Запросить с биржи текущие цены покупки и продажи биткоина.
- Определить «коридор» цен с разбросом в 10$. К примеру, при цене покупки в 6573$ этим «коридором» для бота станет 6570-6580$.
- Выставить ордер на покупку 0,0011 BTC по минимальной цене «коридора» – 6570$. Если закупочный ордер по такой цене уже выставлен, ничего не делать (иначе бот будет выставлять ордера на покупку, пока не израсходует весь баланс).
- Этот пункт работает при падении цены. Проверить, есть ли на верхней границе «коридора» (6580$) ордер на покупку и исполнен ли он. Если ордер был выставлен ранее и он исполнился, создать ордер на продажу 0,0010978 BTC. Цена продажи при этом рассчитывается ботом автоматически с учетом комиссии биржи (0,2%) и желаемой прибыли (1%). Если ордер на продажу по такой цене уже выставлен, ничего не делать (иначе бот будет спамить ордерами на продажу).
- Этот пункт работает при увеличении цены. Проверить, исполнился ли ордер на продажу по самой минимальной из выставленный ботом цен. Если ордер на продажу исполнился, то снова можно выставлять соответствующий ему ордер на закупку.
- Повторять пункты с 1 по 5 снова и снова.
- …
- PROFIT!
Таким образом бот должен был формировать список из пар ордеров (на закупку и продажу) и следить за их исполнением, подстраиваясь под текущую цену крипты. Всю информацию об ордерах программа должна была записывать в файл, при каждой успешной операции покупки или продажи, соответственно, изменяя его.
В теории все должно было замечательно работать. Заставив мозг хорошенько выложиться, я даже смог обучить бота всем этим премудростям. Время летело незаметно, и от идеи до первой стратегии и до ее реализации в строчках кода прошли уже без малого две недели. Усталость давала о себе знать, но в один прекрасный момент я внезапно осознал: все, бот готов. Мозг молил о передышке, но желание опробовать программу в действии было гораздо сильнее 🙂
Испытание боем
На старт, внимание, марш!
Следующие несколько дней прошли, как в тумане. Это сейчас я вспоминаю их с неизменной улыбкой, а тогда они казались мне маленьким, но очень чувствительным адом. В программе не работало чуть более, чем все. Мозг уже напрочь отказывался понимать происходящее. Жутко хотелось спать, и запасы кофе в квартире стремительно уменьшались. Но бот учился торговать, и оставить его без присмотра на бирже против сотен других ботов я попросту не мог.
Ох, как я завидовал в те дни мирно дремавшему рядом кошаку…
Не забросить всю мою затею помогла только появившаяся «спортивная злость». Если уже потратил столько времени на изучение, стратегию, код, так уж доделай все до конца!
И прогресс с каждым днем становился заметнее и заметнее. Программа все реже вылетала с ошибками, а потом я и вовсе мог спокойно спать всю ночь, а бот работал без сбоев. Это была маленькая, но такая ценная победа! При текущих колебаниях курса накапливалось 10-15 ордеров на продажу, но в течение дня, как правило, они все исполнялись. И баланс ежедневно подрастал на доллар-полтора. Через некоторое время я осмелел и увеличил стоимость торгуемых ордеров. Прирост баланса возрос уже до 3-4-5 долларов в день. В абсолютных цифрах, разумеется, это немного. Но в относительных накапливалась неплохая прибыль – 1-1,5% от суммы баланса за сутки.
Конечно, со временем находились и другие, незаметные при начальной отладке программы, «косяки». К примеру, она вылетала с ошибкой при неправильном ответе от сервера биржи (такое случается, когда торги ведутся слишком активно). Или файл со списком ордеров, предназначенный для первоначальной загрузки бота при сбое – при выключении электричества или перезагрузке компьютера – был «криво» пересохранен программой как раз во время выключения электричества. Шанс подобного совпадения – минимален, но оно случилось, и такие случаи тоже нужно учитывать. Спас вовремя сделанный бэкап.
Вплоть до резких колебаний цен и последующего падения при новости об отмене SegWit2x бот торговал прекрасно и чуть менее, чем за 2 недели увеличил баланс моего счета на бирже почти на 15%.
А после я стал «счастливым» обладателем BTC по цене в 7500-7700 долларов. Так ли это плохо? Не думаю. С одной стороны, за время работы бот вывел баланс в полный безубыток, даже если я продам крипту по текущей цене. С другой – я верю, что курс биткоина вернется на прежний уровень и дальше будет расти, и тогда бот продолжит приносить небольшую, но ежедневную прибыль.
Спорный момент – стоит ли ради непрерывной работы и получения прибыли сейчас продавать крипту дешевле, или выгоднее ждать. Пока биткоин подешевел, как раз есть время подумать об этом 🙂 Тем более, что бот сохраняет цены с биржи в отдельный файл и я могу вдоволь изучать динамику цен за все время его работы – видны колебания курса с точностью до нескольких секунд.
В целом, направлений для доработки и развития бота теперь более, чем достаточно. Улучшать текущую стратегию или попробовать совсем новую. Или торговать не биткоинами, а другой криптой. Настроить программу для работы с API других бирж. Все это возможно. Но это уже совсем другая история.
Вместо заключения
Искренне надеюсь, что этот рассказ будет для кого-то полезным.
Он не о том, как можно научиться торговать или программировать… Вовсе нет. Я просто хотел рассказать вам о том, как важно пробовать себя в чем-то новом и не бояться неизвестного, ставить новые цели и не отказываться от старых.
Стоит сделать шаг вперед, чуть-чуть выйти за привычные рамки – и уже понимаешь, что криптовалюта повсюду. Что будущее уже наступило. И вместе с этим первым шагом начинаешь видеть для себя огромное число новых перспектив и возможностей.