Как написать своего трейдинг бота на Go, а главное зачем?

Давайте начнем с экономии вашего времени, кнопки «Бабло» — нет.
Если интерес еще не пропал и вы, как и я любите наблюдать за красными и зелеными свечами, давайте разбираться глубже. Большинство людей, которые пытаются написать торгового‑бота, делают это хаотично: отправляют космический промпт ИИ, пишут код, запускают на реальный счёт, сливают и бросают. Грешен, тоже так пробовал.
Но интерес к рынку и торговле не пропал и со временем я выработал понятный процесс, который помогает последовательно пройти все этапы: от выбора стека до запуска.
В этой статье я разберу весь процесс по шагам:
Какой стек выбрать и почему я остановился на Golang
Как выбирать и формализовать стратегию
Какую архитектуру использовать, чтобы не запутаться при развитии бота
Как правильно тестировать стратегию
Тут я оставлю ссылку на GitHub — где лежит пример шаблона инфраструктуры, который сильно упрощает вход в этот процесс. Если вы хотите научиться не просто «писать бота», а уметь быстро тестировать разные стратегии/гипотезы и находить те, которые действительно работают — эта статья для вас.
1. Выбор стека: Почему Golang?
Да простят меня питонисты, но для серьёзного трейдинг‑бота я выбрал Golang и вот почему. Когда бот работает 24/7, торгует одновременно на десятках пар, обрабатывает вебсокеты и должен реагировать максимально быстро — Go даёт ощутимое преимущество.
Основные причины моего выбора:
Производительность и низкое потребление памяти Go отлично справляется с высокой конкурентностью. Один процесс может без проблем держать сотни вебсокетов и обрабатывать тысячи событий в секунду.
Один бинарный файл: Скомпилировал — закинул на сервер. Не нужно думать про Python‑окружение, версии библиотек и зависимости.
Отличная поддержка concurrency — это очень удобно для параллельной работы с разными торговыми парами и модулями (сбор данных, анализ, исполнение ордеров).
Скорость разработки: На первых порах Go кажется медленнее Python, но после написания инфраструктуры скорость написания новых стратегий становится очень высокой.
Конечно, Python всё ещё выигрывает в скорости прототипирования и в количестве готовых библиотек. Если вы только учитесь и хотите максимально быстро проверить идею — Python будет проще. Но если вы планируете долгосрочный проект — Go сильно выигрывает на дистанции.
2. Выбор стратегии
Прежде чем писать код, нужно чётко понять и формализовать стратегию. Это один из самых важных этапов. Если стратегия плохо описана — потом будет очень сложно тестировать и отлаживать.
Любая торговая стратегия в боте состоит из четырёх основных частей:
Анализ рынка: Какие данные мы собираем и как их обрабатываем (свечи, объёмы, ордербук, индикаторы, уровни и так далее).
Поиск сигнала (паттерна): Конкретные условия, при которых бот должен рассмотреть вход в позицию.
Подтверждение сигнала: Дополнительные фильтры, которые снижают количество ложных входов (например, тренд‑фильтр, фильтр волатильности, корреляция с BTC и так далее).
Управление позицией:
Правила входа (маркет / лимит, размер позиции, плечо)
Take Profit и Stop Loss (фиксированные, динамические, трейлинг)
Выход по времени или по противоположному сигналу
Правила добавления/усреднения (если используются)
На просторах интернета, есть огромное количество хорошо описанных стратегий. И это не значит, что они «не работают». Часто им просто не хватает вашего личного взгляда на управление рисками, фильтрацию и адаптацию под текущую реальность.
Кстати о текущих реалиях. Сейчас в интернете очень много псевдоторговых «правил», которые когда‑то были рекомендациями трейдеров с традиционных рынков 80–90-х, но на рынке 2026 года они часто теряют смысл. Вот несколько популярных примеров:
«Риск/Прибыль должен быть минимум 1:3« — это не правило, а просто арифметика. Матожидание сделки считается так: МО = (Вероятность успеха × Прибыль) — (Вероятность убытка × Убыток). При RR 1:1 безубыточность достигается уже при 50% успешных сделок (без учёта комиссий). С комиссией потребуется около 51% — и стратегия уже в плюсе. Если ваша стратегия стабильно даёт 51% при RR 1:1 — она прибыльна. Никаких сакральных „1:3“ не нужно. Выбирайте соотношение под свой винрейт, а не под цифры из интернета.»
«Не торгуй ночью / до открытия американской сессии» — Крипта работает 24/7, и волатильность действительно меняется от сессии к сессии. Но это не означает, что торговать можно только на сильных движениях. Если рынок открыт — значит, есть стратегии, которые зарабатывают и при низкой волатильности. Суть не во времени суток, а в том, нашла ли ваша система закономерности в текущем рыночном режиме. Тестируйте на всех часах и доверяйте только статистике, а не устаревшим правилам.
«Никогда не усредняйся» Очень популярный совет. В некоторых стратегиях усреднение действительно опасно, а в других (особенно mean‑reversion) оно является важной частью edge. Всё зависит от контекста.
«Торгуй только по тренду» Звучит солидно, но в крипте тренды часто бывают короткими и резкими. Многие прибыльные стратегии отлично работают именно на откатах и в range.
Берите чужие идеи за основу, но обязательно адаптируйте их под себя. Не слушайте непонятные вам правила. Лучшая стратегия — это та, которую вы полностью понимаете и можете обосновать каждое правило.
3. Архитектура бота
Прежде чем писать код «в лоб», важно продумать структуру проекта. Если всё свалить в один-два файла, то уже через неделю будет сложно что-то добавить или отлаживать.
Я использовал подход, близкий к Clean Architecture (слоистая архитектура), но в упрощённом виде - чтобы было понятно даже новичкам.

Почему именно такая архитектура?
internal/ — всё важное скрыто от внешнего мира (стандарт Go).
domain/entity/ — здесь описаны основные сущности, они не зависят от бирж и баз данных.
exchange/ — через интерфейс Client можно легко добавить Bybit, OKX и другие биржи.
strategy/ — самое важное место для пользователя, новую стратегию можно легко добавить или поменять на другую.
marketdata/ — отвечает только за получение и хранение свечей (WebSocket + резервный polling).
Разделение ответственности позволяет тестировать стратегию изолированно.
Как всё работает вместе (простая схема)
main.go загружает конфиг и запускает Bot.
Collector (marketdata) получает свечи и отправляет их через канал.
Bot принимает свечу и передаёт её в текущую стратегию.
Стратегия возвращает Signal (Buy / Sell / None).
Executor исполняет ордер и логирует сделку.
Notifier отправляет сообщение в Telegram.
Такой подход делает код гибким и понятным.
Ключевой интерфейс стратегии:

Всё, что вам нужно - реализовать этот интерфейс, используя свою стратегию. Вот ссылка на шаблон https://github.com/KitoKent/go-trading-bot/tree/master
4. Как тестировать?
Да unit и интеграционные тесты, это очень хорошо и важно, но мы сейчас не про них.
Итак, вы написали шаблон, выбрали биржу, написали стратегию и готовы к запуску. Сейчас ваша главная цель это быстро протестировать вашу гипотезу и понять работает ли она.
Бэктест на исторических данных
Первым делом, можно запустить тест вашей стратегии на исторических данных, в шаблоне, который я реализовал в гите, ее можно найти в backtest. Там она достаточно в сыром виде и ее надо будет исправлять под ваши желания и саму стратегию, моя цель была показать как это можно сделать.
Суть простая, вы выгружаете n кол‑во свечей, по любому TM (Time Frame), по любой паре и прогоняете эти свечи через вашу стратегию, как будто данные приходят в реальном времени только намного быстрее, стратегия реагирует на поступающие свечи и якобы открывает и закрывает позиции, так как она бы сделала это на проде.
Например, вы задаете псевдо баланс в 1000$ выгружаете 1000 свечей с 15tm у BTC (это порядка 250 часов ) и поочередно с конца отправляете в вашу стратегию, каждая сделка, которую ваша стратегия открывает и закрывает, записывается в счетчик, с соответствующим доходом и убытком.

В таком тесте есть пара минусов:
Он не учитывает комиссию биржи
В реальности, могут быть так называемые проскальзывания, когда цена резко движется в одном направлении, и реальный ордер может просто не сработать
Переобучение (overfitting). Легко подогнать параметры стратегии так, что на истории она покажет фантастический результат, но на новых данных полностью провалится. Бэктест не предупреждает об этой ловушке — только перекрёстная проверка на разных периодах или out‑of‑sample тест.
Но, это всего лишь первый шаг, и он должен вам показать, что ваша стратегия, вообще способна открывать и закрывать сделки, поэтому не стоит сразу ставить клеймо на вашу гипотезу.
Живые данные без риска: демо‑счет
Далее можно переходить на тестирование c реальными данными. Небольшая поправка, некоторые еще для тестов используют метод, где вы получаете реальные данные, но сделки открываете понарошку, считаю этот метод не очень эффективным и его можно скипнуть, ведь почти на каждой бирже есть демо‑счет.
Как достать api ключи из биржи я тут показывать не буду, есть много гайдов в интернете, единственное api продовый с вашим реальным балансом и api с демо счета это разные ключи, поэтому не перепутайте.
Когда ключи получены и прописаны в .env (не пушьте их в репозиторий, даже демо‑ключи — используйте .gitignore), начинается игра по‑взрослому.

Теперь на демо‑балансе вы видите реальные ордера, которые можно отслеживать прямо на бирже. Здесь важно быть честным с собой:
Заметили странность в логике? Зафиксируйте, чтобы разобраться.
Позиция открылась не там, где должна была по вашей идее? Запишите, даже если она закрылась в плюс — не занимайтесь самообманом.
Ускорение тестов: мультипараллельный прогон
Очень помогает одновременный запуск бота на множестве пар с выделенным балансом на каждую. Например, в своём рабочем окружении я запускаю 25 пар одновременно — 25 независимых ботов следят каждый за своим символом и торгуют строго в рамках выделенного бюджета. Это в разы ускоряет процесс проверки гипотез.

Итог
Когда стратегия прошла бэктест и обкатку на демо‑счете, и вы уверены, что баланс не обнулится при первой сделке, можно переходить на прод‑API биржи. Но даже в этом случае советую оставлять на счету только ту сумму, которую вы морально готовы передать в управление алгоритму.
Весь описанный процесс — от идеи до запуска — я прохожу прямо сейчас. Если хотите наблюдать за разработкой в реальном времени со всеми успехами, провалами и багами, заходите в мой Telegram‑канал: https://t.me/MnogoPontiy. Там я делюсь честной статистикой, более глубокими деталями реализации и отвечаю на вопросы по коду.