Разработка торгового робота для Московской биржи: MOEX API + Tinkoff Invest API
Торговый робот для Московской биржи — это автоматизированная система, которая получает рыночные данные через MOEX ISS API, формирует торговые сигналы по ансамблю стратегий и исполняет заявки через Tinkoff Invest API без участия трейдера. Разработка занимает от 3 до 6 месяцев и включает модуль аналитики, оптимизатор параметров и полноценный бектест на исторических данных.
Что нужно было сделать: задача клиента
Клиент торговал на Московской бирже вручную — 4–5 часов в день у монитора, стресс в периоды волатильности и постоянное запаздывание относительно рынка. Были накоплены наработки на Python: несколько торговых стратегий, базовый сбор котировок, черновик оценки макрофакторов. Но единой системы не было: стратегии не согласовывались между собой, параметры подбирались вручную, бектест делался в Jupyter-ноутбуках и не воспроизводился автоматически.
Боли клиента были конкретными: просадки до 18% на одиночных позициях из-за отсутствия автоматического риск-менеджмента, потеря сигналов при неустойчивом соединении, невозможность одновременно вести более 3 инструментов. Плюс отсутствие аудита решений — не было журнала, почему та или иная заявка была выставлена.
Как мы декомпозировали задачу
Система разбита на два независимых модуля с чёткой границей: Analytics Engine (аналитика и генерация сигналов) и Execution Engine (исполнение через Tinkoff Invest API). Такая архитектура позволяет менять брокера без переписывания аналитики и тестировать стратегии в изолированной среде без реальных денег на счёте.
Архитектура: два модуля, одна система
Модуль 1: Analytics Engine — аналитика и генерация сигналов
Источник данных — MOEX ISS REST API (Moscow Exchange Information & Statistics Server). Исторические свечи, стаканы, торговые объёмы, индексы секторов — всё сохраняется в PostgreSQL с дедупликацией и валидацией. Сбор идёт в 5 параллельных потоках, задержка получения тика — менее 200 мс от момента публикации на бирже.
Блок очистки данных убирает аномальные свечи (gap > 3σ), восстанавливает пропуски торговых дней через интерполяцию и маркирует корпоративные события (дивидендные отсечки, сплиты). Без этого любая стратегия даёт ложные сигналы на исторических данных.
Оценка макрофакторов — отдельный компонент, который агрегирует индекс РТС, ставку ЦБ, данные по нефти Urals и курс рубля. Он формирует «рыночный режим» (трендовый, боковик, высокая волатильность), который влияет на выбор активных стратегий.
Ансамбль стратегий включает 4 независимых алгоритма: трендовый (EMA-crossover с адаптивным периодом), реверсионный (Bollinger Bands + RSI), объёмный (VWAP-deviation) и гибридный (комбинация сигналов первых трёх с весами, которые обновляются еженедельно). Оркестратор собирает сигналы, взвешивает их по исторической точности каждого алгоритма на конкретном инструменте и передаёт консолидированный сигнал в модуль исполнения.
Оптимизатор параметров запускается каждое воскресенье: берёт последние 90 дней данных и перебирает 200–400 комбинаций параметров по каждой стратегии через Optuna (байесовская оптимизация). Весь цикл оптимизации занимает 35–40 минут на стандартном VPS с 4 ядрами.
Модуль 2: Execution Engine — исполнение через Tinkoff Invest API
Сигналы из Analytics Engine приходят через внутреннюю очередь (Redis Streams). Блок оценки рисков проверяет каждый сигнал по 7 критериям перед выставлением заявки: лимит на инструмент (не более 15% портфеля), лимит на сектор, максимальная дневная просадка, ликвидность (минимальный объём за 20 дней), корреляция с уже открытыми позициями, расхождение с фундаментальной оценкой, текущий рыночный режим.
Tinkoff Invest API v2 (gRPC) используется для выставления заявок. Исполнитель поддерживает лимитные и рыночные ордера, отслеживает статусы через стрим, обрабатывает частичное исполнение и автоматически перевыставляет заявки при таймауте. Среднее время от сигнала до подтверждённой заявки — 80–120 мс.
Обратная связь — критичный компонент: каждая исполненная заявка с фактической ценой, слиппажем и комиссией записывается обратно в Analytics Engine. Это позволяет обновлять веса ансамбля стратегий на реальных, а не синтетических данных.
Бектестирующий модуль воспроизводит исторические торговые дни с реальными спредами и задержками исполнения. Отчёт включает 12 метрик: Sharpe Ratio, Sortino Ratio, максимальная просадка, коэффициент Кальмара, среднее время в позиции, процент прибыльных сделок, фактор прибыли и другие.
Этапы разработки и сроки
- Анализ наработок и проектирование архитектуры — 2 недели. Аудит существующего Python-кода, выбор технологического стека, проектирование схемы базы данных, согласование интерфейсов между модулями.
- Инфраструктура и сбор данных — 3 недели. Настройка PostgreSQL + TimescaleDB, реализация коллектора MOEX ISS API, пайплайн очистки и валидации данных, мониторинг через Grafana.
- Analytics Engine — 5–6 недель. Реализация 4 стратегий, блока макрооценки, оркестратора ансамбля, оптимизатора на Optuna, бектестинговой среды.
- Execution Engine + Tinkoff API — 4 недели. Интеграция Tinkoff Invest API v2 (gRPC), риск-менеджер, исполнитель заявок, обратная связь, журнал аудита.
- Интеграционное тестирование и paper trading — 3–4 недели. Тестирование на демосчёте, нагрузочные тесты, проверка поведения при обрывах соединения, сверка P&L с ручными расчётами.
- Деплой и сдача — 1–2 недели. Разворачивание на VPS-сервере клиента, настройка автоматического рестарта, обучение по использованию дашборда, передача документации.
Сколько стоит разработка торгового робота для MOEX в 2026 году
Рынок разработки алготрейдинговых систем для Московской биржи в 2026 году сегментирован по сложности. Простой робот на одну стратегию с исполнением через QUIK-lua обойдётся в 80 000–150 000 рублей. Система среднего уровня — несколько стратегий, API-интеграция, базовый риск-менеджмент — от 250 000 до 500 000 рублей. Полноценная модульная платформа с ансамблем стратегий, оптимизатором и бектестом — от 500 000 до 1 200 000 рублей.
На цену влияют: количество торговых инструментов (1 vs 20+ бумаг), глубина бектестинговых данных (3 года vs 10 лет), требования к задержке исполнения (обычный API vs colocation), наличие собственного кода у клиента (снижает стоимость на 20–35%), сложность риск-модели и требования к отчётности.
| Критерий | Заказная разработка | Готовые платформы |
|---|---|---|
| Стоимость | от 300 000 руб. | 0–30 000 руб./год |
| Собственные стратегии | Любые | Ограниченный выбор |
| MOEX ISS + Tinkoff API | Нативная интеграция | Частичная или нет |
| Оптимизатор параметров | Bayesian (Optuna) | Grid search или нет |
| Журнал аудита решений | Полный | Обычно отсутствует |
| Масштабирование | Под ваши задачи | В рамках платформы |
Технологии: что использовали и почему
Python как основной язык алготрейдинга
Python — де-факто стандарт для алготрейдинга: богатая экосистема (pandas, numpy, ta-lib, Optuna), готовые SDK для MOEX и Tinkoff, скорость прототипирования стратегий. Критичные по латентности компоненты (исполнитель заявок) написаны с использованием asyncio и uvloop, что даёт производительность, сопоставимую с Go-решениями для данного класса задач.
MOEX ISS API vs платные альтернативы
| Источник данных | Стоимость | История | Задержка |
|---|---|---|---|
| MOEX ISS API | бесплатно | 10+ лет | ~1 сек |
| MOEX ALGOPACK | от 5 000 руб./мес | 5 лет | ~100 мс |
| Финам API | бесплатно (клиентам) | 5 лет | ~500 мс |
| Платные провайдеры | от 30 000 руб./мес | 20+ лет | мс |
Для большинства розничных стратегий MOEX ISS API достаточен — 10 лет истории, все инструменты, бесплатно. ALGOPACK имеет смысл при HFT-стратегиях с требованием задержки менее 200 мс.
Tinkoff Invest API: gRPC vs REST
Tinkoff Invest API v2 предлагает оба варианта, но gRPC-интерфейс даёт на 40–60% меньшую задержку при подписке на стримы котировок. Для нашего кейса это снизило среднее время цикла «сигнал → заявка → подтверждение» со 180 до 95 мс. Официальная Python-библиотека tinkoff-investments поддерживает оба протокола.
TimescaleDB для временных рядов
Обычный PostgreSQL замедляется на запросах типа «свечи за последние 500 дней по 50 инструментам». TimescaleDB — расширение PostgreSQL с гипертаблицами — ускоряет такие запросы в 5–20 раз за счёт партиционирования по времени. При этом остаётся полная совместимость с SQL и стандартными ORM.
Частые вопросы
Можно ли подключить систему к другому брокеру, не только Тинькофф?
Да. Модульная архитектура предполагает замену Execution Engine без изменения Analytics Engine. После Тинькофф популярные варианты — Финам (TRANSAQ API), ВТБ Мои Инвестиции и БКС. Стоимость адаптации под второго брокера — около 30–40% от стоимости первичной разработки Execution Engine.
Нужна ли лицензия ЦБ для работы торгового робота?
Нет, если робот управляет только вашим собственным счётом. Лицензия требуется только при управлении чужими средствами (доверительное управление). Автоматическое выставление заявок через API для собственного счёта — это обычная торговая активность в рамках договора с брокером.
Сколько времени занимает бектест на 5 годах данных?
Бектест одной стратегии по одному инструменту на 5 годах дневных свечей — 3–8 секунд. На минутных свечах — 40–120 секунд. При запуске оптимизатора (200 итераций, 4 стратегии, 10 инструментов, минутные свечи) полный цикл — около 35 минут на VPS с 4 vCPU. Параллельная обработка через joblib сокращает время примерно втрое.
Что происходит при обрыве соединения с биржей в открытой позиции?
Watchdog-процесс контролирует heartbeat gRPC-соединения. При обрыве — 3 попытки переподключения с экспоненциальным backoff (1, 4, 9 секунд). Если не удалось — рыночная заявка на закрытие всех позиций через резервный REST-канал. Уведомление об инциденте в Telegram — в течение 10 секунд.
Чем мы можем помочь
Что входит в разработку
-
01Analytics EngineСбор данных через MOEX ISS API, очистка аномалий, оценка макрофакторов (ставка ЦБ, нефть, РТС), ансамбль из 4 стратегий с оркестратором и еженедельной оптимизацией параметров через Optuna.
-
02Execution EngineРиск-менеджмент по 7 критериям, исполнитель заявок через Tinkoff Invest API v2 (gRPC), обработка частичного исполнения, автоматическое перевыставление при таймауте, полный журнал аудита.
-
03Бектест и оптимизацияВоспроизведение торговых дней с реальными спредами и задержками. Отчёт по 12 метрикам: Sharpe, Sortino, максимальная просадка, коэффициент Кальмара, процент прибыльных сделок.
-
04Инфраструктура и мониторингPostgreSQL + TimescaleDB для временных рядов, Redis Streams как очередь сигналов, Grafana-дашборд, watchdog с уведомлениями в Telegram при сбоях соединения.