Исторические котировки акций (архив цен акций), это фундамент для любого серьезного инвестиционного анализа, бэктестинга торговых стратегий, налогового учета и фундаментальной оценки компаний. Без доступа к надежным данным о прошлом невозможно построить прогноз на будущее или оценить качество принятых ранее решений.
В этой статье мы подробно разберем, где найти архив цен акций, какие нюансы учитывать при работе с данными (сплиты, дивиденды, корректировки), какие инструменты использовать для загрузки и как правильно интерпретировать полученную информацию.
Зачем нужен архив цен акций? Основные сценарии использования
Понимание цели определяет выбор источника данных и формат их представления. Основные сценарии:
- Бэктестинг торговых стратегий: Проверка гипотез на исторических данных (Open, High, Low, Close, Volume) для оценки риск/доходности.
- Технический анализ: Построение графиков, расчет индикаторов (скользящие средние, RSI, MACD), поиск паттернов.
- Фундаментальный анализ: Расчет мультипликаторов (P/E, P/S, EV/EBITDA) в динамике за 5–10 лет.
- Налоговый учет и отчетность: Определение цены покупки/продажи для расчета налоговой базы (особенно важно для FIFO/LIFO методов).
- Корпоративные действия: Анализ реакции рынка на сплиты, консолидации, выплату дивидендов, SPO/IPO.
- Риск-менеджмент: Расчет исторической волатильности, VaR (Value at Risk), просадок (drawdowns).
Типы данных в архиве: «Сырые» vs «Скорректированные»
Это самый критически важный момент, который часто упускают новички.
Сырые цены (Raw Prices / Unadjusted)
Цены, такие какие они были на момент торговли. На графике они создают «прыжки» (гапы) в дни корпоративных действий.
- Пример: Акция стоила 1000 руб. Проведен сплит 1:10. На следующий день цена открытия 100 руб. На «сыром» графике видна просадка 90%, которой на самом деле не было.
Скорректированные цены (Adjusted Close / Split & Dividend Adjusted)
Цены, пересчитанные с учетом всех корпоративных действий (сплиты, консолидации, дивидендные выплаты).
- Принцип: История пересчитывается так, будто инвестор реинвестировал все дивиденды и прошел через все сплиты.
- Зачем: Позволяет корректно считать доходность за длительный период и строить правильные технические индикаторы.
Основные источники архива цен акций (Россия и Мир)
Официальные сайты бирж (Первичные источники)
Самые надежные, но часто неудобные для массовой загрузки (API часто платные или сложные).
- Московская Биржа (MOEX / ISS API): Основной источник для российских акций (SBER, GAZP, LKOH и др.). Предоставляет историю за любой период, включая Level 1 и Level 2 данные.
- Сайт: moex.com (раздел «Данные для торгов» -> «Архив котировок»)
- API: ISS MOEX (бесплатный, лимиты по запросам).
- СПБ Биржа: Для акций иностранных эмитентов, торгующихся в режиме доступа неквалифицированных инвесторов.
- NYSE / NASDAQ / CBOE: Официальные данные по американским акциям. Обычно доступны через платных вендоров (SIP data).
Финансовые терминалы и платформы (Профессиональный уровень)
- Bloomberg Terminal / Reuters Eikon: Золотой стандарт. Максимальная точность, корректировки, корпоративные действия, альтернативные данные. Стоимость: $20k–$25k в год.
- Quik / Transaq / SmartCOM: Российские терминалы. Позволяют выгрузить историю в текст/CSV прямо из терминала (меню «Таблица» -> «Экспорт» или через Lua-скрипты в Quik).
Бесплатные и фримиум веб-сервисы (Для ретейла и разработчиков)
| Сервис | Покрытие | API / Экспорт | Особенности корректировок |
|---|---|---|---|
| Yahoo Finance (finance.yahoo.com) | Мир (US, EU, RU через тикеры типа SBER.ME) | Python (yfinance), CSV ручной выгрузки | Хорошие Adjusted Close, но иногда ошибки по сплитам на RU рынке |
| Investing.com | Мир | CSV выгрузка (требует регистрации), нет публичного API | Удобный интерфейс, есть дивиденды и сплиты отдельно |
| Alpha Vantage | Мир (US основной) | Бесплатный API (5 req/min, 500/day) | Есть endpoint TIME_SERIES_DAILY_ADJUSTED |
| Twelve Data | Мир | API (бесплатный тариф 800 req/day) | Хорошее покрытие фундаменталки |
| MOEX ISS (Прямой API) | Россия (Полное покрытие) | REST API (JSON/CSV), бесплатно | Самые точные данные по РФ, нужны навыки парсинга |
| Finam / TradeLeader (Экспорт) | Россия, Фьючерсы, Форекс | Выгрузка TXT/CSV через веб-интерфейс | Очень популярный формат для Quik/WealthLab, есть минутки |
| Polygon.io | US Stocks, Options, Crypto | Платный API (есть бесплатный старт) | Институциональное качество, тиковые данные |
Как программно загрузить архив (Python примеры)
Для серьезного анализа ручная выгрузка CSV не подходит. Стандарт де-факто — Python.
Библиотека yfinance (Самый простой старт)
import yfinance as yf
import pandas as pd
ticker = "SBER.ME"
start_date = "2020-01-01"
end_date = "2024-01-01"
df = yf.download(ticker, start=start_date, end=end_date, progress=False, auto_adjust=True)
print(df;head)
df.to_csv(f"{ticker}_history.csv")
Прямой запрос к MOEX ISS API (Максимальная точность для РФ)
import requests
import pandas as pd
from datetime import datetime
def get_moex_history(ticker, start_date, end_date):
# Пример: https://iss.moex.com/iss/history/engines/stock/markets/shares/securities/SBER.json?from=2023-01-01&till=2023-12-31
url = f"https://iss.moex.com/iss/history/engines/stock/markets/shares/securities/{ticker}.json"
params = {
'from': start_date,
'till': end_date,
'start': 0, # Пагинация
'limit': 100 # Лимит на страницу (макс 100 для history)
}
all_data = []
columns = None
while True:
response = requests.get(url, params=params)
data = response.json
if columns is None:
columns = data['history']['columns']
batch = data['history']['data']
if not batch:
break
all_data.extend(batch)
params['start'] += len(batch)
df = pd.DataFrame(all_data, columns=columns)
# Важные колонки: TRADEDATE, OPEN, HIGH, LOW, CLOSE, VOLUME, VALUE, LEGALCLOSEPRICE (Цена закрытия для расчетов)
df['TRADEDATE'] = pd.to_datetime(df['TRADEDATE'])
df.set_index('TRADEDATE', inplace=True)
return df
df_sber = get_moex_history("SBER", "2023-01-01", "2023-12-31")
print(df_sber[['OPEN', 'HIGH', 'LOW', 'CLOSE', 'VOLUME']].head)
Библиотека moexalgo (Удобная обертка над MOEX API)
# pip install moexalgo
from moexalgo import Ticker
sber = Ticker("SBER")
candles = sber.candles(start="2023-01-01", end="2023-12-31", period='1d')
print(candles.head)
Нюансы работы с российским рынком (MOEX)
- Режимы торгов (BoardID): У одной акции может быть несколько режимов (TQBR, основной фондовый, TQTF — фонды, TQCB — облигации). Для акций почти всегда нужен TQBR (или SMAL для малых компаний). При парсинге ISS API фильтруйте по
BOARDID='TQBR'. - Тикеры vs SECID: В MOEX тикер (SBER) и SECID часто совпадают, но не всегда. Лучше использовать SECID.
- Дивидендные зазоры (Dividend Gaps): На российском рынке дивидендные выплаты часто большие (5-15% от цены). График «сырых» цен после выплаты дивиденда падает. Adjusted Close в Yahoo Finance для российских тикеров (.ME) иногда считает некорректно из-за специфики реестра (даты отсечки). Проверяйте вручную по данным MOEX (поле
LEGALCLOSEPRICEили расчет через корректировочные коэффициенты). - Сплиты и консолидации: Происходят редко (Сбербанк, Полюс, Яндекс). MOEX ISS выдает таблицу
securitiesс полемLOTSIZEи историей изменений номинала. - Иностранные акции на СПБ Бирже: Тикеры часто имеют суффиксы (например,
AAPL_RU,TSLA_RU). Ликвидность и спреды отличаются от US-рынка. Архив лучше брать с сайта СПБ Биржи или через брокерский терминал.
Форматы хранения данных
После загрузки данные нужно сохранить эффективно.
- CSV / Parquet: Стандарт для Data Science. Parquet (колончатый формат) сжимает данные в 5-10 раз лучше CSV и читается в Pandas мгновенно (
df.to_parquet/pd.read_parquet). - HDF5: Хорош для иерархических данных, но устаревает.
- Базы данных (TimescaleDB, InfluxDB, ClickHouse, PostgreSQL): Необходимы, если вы храните тиковые данные или историю по 1000+ тикерам и делаете сложные запросы (например, «дай мне все акции, где объем вырос в 3 раза за последний час»).
- DuckDB: Отличный встраиваемый OLAP-движок для аналитики прямо над Parquet-файлами без поднятия сервера БД.
Проверка качества данных (Data Quality Checklist)
Перед запуском бэктеста или отчетом обязательно прогоните чек-лист:
- [ ] Пропуски (NaN): Есть ли пропуски в торговые дни? (Праздники, технические сбои). Заполнять ли их (forward fill) или оставлять?
- [ ] Аномалии цены: Есть ли свечи с High < Low или Close > High? (Ошибки источника).
- [ ] Объем (Volume): Нулевой объем в торговый день? (Приостановка торгов).
- [ ] Корректировки: Совпадает ли Adjusted Close с ручным расчетом по дивидендам/сплитам?
- [ ] Выжившие (Survivorship Bias): Включены ли в архив дефолтнувшие/делистингнувшиеся компании? (Критично для тестирования стратегий «покупай и держи» или скрининга). Большинство бесплатных API (Yahoo, Alpha Vantage) выдают только текущие тикеры.
- [ ] Таймзона: Все таймстемпы в UTC или в локальном времени биржи (MSK для MOEX)? Смещение на 3-6 часов ломает интрадей-стратегии.
Продвинутые темы
Тиковые данные (Tick Data) и Order Book (Level 2/3)
Дневные свечи (OHLCV) скрывают внутридневную динамику. Для HFT, скальпинга и точного моделирования проскальзывания (slippage) нужны:
- Tick-by-tick: Каждая сделка (цена, объем, время, флаг агрессора).
- Order Book Snapshots / Incremental: Глубина рынка (Bid/Ask уровни).
Где взять: MOEX (платный продукт «Архив рыночных данных»), Finam (исторические тики за деньги), Polygon.io (US), Databento, Tardis.dev (крипта/фьючерсы). Объемы: терабайты. Требуют ClickHouse / Parquet на S3.
Корректировка на инфляцию / Риск-фри ставку
Для сравнения доходности 2000 года и 2024 года номинальные цены бесполезны. Нужно переводить в реальные цены (дефлятор ВВП или ИПЦ) или в единицы «риск-фри актива» (ОФЗ/US Treasuries).
Тотальный возврат (Total Return Index)
Строится на основе Adjusted Close. Показывает стоимость портфеля из 1 акции с реинвестированием всех дивидендов. Формула:
$$ TRI_t = TRI_{t-1} imes rac{AdjClose_t}{AdjClose_{t-1}} $$
Это единственно правильный бенчмарк для сравнения с индексами (IMOEX, S&P 500 TR).
Юридические аспекты и лицензирование
Внимание: Данные бирж — интеллектуальная собственность.
- Личное некоммерческое использование: Обычно разрешено бесплатно (Yahoo, MOEX ISS, Investing.com).
- Коммерческое использование (продажа сигналов, управление деньгами, SaaS): Требует покупки лицензии у биржи (MOEX, NYSE, NASDAQ) или у вендора (Refinitiv, Bloomberg, BCS Express API).
- Перераспространение: Нельзя выкладывать скачанные базы в открытый доступ (GitHub, Telegram-каналы) без разрешения правообладателя.
Резюме: Пошаговый план для начинающего аналитика
- Определите цель: Бэктест на дневках? Интрадей? Фундаментальный скрининг?
- Выберите источник:
- Россия, дневки, бесплатно -> MOEX ISS API (через moexalgo/yfinance).
- США, дневки, бесплатно -> Yahoo Finance (yfinance).
- Профессионально/Коммерчески -> Bloomberg / Polygon;io / MOEX Platform.
- Настройте загрузку: Скачайте Adjusted Close для доходности + Raw OHLCV для симуляции исполнения.
- Сохраните в Parquet: Структура папок:
/data/daily/RU/SBER.parquet. - Прогоните QA: Проверьте на пропуски, сплиты, дивиденды, выживаемость тикеров.
- Документируйте: Заведите
data_dictionary.md: источник, таймзона, метод корректировки, дата обновления.
Работа с архивом цен акций — это не просто скачивание CSV-файла. Это инженерный процесс сбора, очистки, корректировки и хранения данных. Качество ваших инвестиционных решений линейно зависит от качества входных данных («Garbage In, Garbage Out»).
Начните с бесплатных надежных источников (MOEX ISS для России, Yahoo Finance для США) и библиотек Python (moexalgo, yfinance), строго разделяйте «сырые» и «скорректированные» цены, храните данные в Parquet и всегда проверяйте корректность корпоративных действий. Это сэкономит вам месяцы отладки стратегий в будущем.
Статья подготовлена в ознакомительных целях. Не является индивидуальной инвестиционной рекомендацией. Данные о котировках задержаны или носят справочный характер. Перед принятием решений сверяйтесь с официальными источниками вашего брокера и биржи.