cv.karha.ru
← Все проекты
Личный проект · Go · Tinkoff Invest API

Торговый робот, который не верит бэктесту

Робот для Московской биржи: портфельный бэктест по топ-30 ликвидных бумаг, 24 стратегии и проверка walk-forward с переоптимизацией на каждом окне. Главное в проекте — не доходность на истории, а честный ответ, переживёт ли стратегия новые данные.

$ go run ./cmd/optimize \ --strategy donchian_volume \ --interval 1d \ --from 2024-06-01 --to 2026-06-01 \ --top-n-sweep 10,12,15 \ --steps grid,risk,wf \ --wf-mode reoptimize
Сетка параметров, риск-настройки и walk-forward одной командой.
Бэктест и live

Движок

Один код стратегий работает в бэктесте, в песочнице брокера и в боевом режиме, который включается только явным подтверждением в конфиге.

  • Динамический universe: топ-30 бумаг MOEX по обороту, пересчитывается по запросу.
  • Портфельный бэктест на нескольких инструментах с общим кэшем и лимитом на заявку.
  • Риск: стоп-лосс и тейк-профит, ограничения позиции — одинаково в бэктесте и live.
  • Реестр стратегий: 24 стратегии (пробои Дончиана, MACD, RSI, VWAP, режимные и двусторонние) и ансамбли.
  • Кеш свечей в gob или SQLite: повторные прогоны за годы данных идут без запросов к API.
  • Отчёты: сравнение всех стратегий, grid search, сортировка по годовой доходности, CSV и JSON.
Защита от переобучения

Как проверяется стратегия

Подобрать параметры, которые красиво выглядят на истории, легко. Поэтому стратегия проходит только если держит планку и на данных, которых не видела.

IS

Подбор

Сетка параметров и риск-настроек на обучающем окне.

OOS

Проверка

Лучшие параметры прогоняются на следующем, невиданном окне.

WF

Сдвиг окна

Окна сдвигаются по всей истории, на каждом — заново подбор и проверка.

GATE

Планка

IS ≥ 30% и OOS ≥ 20% годовых одновременно, при достаточном числе сделок.

Поиск оркестрируется PowerShell-скриптами и сводится Go-утилитами: только для внутридневных интервалов сделано 27 итераций поиска.

Результаты

Walk-forward с переоптимизацией, дневные свечи, топ-N бумаг. Годовая доходность на обучающих (IS) и проверочных (OOS) окнах.

ПериодСтратегияISOOSПланка
2 годаdonchian_volume, top 1022.3%25.0%нет, 1 окно
2 годаdonchian_volume, top 1536.8%−1.4%нет
3 годаdonchian_volume, top 1837.9%−1.0%нет
3 годаdonchian_ma, top 1811.8%8.0%нет
2 года, 1 часdonchian_volume, top 103.9%9.1%нет

Вывод: планку не прошла ни одна комбинация (0 из 16 на трёх годах, 0 из 38 в отдельном поиске OOS ≥ 20%). Лучшие результаты на истории не повторяются на новых данных, а внутридневные интервалы не лучше дневного. В бою стратегия не включена; следующий шаг — paper trading в песочнице.

Стек

Язык
Go 1.25, около 13 тыс. строк своего кода, 38 файлов тестов
Брокер
Tinkoff Invest API через официальный Go SDK (gRPC)
Данные
Кеш свечей в SQLite или gob
Режимы
Бэктест, песочница, боевой с явным подтверждением
Исследование
Grid search, walk-forward reoptimize, PowerShell-оркестрация
Секреты
Токен только в переменной окружения или локальном конфиге вне git