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

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

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

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

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

Итак в качестве пары я взял пару фьючерсов на природный газ в межрыночном арбитраже с датой экспирации в июне 2026 года: NGM6@RTSX (Мосбиржа) и NGN26@XNYM (NYMEX). Пара четко связана экономически и показывает устойчивую коинтеграцию, так что переходим к сбору данных.
Шаг 2. Сбор рыночных данных и анализ
Получив рабочую пару, выгружаем рыночные данные по ней используя метод Bars из Финам Trade API. Если вы не знаете, как это сделать — не страшно, с этим поможет ИИ-агент.
Сегодня программировать может каждый: достаточно базового Python и современных AI-помощников. Попробуем сразу несколько инструментов, и вы остановитесь на том, который подходит именно вам:
Cursor — AI-coding IDE с бесплатным пробным тарифом
Claude Code — передовой CLI coding агент от Anthropic
Codex — аналогичный coding агент от OpenAI с моделью GPT
OpenClaw — персональный AI Telegram-бот, о настройке которого я писал ранее
Также предварительно узнаем номер брокерский счета и получим ключ API в «Финаме». Благодаря им скрипт сможет торговать за вас автоматически, без ручного управления.
Начнем с Cursor. Скачиваем с официального сайта, устанавливаем и авторизуемся.

Дальше добавим Финам Skill — плагин для Cursor, который позволяет работать с Trade API: читать документацию, отвечать на вопросы и даже самостоятельно делать запросы. Заходим в настройки, пункт Plugins, в поиске вводим следующую ссылку: https://github.com/FinamWeb/finam-skill. Должен высветиться «Finam Trade API». Его выбираем и добавляем “Add to Cursor”.


Теперь для операций с биржей подготовим номер брокерского счета «Финама» и токен Finam Trade API. Если ещё не получили токен — инструкция здесь, а тестировать сделки можно и на демо-счёте.
❗ Не передавайте ключ напрямую в чат агента — это небезопасно. Храните ключи в специализированном
.envфайле.
Для начала проверим стратегию на исторических данных. Но если брать исторические бары только по дням показаний будет немного — всего 33 торговых дня. Поэтому берем бары по минутам.
Формулируем и отправляем в Cursor промпт:
Стратегия арбитража фьючерсов на природный газ между российской и американской биржей: NGM6@RTSX (Мосбиржа) и NGN26@XNYM(NYMEX) (июнь). Используя finam skill получи все доступные дневные бары этих тикеров. Построй график их z-score спреда по дням и по минутам. отметь линиями на графике |z| = 2 и |z| = 3,5

После того как агент допишет скрипт, нажмите кнопку с файлом. Там откроется редактор кода с написанным ИИ-агентом скриптом.

Для работы скрипта нужно создать .env файл с ранее полученным Токеном и Счетом. Для этого
Нажмите кнопку “New file”
Назовите его как
.env-
Вставьте в него ваш API ключ (
FINAM_API_KEY) и номер вашего счета (FINAM_ACCOUNT_ID) по образцу:FINAM_API_KEY=ВАШ_КЛЮЧ FINAM_ACCOUNT_ID=ВАШ_НОМЕР_СЧЕТА -
Напишите промпт на запуск скрипта и отправьте:
Я ввел свой АРI ключ и токен в .env файл. Запусти скрипт

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


Мы видим, что большую часть времени спред колеблется в районе от -2 до 2. Лишь в небольшие моменты он выходит за эти границы — и затем возвращается к нулю.
Посмотрим, сколько можно было заработать в эти моменты, и узнаем минимальный размер позиции. По дневным барам данных мало — всего 33. Погрузимся глубже: возьмём минутные бары и прокрутим бэктест. ИИ-агент выгрузит все данные в отдельный CSV-файл. Промпт:
Получи спецификацию по каждому инструменту. Высчитай ratio между инструментами и учти валюту. Подсчитай оптимальный размер торгуемого капитала исходя из минимального лота и шага, волатильности z спреда и глубины стакана. Проведи бэктест арбитражной стратегии на тикерах NGM6@RTSX и NGN26@XNYM по минутам.
В этот раз попробую сделать через ИИ-бота OpenClaw, которого мы делали в прошлой части. Вы можете продолжить в Cursor.

❗ Если вы видите, что агент начинает делать что-то не то — прервите его кнопкой Stop и новым промптом укажите, как правильно ему делать
Узнаем, что NGM6@RTSX торгуется размером лота (lot_size) 100, тогда как NGN26@XNYM - 10000. Получаем отношение 100 RTSX : 1 XNYM. Чтобы начать арбитражить нужен минимальный исполнимый размер = 100 RTSX + 1 XNYM или около 62,200 USD.
Торгуя на эту сумму за период бэктеста произошло две сделки с итоговой доходностью в 4.00%:
2026-02-27 17:45 → 2026-03-02 06:55, long spread, net 1,230.0 USD
2026-03-23 12:41 → 2026-03-27 17:00, short spread, net 1,260.0 USD
Для более общей картины прокрутим стратегию на годовых данных. Для этого просто каждый новый месяц будем торговать новой парой. Промпт:
Используя finam skill получи тикеры фьючерсов прошлых месяцев за год, они имеют закономерности в названиях (NG*26, где * буква кодирующая месяц, 26 - год), сопоставь их в пары по месяцам даты экспирации. По этим тикерам выгрузи исторические данные по минутно и склей в одну серию. Прокрути бэктест стратегию по этим данным. Сделай график доходности по месяцам


Всплеск в январе 2026 (+38.9%) объясняется аномальной волатильностью на рынке газа в этот период — стратегия поймала несколько крупных отклонений подряд. Это разовое событие, не показательное для типичной работы бота. Без января годовая доходность составляет около 18–20% — что всё равно является сильным результатом при Sharpe ratio 3.03 и просадке всего -5.47%.
Шаг 3. Реализация и запуск стратегии
Довольно back-тестов — сделаем realtime-тесты! Займемся Paper Trading. Реализуем стратегию и запустим торговать на условную сумму. В этот раз попробуем Claude Code — CLI-агент от Anthropic.
Для его работы потребуется подписка Claude Pro ($20/мес) или Max. Вызвать агента можно командой в консоли claude

После запуска и авторизации, устанавливаем Финам Skill двумя командами:
claude plugin marketplace add FinamWeb/finam-skill claude plugin install finam@finam-skill --scope user
После установки можем писать промпт:
Напиши код для стратегии на базе grpc метода SubscribeQuote и запусти для минимальной суммы. Прими во внимание комиссию брокера за торговлю фьючерсами в 0,9 ₽. Транслируй сделки в консоль вместе с рассчитанной доходностью и общей доходностью. В скрипте предусмотри реконнект, а также вывод ошибок в консоль


Итак, скрипт готов. Идем запускать в терминале. Бот уже написал команду для запуска
python3 main.py

Paper trading работает — бот отслеживает рынок и принимает решения в реальном времени, но без риска для реальных денег. Убедившись, что стратегия работает стабильно, можно переходить к боевому запуску на живые деньги.
❗ Торговля на реальные деньги сопряжена с риском потери капитала. Результаты бэктеста и paper trading не гарантируют такой же доходности на живом рынке. Торгуйте только теми средствами, потерю которых вы готовы принять.
❗ Для торговли на рынках США потребуется статус квалифицированного инвестора.
Чтобы проверить бота в условиях, близких к реальным, запущу его на «Финам Арене» — конкурсе алгостратегий. Там можно торговать на виртуальный 1 млн рублей без статуса квала. Для этого скопирую документацию платформы и отправлю в Claude Code через промпт:
Реализуй открытие и закрытие сделок через платформу соревнований алгостратегий Финам Арена Вот документация: https://arena.finam.ru/llms.txt вынеси функции в отдельный файл

Стратегия заработала и за первый день соревнования сделала безрисковую сделку на +0.09%.
Сейчас скрипт работает локально на компьютере, но в дальнейшем можно арендовать круглосуточный VPS сервер, где можно запустить стратегию, и она будет работать без прерываний. Обращайтесь к агенту за помощью, как это сделать.
Мы рассмотрели только одну пару, но алгоритм универсален — его легко масштабировать и торговать несколько пар параллельно.
Итоги
Сегодня мы узнали про стратегию статистического арбитража и реализовали ее не углубляясь в программирование, через разные ИИ-инструменты. Научившись этому инструментарию, вы можете тестировать свои гипотезы, реализовывать другие алгостратегии или создавать полезные скрипты — как например, сканнеры арбитражных пар. Можно торговать несколько пар параллельно, автоматизировать поиск новых через скринер, добавить Telegram-уведомления о сделках.
❗ В «Финаме» сейчас проходит конкурс по алготрейдингу — «Финам Арена».
Получайте 3 млн рублей в управление через API и запускайте бота из этой статьи прямо на соревновании. Лучшие стратегии разделят призовой фонд в 300 000 ₽ и смогут привлечь реальное инвестирование.
Регистрация — до 1 июля 2026 года, торги — с 1 июня по 1 августа. Успейте зарегистрироваться!
Конкурс для клиентов Финама — открыть счёт можно здесь.
Я уже участвую с ботом-арбитражником — докручивайте своего и присоединяйтесь. Код учебного примера в репозитории.
Если остались вопросы — пишите в комментариях. Пусть технические сложности больше не мешают реализовывать ваши инвестиционные идеи ?
Комментарии (2)

Agb
27.06.2026 10:02А плюсы на мамбе с минусами на наймекс неттятся внутри Финама? Или там отдельные счета, и надо балансировать инвентарь на каждом счете ноги? Если раздельно, сколькопо времени перевод между счетами длится?
И почему в примере учтены комиссии только по мамбе? На наймекс фьючи гоняются бесплатно?
FurySeer
del