Как без навыков программирования написать бота и зарабатывать на неэффективностях рынка
- Классический арбитраж предполагает покупку актива в одном месте и мгновенную продажу в другом. Но активы не обязаны быть идентичными. Мы можем находить пары исторически взаимосвязанных инструментов, которые не просто коррелируют, а коинтегрируют
- Сначала находим спред, затем используем Z-score, а дальше в дело вступает Mean Reversion. Нас интересует аномальное отклонение, за которым почти всегда следует возврат к среднему
- Поиск коинтеграции — отдельный математический процесс. К счастью, существуют различные готовые скринеры, например, Spread Insight
Всем привет, я Александр, разработчик Trade API в «Финаме». Сегодня мы разработаем торгового бота-арбитражника на базе Trade API и Python — практический гайд по реальной алгостратегии для заработка на бирже.
«Финам» даёт возможность торговать одновременно на нескольких биржах (Россия, США). Это открывает возможности для арбитража — низкорискового заработка на неэффективностях рынка.
В статье пройдём весь путь: от теории и поиска пары до бэктеста и живого бота на сервере. Навыки программирования не нужны — воспользуемся современными ИИ-агентами: Cursor, OpenClaw и Claude Code — вместе с правильными промптами. Приступаем!
Теория за пару минут
Арбитраж — это стратегия получения прибыли из разницы в ценах на один и тот же актив или тесно связанные инструменты. Классический арбитраж предполагает покупку актива в одном месте и мгновенную продажу в другом. В современных реалиях это полностью заполненная ниша и битва алгоритмов HFT-роботов, где борьба идет за микросекунды.
Но активы не обязаны быть идентичными. Мы можем находить пары исторически взаимосвязанных инструментов, которые не просто коррелируют, а коинтегрируют. В этом и кроется ключ к стратегии статистического арбитража (Pairs Trading).
Представьте, что вы смотрите не на графики, а на двух пьяных людей, которые вместе вышли из бара. Мы можем видеть, как их пути какое-то время случайно совпадают. Но потом один свернет в переулок, а другой упадет в канаву. Это можно считать простой корреляцией — связи (коинтеграции) между ними нет, просто так совпало.
А теперь представьте пьяницу, который ведет собаку на поводке. Пьяница идет по случайной траектории (блуждает). Собака тоже бегает зигзагами. Но! Расстояние между ними ограничено длиной поводка. Если собака убежит слишком далеко, поводок натянется и вернет её к хозяину. Это и есть свойство коинтеграции.

В трейдинге роль пьяницы и собаки играют два актива (например, фьючерсы на газ на разных биржах или акции компаний из одного сектора). Наша задача — вычислить этот «невидимый поводок».
Сначала мы находим разницу цен, которую называют спредом:
Spread = Price_A - (gamma * Price_B)
Здесь gamma (гамма) — это коэффициент хеджирования, который уравнивает веса активов.
Но как понять, когда поводок натянут до предела? Для этого мы используем Z-score — показатель, который переводит абсолютную разницу цен в количество стандартных отклонений от нормы.
Z = (Spread_t - mu) / sigma
Где:
- mu (Mean) — среднее значение спреда за период (например, за последние 30 дней).
- sigma (Standard Deviation) — волатильность спреда (его «шум»).
А дальше в дело вступает закон возврата к среднему (Mean Reversion). Взяв консервативный Z = 2, в 95% случаев спред будет находиться в пределах двух стандартных отклонений от нормы. И лишь в оставшиеся 5% выходит за них. Именно эти моменты нас и интересуют: аномальное отклонение, за которым почти всегда следует возврат к среднему. Так что сформулируем правила входа и выхода:
- Сигнал на вход (Z > 2 или Z < -2)
Если Z-score поднялся выше 2, это значит, что «собака» убежала слишком далеко вправо. Спред аномально расширился.
Действие: Мы продаем дорогой актив и покупаем дешевый. Нам не важно, куда пойдет рынок, нам важно, чтобы они снова сблизились. - Сигнал на выход (Z ≈ 0)
Когда Z-score возвращается к нулю, это означает, что активы вернулись к своему историческому равновесию. Пьяница и собака снова рядом.
Действие: закрываем обе позиции и фиксируем прибыль.

Главный риск статарбитража — расхождение (Divergence). Если в фундаменте одного из активов произойдет катастрофа — например, эмбарго, форс-мажор или экспирация контракта без замены — поводок рвется. В этом случае коинтеграция исчезает, и спред может уходить в бесконечность, создавая неограниченный убыток.
В качестве риск-менеджмента мы можем предпринять следующее:
- Проверять активы на коинтеграцию перед запуском.
- Использовать стоп-лоссы не по цене, а по значению спреда.
- Следить за актуальностью актива (даты экспирации фьючерса).
Если всё настроено правильно — это одна из самых предсказуемых стратегий на рынке.
Теперь к практике
Алгоритм работы бота:
- Поиск пары: выбираем два экономически связанных инструмента и проверяем их на коинтеграцию.
- Анализ истории (Market Data): загружаем дневные бары через Финам API метод
Barsза последние 30 дней — для расчета средней (mu) и стандартного отклонения (sigma). - Сбор данных (Subscribe Quote): подписываемся на real-time котировки через метод
SubscribeQuote. - Мониторинг (Z-Score): постоянно перерасчитываем текущий Z-score.
- Открытие позиции (Entry): как только |Z| > 2, робот открывает парную сделку.
- Если Z < -2 (спред слишком дешев), то покупаем актив A и продаем актив B.
- Если Z > 2 (спред слишком дорог), то продаем актив A и покупаем актив B.
- Закрытие позиции (Exit): фиксируем прибыль, когда Z-score возвращается к значению близкому к нулю (|Z| <= 0.5).
- Стоп-лосс: если Z-score продолжает движение против нас и достигает критического уровня (|Z| > 3.5), закрываем позицию с убытком.
Давайте разберём по шагам подробно.
Шаг 1. Поиск пары
Сначала мы выбираем инструменты, которые обязаны быть связаны экономически.
- Пример: Фьючерсы на один и тот же товар на разных биржах (Газ на NYMEX и на срочном рынке Мосбиржи).
- Пример: Акции двух гигантов из одной индустрии (Pepsi и Coca-Cola).
- Пример: Сырье и продукт его переработки (Нефть и Бензин).
- Пример: актив и производный от него (акция и фьючерс на акцию, акция и ее преф версия)
Поиск коинтеграции — отдельный математический процесс. К счастью для нас существуют различные готовые скринеры. Один из таких Spread Insight — здесь собраны более 7000 различных пар с фильтрацией. По каждой паре можно видеть текущий Z-score, силу связности по тесту Энгла-Грейнджера за разные периоды (месяц, квартал, полгода, год).

Находим понравившуюся пару и заходим в описание. Здесь можно видеть визуально как торговался и торгуется спред пары. Здесь мы встречаем Bollinger Bands (Полосы Боллинджера) — это визуальное воплощение всей математики Z-score, о которой мы говорили выше. В данном случае здесь скользящая средняя (наш $\mu$) отображается серым цветом. На ее основе рассчитываются уровни:
- Уровень входа (от синего до бирюзового, |1| ≤ Z ≤ |2|) когда у нас есть возможность войти в сделку;
- Уровень take profit (зеленым, Z ≤ |0.5|), когда мы закрываем сделку и получаем прибыль
- Уровень stop-loss (красным, Z ≥ |3.5|), когда мы закрываем позицию с целью недопущения потерь

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

Итак в качестве пары я взял пару фьючерсов на природный газ в межрыночном арбитраже с датой экспирации в июне 2026 года: NGM6@RTSX (Мосбиржа) и NGN26@XNYM (NYMEX). Пара четко связана экономически и показывает устойчивую коинтеграцию. О дальнейших практических шагах читайте в материале на “Хабре”.
Комментарии