Алгоритмический трейдинг с помощью телеграма или как я нашел идею для своего первого проекта

Всем привет! Написать статью побудило желание провести небольшую ретроспективу: рассказать про свой первый опыт в разработке, как я к этому пришел, какие препятствия возникали на пути и какими выводами я хотел бы поделиться.

Я, как и многие, начал интересоваться криптой в момент первого бума в 2013 году: первый майнинг на двухчиповых радеонах HD7990 в старых компьютерных корпусах, первые сделки уровня "закупился на хаях - прокатился на ***" на печально известной BTC-E, первые встречи с мошенниками на Авито при попытках урвать 890 гигабайты с 5 pci-e слотами по дешевке. Продолжалось это недолго, майниниг быстро перестал быть сильно прибыльным, и интерес начал падать. В 2016 я вывел остатки биткоинов с биржи, продав их по 400 долларов.

Наступил 2017, а вместе с ним новая лихорадка, скупка видеокарт, постройка уже "серьезных" ферм на алюминиевых уголках. К трейдингу интереса всё так же не было, все эти бычий-медвежий тренды, пробитие сопротивлений и поддержек и прочее были для меня темным лесом и чем-то из слэнга чуваков с Уолл-Стрит.

Скриншот из лекции про особенности восходящего клина в нисходящем тренде
Скриншот из лекции про особенности восходящего клина в нисходящем тренде

Майнинг же всё это время показывал хорошие результаты, позволяя что-то зарабатывать даже в "непрофитные" 2018-2020 годы. В 2021 нас ждал очередной булран с очередным этапом безумной скупки всевозможной компьютерной комплектухи, постройкой ферм для дяди Васи, у которого завалялся миллион рублей, и который ничего в этом не понимает, и ожиданием битка по 100к. Будучи по профессии сисадмином-эникейщиком, мне уже тогда начало поднаедать возиться с железом, и я начал двигаться в сторону изучения кодинга и шерстить всевозможные курсы по Python, JS, CSS, HTML. Как в итоге оказалось - поздновато, рынок после 2020 года уже перенасытился свежевыпущенными выпускниками различных курсов, которых тогда расхватывали как горячие пирожки. Некоторые из моих знакомых получили офферы в западные компании, даже не закончив обучение до конца.

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

В 2023 году мы берем в охапку ребенка, котов и уезжаем из страны. Первое время после переезда преследует жуткий стресс, чередующийся с апатией. Я беру себя в руки, заканчиваю очередной курс по Пайтону, готовлюсь и сдаю кэмбриджский экзамен по английскому, и, обмазавшись всевозможными сертификатами, начинаю пытаться искать работу за границей, но тщетно. Сказывается всё тот же перенасыщенный рынок, большое количество уехавших синьоров-помидоров, отсутствие вменяемых ПЕТ-проектов в портфолио и опыта в продакшне, ну и паспорт РФ в поиске, разумеется, никак не содействует. На сотню разосланных резюме приходится несколько отрицательных ответов, заваленный техсобес в ТП из-за того, что не смог рассказать теорию о порядке поиска DNS-ом нужного айпи (хотя странно, ведь практически я знал, как устранять подобные проблемы) и оффер преподавателем Пайтона в школу программирования за 250 рублей в час. В таких условиях приходит понимание, что нужно рассчитывать только на себя.

Конец 2023 года и очередной виток роста крипты подсказывает мне идею, куда можно попробовать двигаться дальше. Я достаю из загашника намайненные эфиры, которые начинаю пытаться подороже продать, а потом подешевле откупить (подождите, это что, и есть "трейдинг"?!)

Илья как бы одобряет такую стратегию
Илья как бы одобряет такую стратегию

Январь-февраль-март проходят в сладком забытье, где я делал по 70-80% в месяц на трейдинге, думая, что поймал птицу счастья за хвост. За ними приходит апрель и приносит нам атаку на Израиль, панику на рынках, а мне лично - значительные убытки.

Промаявшись в очередном стрессе неделю и оценив дальнейшую бесперспективность этого занятия, я решил, что нужно делать что-то конкретное. Например, реализовать то, что давно хотел - взять идею бота-скринера крипто-бирж в ТГ, которую я увидел у одного из продавцов успешного успеха, и модернизировать её. Такой бот собирает различные биржевые данные и присылает пользователю уведомления о событиях на биржах по заранее настроенным параметрам. Идея интересная, но мне же в таком боте не хватало более гибкой настройкой сигналов, а самое главное - была мысль, что было бы неплохо иметь возможность сразу же открывать по таким сигналам позиции, привязав свой аккаунт на бирже. Вспомнив свои навыки по выводу "Hello, world" в консоль и сортировке массивов и обложившись инфой с интернетов, я засел за работу. Внезапно задача начала меня увлекать, появилась мотивация, исчезли стресс и апатия. Теперь каждый день передо мной стояла какая-то новая проблема, которую предстояло решить, и которую, в отличие от происходящего кругом хаоса, МОЖНО было решить, начиная как с простых: работа с АПИ телеграмма, интерфейс, реализция БД, алгоритмы перебора данных, и заканчивая более сложными: общая архитектура проекта, отказоустойчивость, масштабируемость, обработка ошибок, разведение задач по процессам, обмен данными между ними, гонки потоков. Я познакомился с работой с API, REST и Websocket стримами, прохавал асинхронность, мультипоточность и мультипроцессинг.

Пример сигнала со скринера - Поиск пампов цены
Пример сигнала со скринера - Поиск пампов цены

После того, как я получил более-менее вменяемый вариант скринера бирж, я начал думать над прикручиванием к нему функционала трейдинга. Задача поначалу показалась сложной, так как бот собирает данные с нескольких бирж (Bybit, Binance, Mexc и BingX), то, соответственно, и инструментарий трейдинга нужно делать для каждой из них. В этом очень помогли ребята, которые пилят библиотеку CCXT, они делают действительно великое дело для всех алготрейдеров.

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

Но основная работа всё равно велась, баги устранялись, а бот потихоньку обрастал пользователями и появлялся новый функционал: усреднения и удобная их настройка, трейдинг на споте и демо-трейдинг в тестовых сетях, внедрение пользовательских WS-стримов и моментальный перехват событий с биржи, скраппинг делистингуемых и листингуемых монет, мульти и скользящие тейк-профит ордера, разбиение настроек скриннинга и трейдинга по различным биржам.

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

А добавление новых индикаторов в скринеры, основанных на свечном анализе (например, RSI) потребовало проработки алгоритма запросов к биржам и учета лимитов.

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

Алгоритмический трейдинг с помощью телеграма или как я нашел идею для своего первого проекта
Алгоритмический трейдинг с помощью телеграма или как я нашел идею для своего первого проекта

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

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

Итак, что мы имеем спустя полгода? Помимо всего вышеописанного, я освоил Docker и научился создавать контейнеризированные приложения, выучил SQL гораздо лучше, чем это было на курсах без практической постановки задачи, научился пользоваться git-ом и github, освоил азы bash и powershell для развертывания своего приложения на линуксовом сервере, понял, зачем нужен Redis и производительные БД, работающие в оперативке.

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

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

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

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

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

Начать дискуссию