Прямой экспорт котировок с Финама в Excel через веб-интерфейс брокера недоступен — платформа не предоставляет кнопку "Сохранить как XLSX". Однако данные можно выгрузить в формате .csv, который легко конвертируется в таблицу Excel с сохранением структуры. Основная сложность возникает при попытке скачать историю по нескольким тикерам одновременно или за длительный период: сервис ограничивает объем выгрузки до 10 000 строк за запрос. Если вам нужны котировки за 5+ лет по акциям Газпрома или Сбербанка, придётся использовать обходные методы.
В этой инструкции разберём все рабочие способы — от ручного экспорта через терминал QUIK до автоматизации через API и сторонние сервисы вроде Investing.com. Особый акцент сделан на сохранении временных меток (timestamp) и корректном форматировании числовых данных (цена, объём), чтобы избежать ошибок при дальнейшем анализе в Excel. Если вы ранее сталкивались с проблемами типа "даты отображаются как числа" или "графики строятся криво", решения есть в соответствующих разделах.
1. Способ 1: Экспорт через веб-версию Финама (ограничения и обход)
Официальный сайт Финама позволяет скачивать котировки в .csv через раздел "Котировки и графики". Алгоритм простой, но есть нюансы:
- Перейдите на страницу инструмента (например, Газпром (GAZP)).
- Нажмите кнопку "Экспорт" под графиком.
- Выберите период (максимум — 10 000 строк, примерно 4–5 лет для дневных данных).
- Укажите формат
CSVи нажмите "Скачать".
Проблемы этого метода:
- 📉 Ограничение по строкам: Для акций с высокой волатильностью (например, Яндекс или Тинькофф) 10 000 строк покроет всего 2–3 года минутных котировок.
- 🕒 Некорректные временные метки: В Excel даты могут отобразиться как числа (например,
44197вместо01.01.2021). - 📊 Отсутствие объёмов: В некоторых экспортах пропускается колонка с объёмом сделок.
⚠️ Внимание: Если скачанный файл открывается как "бессмысленный набор символов", проверьте кодировку. В Excel при импорте выберитеUTF-8илиWindows-1251(в зависимости от версии сайта).
2. Способ 2: Автоматизация через API Финама (для технических пользователей)
Для программистов и аналитиков оптимальный вариант — использование API Финама. Сервис предоставляет доступ к историческим данным через HTTP-запросы. Преимущества:
- 🔄 Неограниченный период: Можно запрашивать данные с 1995 года.
- ⚡ Высокая скорость: Выгрузка 20 лет котировок занимает менее минуты.
- 📈 Гибкие настройки: Возможность выбрать таймфрейм (тики, минуты, дни) и поля (цена, объём, спред).
Пример запроса для получения дневных котировок Сбербанка (SBER) за 2023 год:
https://export.finam.ru/SBER_230101_231231.csv?market=1&em=67755&code=SBER&apply=0&df=1&mf=0&yf=2023&from=01.01.2023&dt=31&mt=11&yt=2023&to=31.12.2023&p=8&f=SBER_230101_231231&e=.csv&cn=SBER&dtf=1&tmf=1&MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1
Параметры запроса:
| Параметр | Описание | Пример |
|---|---|---|
em | ID инструмента (для SBER — 67755) | em=67755 |
df/mf/yf | День/месяц/год начала периода | df=1&mf=0&yf=2023 |
p | Период (8 — дневные котировки) | p=8 |
sep | Разделитель (1 — точка с запятой) | sep=1 |
Для автоматизации можно использовать скрипт на Python с библиотекой requests:
import requests
url = "https://export.finam.ru/SBER_230101_231231.csv?market=1&em=67755&code=SBER&apply=0&df=1&mf=0&yf=2023&from=01.01.2023&dt=31&mt=11&yt=2023&to=31.12.2023&p=8&f=SBER_230101_231231&e=.csv&cn=SBER&dtf=1&tmf=1&MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1&at=1"
response = requests.get(url)
with open("SBER_2023.csv", "wb") as file:
file.write(response.content)
Список ID популярных инструментов (em)
Акции:
- Сбербанк (SBER) — 67755
- Газпром (GAZP) — 16842
- Лукойл (LKOH) — 11557
- Ростелеком (RTKM) — 33734
Индексы:
- IMOEX — 15
- RTSI — 16
3. Способ 3: Выгрузка через терминал QUIK (для клиентов Финама)
Если вы торгуете через QUIK, у вас есть доступ к полной истории котировок без ограничений. Инструкция:
- Откройте терминал и перейдите в
Сервис → Экспорт данных. - Выберите инструмент (например, Si-12.23 для фьючерса на индекс РТС).
- Укажите период и таймфрейм (например,
D1для дневных данных). - Нажмите "Экспорт" и сохраните файл в формате
.txt.
Особенности:
- 📌 Формат данных: Файл сохраняется в табличном виде с разделителем табуляции (
.tsv). - 🔧 Настройка колонок: Можно выбрать, какие поля экспортировать (цена открытия, максимум, минимум, закрытие, объём).
- 🚫 Ограничение: Для фьючерсов и опционов история доступна только за последний год.
⚠️ Внимание: При экспорте тиковых данных (T1) файл может весить несколько гигабайт. Для анализа в Excel рекомендуется разбивать период на части (например, по месяцам).
1. Откройте сохранённый .txt в Excel через Файл → Открыть → Выбрать тип "Все файлы".
2. В мастере импорта укажите разделитель Табуляция.
3. Преобразуйте колонку с датой в формат ДД.ММ.ГГГГ ЧЧ:ММ:СС.
4. Удалите лишние столбцы (например, OPENINT для акций).-->
4. Способ 4: Использование сторонних сервисов (Investing.com, TradingView)
Если Финам ограничивает выгрузку, можно воспользоваться альтернативными источниками:
| Сервис | Преимущества | Недостатки |
|---|---|---|
| Investing.com | Большая база инструментов, экспорт в Excel напрямую | Ограничение 500 строк для бесплатных пользователей |
| TradingView | Визуальный редактор графиков, экспорт в CSV | Требуется премиум-подписка для истории >5 лет |
| Yahoo Finance | Бесплатный API, данные с 1970 года | Нет российских акций (только ADR) |
Пример выгрузки с Investing.com:
- Откройте страницу инструмента (например, Газпром).
- Нажмите "История котировок".
- Выберите период и нажмите "Экспорт данных".
- Сохраните файл в формате
Excel (XLS).
Для TradingView потребуется:
- Открыть график инструмента.
- Нажать на иконку "Экспорт данных" (в правом верхнем углу).
- Выбрать формат
CSV для Excel.
5. Обработка данных в Excel: исправление ошибок
После выгрузки котировки часто требуют доработки. Типичные проблемы и их решения:
- 🗓️ Некорректные даты: Выделите колонку с датами →
Главная → Формат ячеек → Дата. Если отображается как число, используйте формулу=ДАТАЗНАЧ(A1). - 💰 Цены как текст: Примените формат
Числовойили используйте=ЗНАЧЕН(A1). - 📊 Пропущенные значения: Для заполнения пробелов используйте
=ЕСЛИ(ЕПУСТО(A1);A2;A1)(тяните вниз). - ⏱️ Неправильный таймфрейм: Для конвертации минутных данных в дневные используйте сводную таблицу с группировкой по дате.
Пример формулы для расчёта дневного изменения цены:
=((Цена_закрытия_сегодня - Цена_закрытия_вчера) / Цена_закрытия_вчера) * 100
Для визуализации рекомендуется:
- 📈 Свечной график: Выделите данные (дата, открытие, максимум, минимум, закрытие) →
Вставка → График → "Объём-открытие-максимум-минимум-закрытие". - 🔍 Скользящие средние: Добавьте линии SMA (20) и SMA (200) через
Добавить элемент графика → Линия тренда.
6. Альтернативные инструменты для автоматизации
Если вам нужны регулярные выгрузки (например, еженедельные отчёты), рассмотрите:
| Инструмент | Описание | Стоимость |
|---|---|---|
| MetaTrader 5 | Встроенный экспорт котировок в CSV, поддержка MQL5 для автоматизации | Бесплатно |
| TSLab | Скрипты для выгрузки истории с Финама и других брокеров | От 900 ₽/мес |
| Python + Pandas | Библиотеки для парсинга и обработки данных (пример кода в разделе про API) | Бесплатно |
| Excel Power Query | Автоматическое обновление данных из веб-источников | Входит в Excel 2016+ |
Пример скрипта для MetaTrader 5:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string symbol = "GAZP"; // Тикер
ENUM_TIMEFRAMES period = PERIOD_D1; // Таймфрейм
datetime start = StringToTime("01.01.2020");
datetime end = StringToTime("31.12.2023");
int handle = iOpen(symbol, period, start, end);
if(handle > 0)
{
string filename = symbol + "_history.csv";
FileDelete(filename);
int file = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_ANSI, ";");
FileWrite(file, "Date", "Time", "Open", "High", "Low", "Close", "Volume");
while(!FileIsEnding(file))
{
MqlRates rates[];
int count = CopyRates(symbol, period, start, end, rates);
for(int i = 0; i < count; i++)
{
FileWrite(file,
rates[i].time, // Дата и время
rates[i].open,
rates[i].high,
rates[i].low,
rates[i].close,
rates[i].tick_volume
);
}
break;
}
FileClose(file);
Print("Данные сохранены в ", filename);
}
}
7. Частые ошибки и их решения
При работе с котировками из Финама пользователи сталкиваются с типичными проблемами:
- 🚫 Ошибка 403 при запросе к API: Проверьте, что в URL указаны корректные параметры
marketиem. Для российских акцийmarket=1(Мосбиржа). - 📉 Пропущенные дни в истории: Финам не предоставляет данные по дням, когда торгов не было (например, праздники). Используйте функцию Excel
=ЕСЛИОШИБКА(...для заполнения пробелов. - 🔄 Дублирующиеся строки: Удалите дубликаты через
Данные → Удалить дубликаты. - 🕒 Несовпадение временных зон: Данные Финама приводятся к московскому времени (UTC+3). Для конвертации в UTC используйте формулу
=A1 - (3/24).
⚠️ Внимание: Если выгруженные котировки содержат аномальные значения (например, цена0.01для Сбербанка), проверьте, не попали ли в выборку данные по дивидендным гэпам или сплитам. Используйте колонкуADJ_CLOSE(скорректированная цена) для анализа.
Как проверить целостность данных?
1. Постройте график закрытия (Close) — резкие скачки без новостного фона говорят об ошибке.
2. Проверьте минимальное/максимальное значение в колонке — если оно выбивается из диапазона последних 5 лет, данные повреждены.
3. Сравните количество строк с ожидаемым (например, 252 торговых дня в году для дневных данных).
FAQ: Ответы на популярные вопросы
Можно ли скачать котировки за весь исторический период (с 1997 года)?
Да, но с оговорками:
- Через API Финама доступны данные с 1995 года, но для некоторых акций (например, Газпром) история начинается с 2000-х.
- Для инструментов, появившихся позже (например, Тинькофф с 2006 года), данные будут только с даты первого торгов.
- Сторонние сервисы вроде Investing.com могут иметь пробелы в истории для российских акций.
Рекомендуем разбивать запрос на периоды по 5 лет, чтобы избежать ошибок сервера.
Почему в выгруженном файле вместо кириллических названий колонок — кракозябры?
Проблема связана с кодировкой. Решения:
- При открытии CSV в Excel выберите кодировку
Windows-1251. - Используйте Notepad++ для конвертации файла в
UTF-8 без BOM. - В Power Query при импорте укажите кодировку
1251вручную.
Если названия колонок не критичны, можно просто переименовать их в Excel после импорта.
Как скачать котировки по нескольким тикерам одновременно?
Финам не предоставляет массовой выгрузки, но есть обходные пути:
- API-скрипт: Напишите цикл на Python, который последовательно запрашивает данные по каждому тикеру из списка.
- QUIK: Создайте список инструментов в терминале и экспортируйте их поочерёдно.
- Сторонние сервисы: На TradingView можно добавить несколько тикеров в один график и экспортировать сводную таблицу.
Пример Python-кода для массовой выгрузки:
tickers = ["SBER", "GAZP", "LKOH"]
for ticker in tickers:
url = f"https://export.finam.ru/{ticker}_230101_231231.csv?market=1&em={get_em(ticker)}&code={ticker}&p=8&f={ticker}_230101_231231&e=.csv&cn={ticker}&sep=1"
response = requests.get(url)
with open(f"{ticker}.csv", "wb") as file:
file.write(response.content)
Можно ли автоматически обновлять котировки в Excel?
Да, с помощью:
- Power Query:
- Перейдите в
Данные → Получить данные → Из других источников → Из веб. - Вставьте URL API Финама (пример выше).
- Настройте автоматическое обновление каждые N минут.
- Перейдите в
=IMPORTDATA("URL_API") для динамической подгрузки.Пример VBA-кода для обновления:
Sub UpdateQuotes()
Dim url As String, path As String
url = "https://export.finam.ru/SBER_230101_231231.csv?market=1&em=67755&code=SBER&p=8"
path = "C:\Quotes\SBER.csv"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("MSXML2.XMLHTTP")
WinHttpReq.Open "GET", url, False
WinHttpReq.Send
If WinHttpReq.Status = 200 Then
Open path For Binary Access Write As #1
Put #1, , WinHttpReq.responseBody
Close #1
Workbooks.Open path
End If
End Sub
Как конвертировать тиковые данные в минутные/часовой таймфрейм?
Для агрегации тиковых данных в Excel:
- Добавьте колонку с округлённым временем (например, до минуты):
=ОКРВНИЗ(A2;"0:01"). - Используйте сводную таблицу с группировкой по округлённому времени.
- Для расчёта OHLV (Open-High-Low-Volume) в сводной таблице:
Open— первое значение в группе.High— максимум.Low— минимум.Close— последнее значение.Volume— сумма.
Для больших объёмов данных (миллионы строк) лучше использовать Python (Pandas) или SQL.