К содержимому
logologo-text

API

Гайд

Разбор Стратегии SMA 9/30

~10 мин чтенияОбновлено 28 сентября 2026

Содержание

Стратегия SMA 9/30 — классический инструмент тренд-следования, который отлично подходит для понимания того, как работает инерция рынка.

В ее основе лежит простой принцип: тренды склонны продолжаться дольше, чем кажется. Если актив уверенно растет 10 дней подряд, шансы, что он продолжит расти еще несколько дней, обычно выше, чем шансы на мгновенный разворот — хотя это лишь общая закономерность, а не гарантия. Торговля по тренду не пытается угадать «самую низкую точку» для покупки — она подключается к уже начавшемуся движению и старается забрать его часть.

Что делает стратегия

В основе системы лежат две простые скользящие средние (Simple Moving Average). Скользящее среднее — это средняя цена закрытия за N предыдущих свечей:

  • SMA 9 (быстрая) — отвечает за импульс и локальный настрой рынка, чутко реагирует на свежие изменения цены.
  • SMA 30 (медленная) — выступает «компасом» и определяет глобальный тренд, отсекая рыночный шум.

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

  • Вход (LONG): вчера SMA9 ≤ SMA30, сегодня SMA9 > SMA30 — «золотой крест».
  • Выход: вчера SMA9 ≥ SMA30, сегодня SMA9 < SMA30 — «крест смерти».

Средние считаются только по ценам закрытия уже закрытых свечей, а первый сигнал возможен не раньше 31-й свечи — 30, чтобы прогреть SMA30, плюс одна, чтобы было с чем ее сравнить.

Пример работы

Стратегия SMA 9/30 на MSFT — бэктест за 180 дней
Стратегия SMA 9/30 на MSFT — бэктест выполнен на дневных ценах за 180 дней, не учитывает комиссии и проскальзывание

График показывает работу классической трендследящей стратегии на MSFT: пересечение быстрой (SMA9) и медленной (SMA30) скользящих средних по цене закрытия. Зеленая/красная заливка между линиями наглядно показывает, в каком режиме находится рынок — «бычьем» или «медвежьем».

За рассматриваемый период (180 дней) MSFT показал устойчивый восходящий тренд: buy & hold дал +39,6%, а стратегия отработала 3 закрытые сделки и принесла +14,7% (плюс еще −0,7% на текущей открытой позиции).

SMA-кроссовер по своей природе — запаздывающий индикатор: он входит в движение уже после того, как оно началось, и выходит уже после разворота. На выраженном тренде это даёт положительный результат за счет одной-двух крупных сделок, но систематически уступает простому удержанию позиции (buy & hold). На практике SMA чаще используют как вспомогательный индикатор внутри более крупных стратегий, а не как самостоятельную торговую систему.

В этом гайде мы научимся реализовывать ее самостоятельно, используя Trade API и готовый SDK.

Реализация

1. Получите токен

Secret-токен выпускается в личном кабинете, в разделе Токены.

Сохраните токен в безопасном месте.Дальше вы будете передавать его через переменную окружения TRADE_API_SECRET.

Также при выборе инструмента в Trade API нужно учитывать, что любой инструмент указывается в формате ticker@mic, например SBER@MISX — MISX здесь означает Московскую биржу. Полный список бирж можно получить запросом GET /v1/exchanges.

2. Реализуйте стратегию

В Trade API уже есть SDK для двух языков — Python (finam-sdk, импортируется как finam_trade_api) и Node.js (@finam/trade-api). Установите нужный:

Рассмотрим ключевые фрагменты кода без второстепенных импортов и объявлений (BarsRequest, Order, interval и так далее); полная рабочая версия — в репозитории по ссылке в конце раздела.

Всё начинается с подключения клиента SDK — он берет на себя аутентификацию по токену и фоновое обновление JWT:

Напишем математическую функцию расчета сигнала: она берет список цен закрытия и возвращает текущие SMA9/SMA30 и сигнал:

Функция расчета сигнала

strategy.py

Дальше нужны сами цены. Загрузите историю свечей через MarketData.Bars: почти все они уже закрыты и готовы для расчёта, а вот самая последняя — ещё нет, она может продолжить меняться прямо сейчас. Поэтому ее мы в SMA пока не считаем, а просто откладываем и ждём следующую свечу:

С историей на руках можно подписаться на поток через метод MarketData.SubscribeBars и на каждой новой свече проверять, закрылась ли предыдущая. Если метка времени совпадает — свеча еще обновляется, просто заменяем pending; если новее — предыдущая точно закрылась, и по ней можно считать SMA и сигнал:

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

Вот и все — четыре кусочка логики (расчет, история, поток, заявка) дают рабочую стратегию. Полная версия стратегии — Python / Node.js.

Чтобы не собирать ее вручную, вы можете склонировать наш репозиторий и запустить готовый пример:

3. Запустите проверку истории на чтение

В репозитории мы подготовили безопасный первый шаг запуска — режим --check. Он аутентифицируется, загружает исторические свечи, считает SMA9/SMA30 и печатает результат, ничего не выставляя и даже не читая счет:

Запустить можно командой, предварительно подставив свой токен

Пример ожидаемого вывода (реальный прогон на SBER@MISX):

Bash

Если аутентификация не проходит — проверьте, что токен активен и имеет доступ к рыночным данным. Если свечи не пришли — проверьте формат ticker@mic и то, что биржа действительно торгует этим инструментом.

4. Запустите потоковый dry-run

В режиме --check стратегия делает один шаг и завершается. Следующий этап — запускать ее постоянно, на заданном таймфрейме, то есть с одной свечой каждые, например, 5 минут. Для этого просто убираем флаг --check: стратегия переходит в потоковый режим, подписывается на свечи через gRPC-стрим и на каждой закрытой свече печатает в лог SMA и сигнал. Заявки при этом по-прежнему не выставляются — счет не читается вообще.

Для остановки скрипта нужно нажать комбинацию клавиш Ctrl-C.

Вот какие еще есть доступные значения --timeframe:

Значение

Таймфрем

M1

1 минута

M5

5 минут

M15

15 минут

M30

30 минут

H1

1 час

H2

2 часа

H4

4 часа

H8

8 часов

D

1 день

W

1 неделя

MN

1 месяц

QR

1 квартал

Также можно настроить и остальные параметры стратегии — вот таблица всех флагов и соответствующих переменных окружения:

Флаг / переменная окружения

Что задает

По умолчанию

--secret / TRADE_API_SECRET

токен

обязателен

--symbol / TRADE_API_SYMBOL

инструмент, ticker@mic

обязателен

--timeframe / TRADE_API_TIMEFRAME

таймфрейм свечей

M5

--quantity / TRADE_API_QUANTITY

размер позиции

1

--log-level / TRADE_API_LOG_LEVEL

подробность логов

INFO

--check

разовая проверка по истории, без потока и заявок

выключен

--execute

включить настоящие заявки (без dry-run)

выключен

5. Включите настоящие заявки

Внимание

--execute выставляет настоящие рыночные заявки на реальном счете. Используйте для этого выделенный, некритичный счет и сначала обязательно прогоните --check и dry-run.

Перед стартом стратегия сама определяет ID счета через AuthService.TokenDetails и откажется работать, если токену доступен не ровно один счет — это защита от случайной торговли не на том счете. Перед каждой заявкой также проверяется текущая позиция: вход возможен только с нуля, а на выходе продается не больше, чем есть в позиции, чтобы не открыть случайный шорт.

Что дальше

Теперь, когда стратегия запущена и понятна изнутри, с ней можно экспериментировать — поменять окна SMA, добавить свой фильтр сигналов или собрать похожую логику на другом индикаторе.

Но перед боевым использованием стоит помнить: это учебный пример, а не production-система. Для реальной торговли потребуются как минимум постоянное хранение состояния между перезапусками, переподключение потока при разрывах, добор пропущенных свечей, мониторинг и лимиты риска. Подробности о механике сверки свечей и защитных проверках — в README стратегии.

Конец лонгрида

Дочитаете до конца — засчитается автоматически

Предложить идею

Заполните форму ниже, и мы свяжемся с вами.

Увеличить лимиты API

Заполните форму ниже, и мы свяжемся с вами.