Скачиваем котировки с Финама в Excel: 5 проверенных способов

Прямой экспорт котировок с Финама в Excel через веб-интерфейс брокера недоступен — платформа не предоставляет кнопку "Сохранить как XLSX". Однако данные можно выгрузить в формате .csv, который легко конвертируется в таблицу Excel с сохранением структуры. Основная сложность возникает при попытке скачать историю по нескольким тикерам одновременно или за длительный период: сервис ограничивает объем выгрузки до 10 000 строк за запрос. Если вам нужны котировки за 5+ лет по акциям Газпрома или Сбербанка, придётся использовать обходные методы.

В этой инструкции разберём все рабочие способы — от ручного экспорта через терминал QUIK до автоматизации через API и сторонние сервисы вроде Investing.com. Особый акцент сделан на сохранении временных меток (timestamp) и корректном форматировании числовых данных (цена, объём), чтобы избежать ошибок при дальнейшем анализе в Excel. Если вы ранее сталкивались с проблемами типа "даты отображаются как числа" или "графики строятся криво", решения есть в соответствующих разделах.

1. Способ 1: Экспорт через веб-версию Финама (ограничения и обход)

Официальный сайт Финама позволяет скачивать котировки в .csv через раздел "Котировки и графики". Алгоритм простой, но есть нюансы:

  1. Перейдите на страницу инструмента (например, Газпром (GAZP)).
  2. Нажмите кнопку "Экспорт" под графиком.
  3. Выберите период (максимум — 10 000 строк, примерно 4–5 лет для дневных данных).
  4. Укажите формат 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

Параметры запроса:

ПараметрОписаниеПример
emID инструмента (для 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, у вас есть доступ к полной истории котировок без ограничений. Инструкция:

  1. Откройте терминал и перейдите в Сервис → Экспорт данных.
  2. Выберите инструмент (например, Si-12.23 для фьючерса на индекс РТС).
  3. Укажите период и таймфрейм (например, D1 для дневных данных).
  4. Нажмите "Экспорт" и сохраните файл в формате .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:

  1. Откройте страницу инструмента (например, Газпром).
  2. Нажмите "История котировок".
  3. Выберите период и нажмите "Экспорт данных".
  4. Сохраните файл в формате Excel (XLS).

Для TradingView потребуется:

  1. Открыть график инструмента.
  2. Нажать на иконку "Экспорт данных" (в правом верхнем углу).
  3. Выбрать формат CSV для Excel.
📊 Какой способ выгрузки котировок вы используете чаще?
Ручной экспорт с сайта Финама
API Финама
Терминал QUIK
Сторонние сервисы (Investing, TradingView)
Другой вариант

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 лет, чтобы избежать ошибок сервера.

Почему в выгруженном файле вместо кириллических названий колонок — кракозябры?

Проблема связана с кодировкой. Решения:

  1. При открытии CSV в Excel выберите кодировку Windows-1251.
  2. Используйте Notepad++ для конвертации файла в UTF-8 без BOM.
  3. В 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:
    1. Перейдите в Данные → Получить данные → Из других источников → Из веб.
    2. Вставьте URL API Финама (пример выше).
    3. Настройте автоматическое обновление каждые N минут.
  • VBA-макрос: Напишите скрипт, который раз в день скачивает новый CSV и дописывает данные в основной файл.
  • Google Sheets: Используйте функцию =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:

    1. Добавьте колонку с округлённым временем (например, до минуты): =ОКРВНИЗ(A2;"0:01").
    2. Используйте сводную таблицу с группировкой по округлённому времени.
    3. Для расчёта OHLV (Open-High-Low-Volume) в сводной таблице:
      • Open — первое значение в группе.
      • High — максимум.
      • Low — минимум.
      • Close — последнее значение.
      • Volume — сумма.

    Для больших объёмов данных (миллионы строк) лучше использовать Python (Pandas) или SQL.