Архив рубрики ~Идей копилка~

Статический Арбитраж с нуля: как без навыков программирования написать бота и зарабатывать на неэффективностях рынка

Статический Арбитраж с нуля: как без навыков программирования написать бота и зарабатывать на неэффективностях рынка
Статический Арбитраж с нуля: как без навыков программирования написать бота и зарабатывать на неэффективностях рынка

Всем привет, я Александр, разработчик Trade API в «Финаме». Сегодня мы разработаем торгового бота-арбитражника на базе Trade API и Python — практический гайд по реальной алгостратегии для заработка на бирже.

«Финам» даёт возможность торговать одновременно на нескольких биржах (Россия, США). Это открывает возможности для арбитража — низкорискового заработка на неэффективностей рынка.

В статье пройдём весь путь: от теории и поиска пары до бэктеста и живого бота на сервере. Навыки программирования не нужны — воспользуемся современными ИИ-агентами: Cursor, OpenClaw (из предыдущей части) и Claude Code — вместе с правильными промптами. Приступаем!

Теория за пару минут

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

Но активы не обязаны быть идентичными. Мы можем находить пары исторически взаимосвязанных инструментов, которые не просто коррелируют, а коинтегрируют. В этом и кроется ключ к стратегии статистического арбитража (Pairs Trading).

Представьте, что вы смотрите не на графики, а на двух пьяных людей, которые вместе вышли из бара. Мы можем видеть, как их пути какое-то время случайно совпадают. Но потом один свернет в переулок, а другой упадет в канаву. Это можно считать простой корреляцией — связи (коинтеграции) между ними нет, просто так совпало.

А теперь представьте пьяницу, который ведет собаку на поводке. Пьяница идет по случайной траектории (блуждает). Собака тоже бегает зигзагами. Но! Расстояние между ними ограничено длиной поводка. Если собака убежит слишком далеко, поводок натянется и вернет её к хозяину. Это и есть свойство коинтеграции.

Коинтеграция пары фьючерсов на газ NGJ (Мосбиржа) и NGK (NYMEX) за период с 9 февраля по 9 апреля
Коинтеграция пары фьючерсов на газ NGJ (Мосбиржа) и NGK (NYMEX) за период с 9 февраля по 9 апреля

В трейдинге роль пьяницы и собаки играют два актива (например, фьючерсы на газ на разных биржах или акции компаний из одного сектора). Наша задача — вычислить этот «невидимый поводок».

Сначала мы находим разницу цен, которую называют спредом:

  Spread = Price_A - (gamma times Price_B)

Здесь gamma (гамма) — это коэффициент хеджирования, который уравнивает веса активов.

Но как понять, когда поводок натянут до предела? Для этого мы используем Z-score — показатель, который переводит абсолютную разницу цен в количество стандартных отклонений от нормы.

 Z = frac{Spread_t - mu}{sigma}

Где:

  • mu (Mean) — среднее значение спреда за период (например, за последние 30 дней).

  • sigma (Standard Deviation) — волатильность спреда (его «шум»).

А дальше в дело вступает закон возврата к среднему (Mean Reversion). Взяв консервативный Z = 2, в 95% случаев спред будет находиться в пределах двух стандартных отклонений от нормы. И лишь в оставшиеся 5% выходит за них. Именно эти моменты нас и интересуют: аномальное отклонение, за которым почти всегда следует возврат к среднему. Так что сформулируем правила входа и выхода:

  1. Сигнал на вход (Z > 2 или Z < -2) Если Z-score поднялся выше 2, это значит, что «собака» убежала слишком далеко вправо. Спред аномально расширился.
    Действие: Мы продаем дорогой актив и покупаем дешевый. Нам не важно, куда пойдет рынок, нам важно, чтобы они снова сблизились.

  2. Сигнал на выход (Z ≈ 0) Когда Z-score возвращается к нулю, это означает, что активы вернулись к своему историческому равновесию. Пьяница и собака снова рядом. Действие: закрываем обе позиции и фиксируем прибыль.

Варьируя Z от 1 до 3, мы можем охватывать разную волатильность
Варьируя Z от 1 до 3, мы можем охватывать разную волатильность

Главный риск статарбитража — расхождение (Divergence). Если в фундаменте одного из активов произойдет катастрофа — например, эмбарго, форс-мажор или экспирация контракта без замены — поводок рвется. В этом случае коинтеграция исчезает, и спред может уходить в бесконечность, создавая неограниченный убыток.

В качестве риск-менеджмента мы можем предпринять следующее:

  • Проверять активы на коинтеграцию перед запуском.

  • Использовать стоп-лоссы не по цене, а по значению спреда.

  • Следить за актуальностью актива (даты экспирации фьючерса).

Если всё настроено правильно — это одна из самых предсказуемых стратегий на рынке.

Теперь к практике

Алгоритм работы бота:

  1. Поиск пары: выбираем два экономически связанных инструмента и проверяем их на коинтеграцию.

  2. Анализ истории (Market Data): загружаем дневные бары через Финам API метод Bars за последние 30 дней — для расчета средней (mu) и стандартного отклонения (sigma).

  3. Сбор данных (Subscribe Quote): подписываемся на real-time котировки через метод SubscribeQuote.

  4. Мониторинг (Z-Score): постоянно перерасчитываем текущий Z-score.

  5. Открытие позиции (Entry): как только |Z| > 2, робот открывает парную сделку.

    1. Если Z < -2 (спред слишком дешев), то покупаем актив A и продаем актив B.

    2. Если Z > 2 (спред слишком дорог), то продаем актив A и покупаем актив B.

  6. Закрытие позиции (Exit): фиксируем прибыль, когда Z-score возвращается к значению близкому к нулю (|Z| <= 0.5).

  7. Стоп-лосс: если Z-score продолжает движение против нас и достигает критического уровня (|Z| > 3.5), закрываем позицию с убытком.

Давайте разберём по шагам подробно.

Шаг 1. Поиск пары

Сначала мы выбираем инструменты, которые обязаны быть связаны экономически.

  • Пример: Фьючерсы на один и тот же товар на разных биржах (Газ на NYMEX и RTS).

  • Пример: Акции двух гигантов из одной индустрии (Pepsi и Coca-Cola).

  • Пример: Сырье и продукт его переработки (Нефть и Бензин).

  • Пример: актив и производный от него (акция и фьючерс на акцию, акция и ее преф версия)

Поиск коинтеграции — отдельный математический процесс. К счастью для нас существуют различные готовые скринеры. Один из таких spread-insight — здесь собраны более 7000 различных пар с фильтрацией. По каждой паре можно видеть текущий Z-score, силу связности по тесту Энгла-Грейнджера за разные периоды (месяц, квартал, полгода, год)

585b7b1d385144d8c00d49ea0de12388

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

  • Уровень входа (от синего до бирюзового, |1| ≤ Z ≤ |2|) когда у нас есть возможность войти в сделку;

  • Уровень take profit (зеленым, Z ≤ |0.5|), когда мы закрываем сделку и получаем прибыль

  • Уровень stop-loss (красным, Z ≥ |3.5|), когда мы закрываем позицию с целью недопущения потерь

e5451e92a55e4a694229d8ca3b53bee0

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

f4aeca51d8502e49080f9296caed7e05

Итак в качестве пары я взял пару фьючерсов на природный газ в межрыночном арбитраже с датой экспирации в июне 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. Скачиваем с официального сайта, устанавливаем и авторизуемся.

fbf804b178be03fe0e1f6c5a78473ffc

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

8f509a339789c757038698abf134f015
c3baae1b2e00daaf318fff472734808e

Теперь для операций с биржей подготовим номер брокерского счета «Финама» и токен Finam Trade API. Если ещё не получили токен — инструкция здесь, а тестировать сделки можно и на демо-счёте.

❗ Не передавайте ключ напрямую в чат агента — это небезопасно. Храните ключи в специализированном .env файле.

Для начала проверим стратегию на исторических данных. Но если брать исторические бары только по дням показаний будет немного — всего 33 торговых дня. Поэтому берем бары по минутам.

Формулируем и отправляем в Cursor промпт:

Стратегия арбитража фьючерсов на природный газ между российской и американской биржей: NGM6@RTSX (Мосбиржа) и NGN26@XNYM(NYMEX) (июнь). Используя finam skill получи все доступные дневные бары этих тикеров. Построй график их z-score спреда по дням и по минутам. отметь линиями на графике |z| = 2 и |z| = 3,5c7f64f276d6429e8f3b91d41e7971177

c699adf5219cd0dcc5fe7a6f6d8b3cdf

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

c3d5219ad2c2f0c669c7ad7f113a6f9b

Для работы скрипта нужно создать .env файл с ранее полученным Токеном и Счетом. Для этого

  1. Нажмите кнопку “New file”

  2. Назовите его как .env

  3. Вставьте в него ваш API ключ (FINAM_API_KEY) и номер вашего счета (FINAM_ACCOUNT_ID) по образцу:

    FINAM_API_KEY=ВАШ_КЛЮЧ FINAM_ACCOUNT_ID=ВАШ_НОМЕР_СЧЕТА

  4. Напишите промпт на запуск скрипта и отправьте:

    Я ввел свой АРI ключ и токен в .env файл. Запусти скрипт

d830d77bb03ca4f54d1e91d42b1e858d

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

По итогу получаем следующие графики:

График z-score спреда пары NGM6@RTSX : NGN26@XNYM по дням
График z-score спреда пары NGM6@RTSX : NGN26@XNYM по дням
График z-score спреда пары NGM6@RTSX : NGN26@XNYM по минутам
График z-score спреда пары NGM6@RTSX : NGN26@XNYM по минутам

Мы видим, что большую часть времени спред колеблется в районе от -2 до 2. Лишь в небольшие моменты он выходит за эти границы — и затем возвращается к нулю.

Посмотрим, сколько можно было заработать в эти моменты, и узнаем минимальный размер позиции. По дневным барам данных мало — всего 33. Погрузимся глубже: возьмём минутные бары и прокрутим бэктест. ИИ-агент выгрузит все данные в отдельный CSV-файл. Промпт:

Получи спецификацию по каждому инструменту. Высчитай ratio между инструментами и учти валюту. Подсчитай оптимальный размер торгуемого капитала исходя из минимального лота и шага, волатильности z спреда и глубины стакана. Проведи бэктест арбитражной стратегии на тикерах NGM6@RTSX и NGN26@XNYM по минутам.

В этот раз попробую сделать через ИИ-бота OpenClaw, которого мы делали в прошлой части. Вы можете продолжить в Cursor.

82919132b077a836168a4618ffbb75e4

❗ Если вы видите, что агент начинает делать что-то не то — прервите его кнопкой 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 — год), сопоставь их в пары по месяцам даты экспирации. По этим тикерам выгрузи исторические данные по минутно и склей в одну серию. Прокрути бэктест стратегию по этим данным. Сделай график доходности по месяцам

❗ Ассистент может ошибаться — обязательно перепроверяйте его действия и код. Если что-то пошло не так, укажите на ошибку и попросите переделать. Грамотная формулировка промпта решает многое — за помощью можно обратиться к любой другой нейросети.
❗ Ассистент может ошибаться — обязательно перепроверяйте его действия и код. Если что-то пошло не так, укажите на ошибку и попросите переделать. Грамотная формулировка промпта решает многое — за помощью можно обратиться к любой другой нейросети.
c4e0f6bca922e878acd255e071235379

Всплеск в январе 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

afbf4796dd145e3ac0b529c362b5a4bf

После запуска и авторизации, устанавливаем Финам Skill двумя командами:

claude plugin marketplace add FinamWeb/finam-skill claude plugin install finam@finam-skill —scope user

После установки можем писать промпт:

Напиши код для стратегии на базе grpc метода SubscribeQuote и запусти для минимальной суммы. Прими во внимание комиссию брокера за торговлю фьючерсами в 0,9 ₽. Транслируй сделки в консоль вместе с рассчитанной доходностью и общей доходностью. В скрипте предусмотри реконнект, а также вывод ошибок в консоль

47de127e4c3c6d432566f436976982da
7d0952c633d1ada2f5e3caa268c44add

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

python3 main.py

eba649a439ca17181836166c09b132fe

Paper trading работает — бот отслеживает рынок и принимает решения в реальном времени, но без риска для реальных денег. Убедившись, что стратегия работает стабильно, можно переходить к боевому запуску на живые деньги.

❗ Торговля на реальные деньги сопряжена с риском потери капитала. Результаты бэктеста и paper trading не гарантируют такой же доходности на живом рынке. Торгуйте только теми средствами, потерю которых вы готовы принять.

❗ Для торговли на рынках США потребуется статус квалифицированного инвестора.

Чтобы проверить бота в условиях, близких к реальным, запущу его на «Финам Арене» — конкурсе алгостратегий. Там можно торговать на виртуальный 1 млн рублей без статуса квала. Для этого скопирую документацию платформы и отправлю в Claude Code через промпт:

Реализуй открытие и закрытие сделок через платформу соревнований алгостратегий Финам Арена Вот документация: https://arena.finam.ru/llms.txt вынеси функции в отдельный файл

efc82ea38d74b40df1f28cfc58a1dd09

Стратегия заработала и за первый день соревнования сделала безрисковую сделку на +0.09%.

Сейчас скрипт работает локально на компьютере, но в дальнейшем можно арендовать круглосуточный VPS сервер, где можно запустить стратегию, и она будет работать без прерываний. Обращайтесь к агенту за помощью, как это сделать.

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

Итоги

Сегодня мы узнали про стратегию статистического арбитража и реализовали ее не углубляясь в программирование, через разные ИИ-инструменты. Научившись этому инструментарию, вы можете тестировать свои гипотезы, реализовывать другие алгостратегии или создавать полезные скрипты — как например, сканнеры арбитражных пар. Можно торговать несколько пар параллельно, автоматизировать поиск новых через скринер, добавить Telegram-уведомления о сделках.

❗ В «Финаме» сейчас проходит конкурс по алготрейдингу — «Финам Арена».

Получайте 3 млн рублей в управление через API и запускайте бота из этой статьи прямо на соревновании. Лучшие стратегии разделят призовой фонд в 300 000 ₽ и смогут привлечь реальное инвестирование.

Регистрация — до 1 июля 2026 года, торги — с 1 июня по 1 августа. Успейте зарегистрироваться!

Конкурс для клиентов Финама — открыть счёт можно здесь.

Я уже участвую с ботом-арбитражником — докручивайте своего и присоединяйтесь. Код учебного примера в репозитории.

Если остались вопросы — пишите в комментариях. Пусть технические сложности больше не мешают реализовывать ваши инвестиционные идеи 📈

Источник: habr.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Лента новостей~ Как собрать Telegram-бот обеспечения круглосуточной ситуационной осведомленности с нуля Архив рубрики ~Лента новостей~ Число подтвержденных случаев лихорадки Эбола в Конго превысило тысячу. Эта вспышка инфекции может стать худшей в истории Новости робототехники Компания AGIBOT выпустила 15-тысячный робот, что стало важной машиной во внедрении искусственного интеллекта Архив рубрики ~Коротко из Telegram~ «Яндекс» тестирует ИИ-ассистента для врачей «Яндекс» запустил пилотную версию ИИ-ассистента… Архив рубрики ~Лента новостей~ Как измеряют LLM: параметры, бенчмарки и тесты на коленке Архив рубрики ~Лента новостей~ Seedance 4К, Kling и Veo: 1000 промптов для видео в одном сайте promptstudio.tools Архив рубрики ~Лента новостей~ Внедрили AI-агента в BI-систему — чистая магия в обработке и визуализации терабайтов данных Архив рубрики ~Лента новостей~ Глава индийской платежной системы считает, что искусственный интеллект будет играть важную роль в развитии цифровых платежей в следующую эпоху. Архив рубрики ~Лента новостей~ Верная ли дорога? Архив рубрики ~Лента новостей~ WSJ: Anthropic отправила ведущих технических специалистов на переговоры с американскими чиновниками, чтобы добиться отмены ограничений для Fable 5 и Mythos 5 Архив рубрики ~Лента новостей~ Математика букв: Wordle и теория информации Архив рубрики ~Лента новостей~ Вот почему ваши умные часы вызывают у вас беспокойство и что с этим можно сделать. Архив рубрики ~Коротко из Telegram~ 🔖 Нашёл главную шпаргалку для всех, кто пользуется Claude Code… Архив рубрики ~Коротко из Telegram~ 🤯 Какие-то гении сделали гигантскую систему из ИИ-агентов — Agent… Архив рубрики ~Лента новостей~ Как собрать Telegram-бот обеспечения круглосуточной ситуационной осведомленности с нуля Архив рубрики ~Лента новостей~ Число подтвержденных случаев лихорадки Эбола в Конго превысило тысячу. Эта вспышка инфекции может стать худшей в истории Новости робототехники Компания AGIBOT выпустила 15-тысячный робот, что стало важной машиной во внедрении искусственного интеллекта Архив рубрики ~Коротко из Telegram~ «Яндекс» тестирует ИИ-ассистента для врачей «Яндекс» запустил пилотную версию ИИ-ассистента… Архив рубрики ~Лента новостей~ Как измеряют LLM: параметры, бенчмарки и тесты на коленке Архив рубрики ~Лента новостей~ Seedance 4К, Kling и Veo: 1000 промптов для видео в одном сайте promptstudio.tools Архив рубрики ~Лента новостей~ Внедрили AI-агента в BI-систему — чистая магия в обработке и визуализации терабайтов данных Архив рубрики ~Лента новостей~ Глава индийской платежной системы считает, что искусственный интеллект будет играть важную роль в развитии цифровых платежей в следующую эпоху. Архив рубрики ~Лента новостей~ Верная ли дорога? Архив рубрики ~Лента новостей~ WSJ: Anthropic отправила ведущих технических специалистов на переговоры с американскими чиновниками, чтобы добиться отмены ограничений для Fable 5 и Mythos 5 Архив рубрики ~Лента новостей~ Математика букв: Wordle и теория информации Архив рубрики ~Лента новостей~ Вот почему ваши умные часы вызывают у вас беспокойство и что с этим можно сделать. Архив рубрики ~Коротко из Telegram~ 🔖 Нашёл главную шпаргалку для всех, кто пользуется Claude Code… Архив рубрики ~Коротко из Telegram~ 🤯 Какие-то гении сделали гигантскую систему из ИИ-агентов — Agent…

Оставить комментарий