Три месяца назад я начал собирать робота для российского рынка. Первый вопрос: где взять данные для бэктеста?

Гуглёж показал Finam Export — бесплатно, удобно. Скачал 5 лет истории по Сбербанку. Запустил бэктест. Результат: +180% годовых, максимальная просадка 8%.

“Гений!” — подумал я.

Потом проверил эту же стратегию на данных MOEX (купленных за деньги). Результат: +12% годовых, просадка 25%.

Разница в 15 раз. Что пошло не так?

Качество данных.

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

Почему качество данных — это важно

Перед тем, как погружаться в источники, разберёмся, что может пойти не так.

Проблема #1: Survivorship Bias (ошибка выжившего)

Вы скачиваете список акций ММВБ. Тестируете стратегию на 10-летней истории.

Проблема: в этом списке только компании, которые живы сегодня. Нет тех, кто обанкротился, делистнулся, был поглощён.

В США через 10 лет датасет теряет 75% акций, которые реально торговались в прошлом. Для России точных цифр нет, но эффект аналогичен.

Последствия:

Ваш бэктест показывает фантастические результаты. Потому что робот “не знал”, какие компании обанкротятся. Он купил Русал в 2020 (упал на 90%), держал до делистинга 2022. В бэктесте этой акции нет — вы избежали убытка. На реале — нет.

Эффект составляет 0.9-4% годовых завышения доходности.

Как понять, есть ли bias:

Посмотрите на ваш датасет. Если список акций за 2015 год идентичен списку 2025 года — это survivorship bias.

Проблема #2: Корректировки на дивиденды и сплиты

Акция торговалась по 100 рублей. Выплатили дивиденды 10 рублей. На следующий день цена открылась на 90 рублей.

Некорректированные данные: 100 → 90 руб. Падение 10%.

Корректированные данные: 90 → 90 руб. Цена скорректирована назад с учётом дивиденда.

Если вы используете некорректированные данные, робот увидит “падение цены” и продаст. На самом деле ничего не упало — просто дивиденды.

Аналогично со сплитами (split). Акция стоила 1000 руб, провели сплит 1:10. Стала стоить 100 руб, но акций в 10 раз больше.

Некорректированные данные: робот видит “крах на 90%” и паникует.

Корректированные данные: цена скорректирована, робот понимает, что это технический сплит.

Проблема #3: Пропуски и ошибки в данных

Бесплатные источники часто содержат:

  • Пропуски (отсутствуют данные за определённые дни)
  • Ошибки (неправильные цены, объёмы)
  • Несоответствия (разные провайдеры дают разные цифры)

Реальный пример:

Finam Export показывал объёмы в 2 раза меньше, чем QUIK. Если ваша стратегия фильтрует по объёму — результаты бэктеста врут.

Проблема #4: Задержка данных (для realtime)

Бесплатные API часто дают данные с задержкой 15-20 минут.

Для бэктеста это не проблема. Для реальной торговли — критично.

Если ваш робот получает цены с задержкой 15 минут, он торгует по ценам, которых уже нет.


Теперь, понимая риски, разберём источники данных для российского рынка.

Бесплатные источники

1. Finam Export

URL: www.finam.ru/profile/moex/export

Что даёт:

  • Исторические данные по российским акциям, фьючерсам
  • Минутки, 5-минутки, дневки
  • Скачивание в CSV/TXT
  • История до 10+ лет (зависит от инструмента)

Плюсы:

  • Бесплатно
  • Удобный веб-интерфейс
  • Большой охват инструментов

Минусы:

Когда использовать:

Для быстрого прототипирования. Скачали данные, прогнали стратегию, поняли, работает ли идея.

Когда НЕ использовать:

Для production-ready бэктестов. Данные недостаточно качественные.

Как скачать:

  1. Откройте https://www.finam.ru/profile/moex/sber/export/
  2. Выберите период (например, 01.01.2020 - 31.12.2024)
  3. Выберите таймфрейм (минутки, дневки)
  4. Скачайте CSV

Пример Python-кода для работы с Finam:

import pandas as pd

# Скачанный файл от Finam
df = pd.read_csv('SBER_5min.csv', parse_dates=['<DATE>'])
df.columns = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']
df['Datetime'] = pd.to_datetime(df['Date'].astype(str) + ' ' + df['Time'].astype(str))
df = df[['Datetime', 'Open', 'High', 'Low', 'Close', 'Volume']]
print(df.head())

2. MOEX ISS API (бесплатный уровень)

URL: iss.moex.com

Документация: www.moex.com/a2193

Что даёт:

  • REST API к данным Мосбиржи
  • Исторические свечи (минутки, дневки)
  • Trades (анонимные сделки)
  • Quotes (котировки)
  • Справочники (тикеры, описания инструментов)

Плюсы:

Минусы:

  • Бесплатный доступ ограничен текущим торговым днём
  • Для истории >1 дня может требоваться подписка (зависит от эндпоинта)
  • Нет тиковых данных, нет стакана (orderbook) в бесплатном доступе

Пример запроса:

Получить дневные свечи по Сбербанку за последний месяц:

https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/SBER/candles.json?from=2025-01-01&till=2025-01-27&interval=24

Python (через aiomoex):

import aiomoex
import pandas as pd
import asyncio

async def main():
    async with aiomoex.ISSClientSession():
        data = await aiomoex.get_board_candles('SBER', start='2025-01-01')
        df = pd.DataFrame(data)
        print(df.head())

asyncio.run(main())

Когда использовать:

Для получения официальных данных Мосбиржи. Для realtime торговли (через подписку).

Когда НЕ использовать:

Если нужна длинная история (10+ лет) бесплатно — ISS API может не дать.

3. Yahoo Finance (yfinance)

Библиотека: github.com/ranaroussi/yfinance

Что даёт:

  • Исторические данные по мировым рынкам
  • Российские акции доступны (с суффиксом .ME, например SBER.ME)
  • Дневки, недельки, месячные свечи

Плюсы:

  • Бесплатно
  • Удобная Python-библиотека
  • Корректировки на дивиденды/сплиты (параметр auto_adjust=True)

Минусы:

Пример:

import yfinance as yf

# Скачать данные по Сбербанку
ticker = yf.Ticker("SBER.ME")
hist = ticker.history(start="2020-01-01", end="2025-01-01")
print(hist.head())

# С корректировкой на дивиденды
hist_adjusted = ticker.history(start="2020-01-01", end="2025-01-01", auto_adjust=True)

Когда использовать:

Для быстрых экспериментов. Для стратегий на дневных свечах.

Когда НЕ использовать:

Для production (может сломаться). Для внутридневных стратегий (нет минуток).

4. Investing.com

URL: https://ru.investing.com

Что даёт:

  • Веб-интерфейс для скачивания исторических данных
  • Российские акции, фьючерсы, индексы
  • Дневки, недельки, месячные

Плюсы:

  • Бесплатно (через веб-интерфейс)
  • Широкий охват инструментов

Минусы:

  • Нет официального API (приходится парсить)
  • Неудобно для автоматизации
  • Данные могут отличаться от Мосбиржи

Когда использовать:

Когда нужно быстро глазами посмотреть исторический график или скачать CSV вручную.

Когда НЕ использовать:

Для автоматизированного бэктестинга (нет API).

5. Open-Source архивы (cloud.mail.ru и подобные)

Daytradingschool.ru предлагает скачать архивы минутных данных по российским фьючерсам.

Что даёт:

  • ZIP-архивы с CSV-файлами
  • История за несколько лет
  • Бесплатно

Плюсы:

  • Бесплатно
  • Сразу большой объём данных

Минусы:

  • Непонятное происхождение данных (откуда взяли?)
  • Нет обновлений (архив устаревает)
  • Качество неизвестно

Когда использовать:

Если вы готовы рискнуть качеством ради бесплатного доступа.

Платные источники (качественные данные)

1. MOEX AlgoPack

URL: data.moex.com/products/algopack

Что даёт:

  • Super Candles: 5-минутные свечи с 50+ параметрами (средневзвешенные цены, доля покупок/продаж, объёмы новых/снятых заявок, дисбаланс спроса/предложения)
  • Market Data: realtime стаканы и свечи
  • Mega Alerts, Market Signals: уведомления о рыночных аномалиях
  • История с 2020 года

Цена:

Бета-версия доступна бесплатно после регистрации на moex.com. Для коммерческого использования цены уточнять у MOEX.

Плюсы:

Минусы:

  • История только с 2020 года
  • Платный доступ (бета бесплатна, но не навсегда)
  • Сложнее в использовании (больше параметров = выше кривая обучения)

Пример Python (moexAlgo):

import moexalgo

# Получить Super Candles по Сбербанку
candles = moexalgo.candles(ticker='SBER', period='5min', start='2024-01-01')
print(candles.head())

Когда использовать:

Для профессионального алготрейдинга. Когда нужны детальные данные о микроструктуре рынка.

2. MOEX Полный Orderbook (Full Order Book)

URL: fs.moex.com/f/3428/full-orderbook.pdf

Что даёт:

  • Полная история стакана заявок (каждое изменение)
  • Все сделки (trades)
  • Точность до миллисекунды

Цена:

Платная подписка (цены уточнять у MOEX).

Плюсы:

  • Самые детальные данные
  • Можно восстановить состояние рынка в любой момент времени
  • Для HFT и микроструктурного анализа

Минусы:

  • Очень дорого
  • Огромные объёмы данных (терабайты)
  • Требует серьёзной инфраструктуры для обработки

Когда использовать:

Для институциональных игроков, HFT-фирм, market makers.

Когда НЕ использовать:

Для розничного трейдера (избыточно и дорого).

3. Платные провайдеры (Norgate, Qpile, и др.)

Для российского рынка платных провайдеров меньше, чем для США.

Норгейт (Norgate Data):

  • Специализируется на США/Австралии
  • Российский рынок не покрывает

Qpile:

  • Есть данные по российскому рынку
  • Платная подписка (цены уточнять)
  • Качество данных высокое

Realtime данные (для торговли)

Для realtime торговли нужны живые котировки и возможность отправки заявок.

1. Через брокера (QUIK, Transaq, Alor API)

QUIK:

  • DDE, Lua, Trans2QUIK
  • Realtime котировки при наличии счёта
  • Бесплатно (если у вас есть счёт у брокера)

Transaq:

  • XML API
  • Realtime
  • Через брокеров (Финам, БКС и др.)

Alor API:

  • REST/WebSocket API
  • Современный, удобный
  • Бесплатно при наличии счёта

Плюсы:

  • Бесплатно (при наличии счёта)
  • Официальный источник
  • Надёжно

Минусы:

  • Требуется счёт у брокера
  • Нужно разбираться с API каждого брокера

2. Прямое подключение к бирже (FIX/FAST)

MOEX предлагает multicast feeds через FIX/FAST протокол.

Что даёт:

  • OrderBook feed (стакан)
  • Trade List feed (сделки)
  • Market Statistics
  • Latency в микросекундах

Цена:

  • Требуется аккредитация
  • Colocation (размещение серверов рядом с биржей)
  • От сотен тысяч до миллионов рублей в год

Когда использовать:

Только для HFT и институциональных игроков.

Сравнительная таблица источников данных

Источник Цена История Realtime Качество Для кого
Finam Export Бесплатно До 10+ лет Нет Среднее Новички
MOEX ISS API Бесплатно/Платно Ограничено Да (по подписке) Высокое Все
Yahoo Finance Бесплатно До 20+ лет Нет Среднее Эксперименты
MOEX AlgoPack Бета бесплатно С 2020 Да Очень высокое Профи
Full Orderbook Дорого По подписке Да Максимальное HFT, институционалы
Через брокера Бесплатно с счётом Зависит Да Высокое Все с счётом

Практические рекомендации

Для новичков:

Старт: Finam Export или Yahoo Finance.

Скачайте данные по 5-10 акциям. Прогоните простую стратегию (SMA-кросс). Проверьте, работает ли идея хотя бы на бесплатных данных.

Если стратегия не работает даже на “хороших” данных Finam — она не будет работать нигде.

Следующий шаг: MOEX ISS API.

Перепроверьте результаты на официальных данных Мосбиржи. Если результаты близки к Finam — ок. Если разница большая — копайте глубже.

Для опытных трейдеров:

Используйте MOEX AlgoPack для детального бэктеста.

Если стратегия показывает хорошие результаты — переходите на realtime через брокера (Alor API, QUIK).

Проверяйте survivorship bias:

Убедитесь, что ваш датасет включает делистнутые акции. Если нет — результаты завышены.

Проверяйте корректировки:

Используйте данные с корректировками на дивиденды/сплиты. Иначе бэктест будет врать.

Для HFT и профессионалов:

Full Orderbook от MOEX + colocation.

Нет других вариантов для микросекундной торговли.

Типичные ошибки при выборе данных

Ошибка #1: “Бесплатно = достаточно”

Новички скачивают Finam, видят фантастические результаты бэктеста, запускают робота на реале. Сливают депозит.

Почему: Данные Finam содержат ошибки, несоответствия, пропуски. Бэктест врёт.

Решение: Проверяйте результаты на нескольких источниках.

Ошибка #2: Игнорирование survivorship bias

Тестируете стратегию на списке акций ММВБ-10. Все 10 компаний живы последние 10 лет. Результат: отличная доходность.

Почему: Вы тестировали только на “winners”. Лузеры (обанкротившиеся компании) не попали в датасет.

Решение: Используйте датасет с делистнутыми компаниями. Или тестируйте на широком индексе (ММВБ-50, ММВБ-100).

Ошибка #3: Использование некорректированных данных

Робот видит “падение цены на 10%” после дивидендов, продаёт. На самом деле цена не упала — просто дивиденды.

Решение: Используйте adjusted data (скорректированные данные). Yahoo Finance даёт через параметр auto_adjust=True.

Ошибка #4: Смешивание источников

Бэктест на данных Finam. Realtime торговля через QUIK.

Проблема: данные расходятся. Объёмы, цены, тайминги сделок — всё разное.

Результат бэктеста не переносится на реал.

Решение: Используйте один источник для бэктеста и торговли. Или проверяйте, что данные идентичны.

Итоги

Где взять данные для алготрейдинга в России:

Бесплатно (для экспериментов):

  • Finam Export (быстро, просто, но качество среднее)
  • MOEX ISS API (официально, надёжно, но ограничения)
  • Yahoo Finance (удобно для дневок, но неофициально)

Платно (для серьёзной работы):

  • MOEX AlgoPack (детальные данные с 2020 года)
  • Full Orderbook (для HFT)

Realtime (для торговли):

  • Через брокера (QUIK, Alor API, Transaq)
  • Прямое подключение FIX/FAST (для профи)

Золотое правило:

Начинайте с бесплатных данных. Проверяйте идею. Если стратегия работает — переходите на качественные платные данные.

Не запускайте робота на реал, если бэктест делали только на Finam.

Качество данных — это фундамент алготрейдинга.

Плохие данные → плохой бэктест → сливающий робот.

Инвестируйте в качественные данные. Это дешевле, чем потерять депозит.


Полезные ссылки:

Бесплатные источники:

Платные источники:

Исследования и статьи: