Где взять данные для алготрейдинга в России: от бесплатного Finam до профессионального MOEX
Три месяца назад я начал собирать робота для российского рынка. Первый вопрос: где взять данные для бэктеста?
Гуглёж показал 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+ лет (зависит от инструмента)
Плюсы:
- Бесплатно
- Удобный веб-интерфейс
- Большой охват инструментов
Минусы:
- Несоответствия в объёмах (данные расходятся с QUIK)
- Проблемы со склеенными фьючерсами (дивидендные гэпы, ошибки)
- Finam блокирует автоматическую выгрузку (запрещают парсинг, добавили токены в URL)
- Нет корректировок на сплиты/дивиденды (по умолчанию)
Когда использовать:
Для быстрого прототипирования. Скачали данные, прогнали стратегию, поняли, работает ли идея.
Когда НЕ использовать:
Для production-ready бэктестов. Данные недостаточно качественные.
Как скачать:
- Откройте https://www.finam.ru/profile/moex/sber/export/
- Выберите период (например, 01.01.2020 - 31.12.2024)
- Выберите таймфрейм (минутки, дневки)
- Скачайте 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 (котировки)
- Справочники (тикеры, описания инструментов)
Плюсы:
- Официальный источник Мосбиржи
- Надёжные данные
- JSON/XML/CSV форматы
- Python-библиотеки (aiomoex, apimoex)
Минусы:
- Бесплатный доступ ограничен текущим торговым днём
- Для истории >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)
Минусы:
- Официальный API закрыт (yfinance использует неофициальный доступ)
- Может сломаться в любой момент
- Задержка данных (не realtime)
- Ограничения на скачивание для бесплатных пользователей
Пример:
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.
Плюсы:
- Официальный источник Мосбиржи
- Очень детальные данные (50+ параметров на свечу)
- Python-библиотека moexAlgo для удобного доступа
Минусы:
- История только с 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.
Качество данных — это фундамент алготрейдинга.
Плохие данные → плохой бэктест → сливающий робот.
Инвестируйте в качественные данные. Это дешевле, чем потерять депозит.
Полезные ссылки:
Бесплатные источники:
Платные источники:
Исследования и статьи:
Обсуждение
Присоединяйтесь к обсуждению в нашем Telegram-чате!