Как я написал трейдинг‑бота на Go: от идеи до реальных денег

Как я написал трейдинг‑бота на Go: от идеи до реальных денег

Большинство людей, которые пытаются запустить алгоритмическую торговлю, действуют одинаково: видят красивую идею в Запретграме или РоскомТубе и просят ChatGPT написать код, запускают на реальном счёте и сливают депозит за вечер. После этого наступает разочарование — «алготрейдинг не работает».

Начнем с экономии вашего времени - кнопки "Бабло" нет.

Я сам через это прошёл. Несколько раз. Но интерес к рынку не пропал, и со временем я понял: проблема не в рынке и не в инструментах. Проблема в отсутствии бизнес‑процесса — понятной последовательности шагов, которая превращает сырую гипотезу в работающий продукт, приносящий деньги (или, как минимум, не убивающий депозит).

В этой статье я опишу свой процесс создания и запуска трейдинг‑бота как продукта: от формализации гипотезы до безопасного вывода в реальную торговлю. Без магии, без кнопок «бабло», с реальной статистикой и ссылкой на GitHub, где лежит шаблон, ускоряющий разработку.

1.Выбор инструмента

Я как разрботчик, с приличным стажем, чуть подушню с выбором стека.

Для меня трейдинг‑бот — это не pet‑project, а инструмент, который должен работать 24/7, масштабироваться на десятки пар и не жрать бюджет на сервер. Поэтому я выбрал Golang.

С точки зрения бизнес‑логики выбор выглядит так:

  • Операционные расходы. Go‑приложение потребляет в разы меньше памяти, чем аналогичное на Python. Один сервер за $10–15 в месяц спокойно тащит 50+ параллельных стратегий. Для сравнения: Python с asyncio и pandas на таком же количестве данных начинает задыхаться, и вам либо придётся оптимизировать код, либо платить за более мощное железо.
  • Масштабирование. Благодаря горутинам (легковесным потокам) я могу запустить мониторинг сотен пар, не переписывая архитектуру. Это значит, что при появлении новой рыночной гипотезы я просто добавляю ещё одну пару в конфиг, а не тюнингую пул потоков.
  • Развёртывание. Один бинарный файл — закинул на сервер и запустил. Никаких виртуальных окружений, конфликтов зависимостей и «оно локально работало». Это экономит часы при каждом обновлении.
  • Скорость итераций. Первый прототип на Go пишется дольше, чем на Python. Но когда инфраструктура готова (шаблон из GitHub), проверка новой стратегии сводится к реализации одного интерфейса. Время от идеи до запуска на демо‑счёте сокращается до нескольких часов.

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

2. Стратегия — это бизнес‑гипотеза, а не магия

Любая торговая стратегия — это, по сути, гипотеза: «Если рынок ведёт себя определённым образом, то я открою позицию и с вероятностью X получу прибыль Y». Задача предпринимателя — быстро и дёшево проверить эту гипотезу, прежде чем ставить на неё реальные деньги.

Я формализую каждую идею через четыре блока:

  1. Данные. Что мы анализируем: свечи, объёмы, стакан, индикаторы, корреляции.
  2. Сигнал. При каких конкретных условиях мы входим в сделку.
  3. Фильтры. Что может отменить сигнал: низкая волатильность, определённое время суток, сильная корреляция с BTC в момент входа.
  4. Управление позицией. Размер плеча, фиксированный или динамический стоп‑лосс, тейк‑профит, правила усреднения (если они есть).

Такой подход превращает расплывчатую идею в чёткий алгоритм, который можно тестировать и улучшать.

Мифы, которые мешают

Когда я только начинал, я нахватался «правил» из интернета, которые на деле оказались вредными. Вот несколько примеров, которые стоит переосмыслить с точки зрения бизнес‑логики:

  • «Risk/Reward должен быть минимум 1:3». Это не закон, а математика. При соотношении 1:1 и винрейте выше 50% (с учётом комиссий) стратегия уже прибыльна. Если ваша система стабильно даёт 51% успешных сделок при RR 1:1 — она зарабатывает. Не нужно гнаться за сакральными цифрами.
  • «Не торгуй в азиатскую сессию». Рынок крипты работает 24/7. Да, волатильность меняется, но это не значит, что стратегия не может зарабатывать на спокойном рынке. Тестируйте на всех часах, а не верьте штампам.
  • «Никогда не усредняйся». В одних стратегиях усреднение — верный путь к сливу, в других (например, в mean‑reversion) — это ключевой элемент преимущества. Всё зависит от контекста.

Вывод: Лучшая стратегия — та, которую вы понимаете и можете обосновать. Берите чужие идеи, но адаптируйте под свою толерантность к риску и текущий рынок

3. Архитектура как фундамент продукта

Когда у вас есть формализованная гипотеза, возникает соблазн быстро набросать скрипт и запустить. Но без продуманной архитектуры ваш продукт превратится в монолит, который страшно трогать. Я использую модульный подход, который позволяет менять стратегии как перчатки, не затрагивая инфраструктуру сбора данных или исполнения ордеров.

В своём шаблоне на GitHub я заложил следующую структуру:

  • marketdata — отвечает за получение свечей по WebSocket (с fallback на polling), ничего не знает о стратегиях.
  • strategy — сердце системы. Всё, что нужно для новой идеи — реализовать интерфейс с тремя методами: инициализация, обработка свечи, остановка.
  • execution — исполняет ордера, управляет рисками, считает PnL.
  • notifier — отправляет оповещения в Telegram о сделках, ошибках, состоянии бота.
  • backtest — «машина времени», которая позволяет прогонять стратегию на исторических данных за секунды.

Такая архитектура даёт главное бизнес‑преимущество: скорость итераций. Захотел протестировать новую гипотезу — написал в strategy, и бот уже торгует на демо‑счёте. Никакой возни с вебсокетами и базой данных.

4. Тестирование как процесс валидации гипотезы

Код написан, архитектура не мешает — теперь самый важный этап: проверить, способна ли стратегия зарабатывать. Я прохожу три уровня валидации, каждый из которых даёт всё больше уверенности.

Уровень 1: Бэктест

Это быстрая проверка на исторических данных. Выгружаете N свечей (например, 1000 штук по 15‑минутному TM), задаёте виртуальный баланс в $1000 и прогоняете через стратегию. Через пару секунд у вас на руках:

  • количество найденных паттернов,
  • число прибыльных и убыточных сделок,
  • итоговый баланс,
  • винрейт,
  • максимальная просадка.

Например, один из моих недавних прогонов по паре ZECUSDT показал около 15 сделок за 250 часов истории, винрейт ~53%, итоговый PnL +0.97 USDT (без учёта комиссий). Это не «грааль», но уже сигнал, что гипотеза не абсурдна.

Минусы бэктеста (о которых нельзя забывать):

  • Не учитывает комиссии.
  • Нет проскальзываний.
  • Есть риск переобучения: можно так подогнать параметры, что на истории будет идеал, а на новых данных — провал.

Я всегда проверяю стратегию на нескольких непересекающихся периодах (out‑of‑sample), чтобы исключить подгонку.

Уровень 2: Демо‑счёт

Следующий шаг — тест на реальном рынке, но без риска. Практически у всех крупных бирж есть демо‑счета. Важно: API‑ключи для демо и для реального счёта разные, не перепутайте. Никогда не пушьте ключи в репозиторий, даже демо — используйте .env и .gitignore.

На этом этапе я запускаю бота с демо‑балансом и наблюдаю за поведением в реальном времени. Фиксирую каждое отклонение от ожидаемой логики: если ордер открылся не там, где должен был по идее, или бот проигнорировал сигнал — разбираюсь досконально. Самообман здесь дорого обходится.

Уровень 3: Параллельное тестирование

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

Результаты недавнего прогона по 12 сделкам (реальные данные, демо‑счёт):

ZECUSDT +0.97 ETCUSDT +0.41 WLDUSDT +3.28 SUIUSDT +2.10 ONDOUSDT +5.33 TAOUSDT +1.68 TAOUSDT -2.91 SUIUSDT +0.01 LINKUSDT -0.02 XRPUSDT -0.49 AVAXUSDT -1.39 SUIUSDT +3.85

Итоговый PnL: +12.82 USDT. Не космос, но процесс работает. И главное — я вижу, какие пары проседают, где нужно доработать фильтры, а где стратегия ведёт себя стабильно.

5. Запуск на реальные деньги и масштабирование

Когда демо‑счёт подтверждает, что баланс не обнуляется при первой же сделке, можно переходить на реальные деньги. Мои правила безопасности:

  • Использовать только ту сумму, которую вы готовы полностью потерять. Никаких «займу у жены».
  • Начинать с минимального депозита, который позволяет открывать сделки (например, $50–100).
  • Постепенно увеличивать аллокацию по мере накопления положительной статистики.

Дальше процесс становится бизнесом: вы управляете портфелем стратегий, отключаете убыточные, масштабируете прибыльные, ищете новые гипотезы. Техническая инфраструктура на Go позволяет делать это безболезненно.

Что дальше

Я продолжаю развивать своего бота и в реальном времени делюсь результатами: прибыльными сделками, убытками, багами и инсайтами. В моём Telegram‑канале вы увидите настоящую кухню алготрейдинга без прикрас. Там же можно задать вопросы по коду, стратегиям и процессу.

А если вы хотите начать собственный проект, заберите готовый шаблон бота на Go — он сэкономит вам недели разработки:

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