Блог им. JohnMitrich

Качаем исторические данные с MOEX!

Итак, передо мной, уверен, как и перед многими, встал вопрос поиска исторической информации с Мосбиржи. Немного зная python, я написал вот такой парсер:
import requests
import datetime
import pathlib

SECIDs = ["GAZP", "BANEP", "LKOH"]
DISK = "E"
for SECID in SECIDs:
    from_date = "2020-05-04"
    to_date = "2005-01-03"
    while str(to_date) != from_date:
        to_date = str(to_date)
        to_date = to_date.split('-')
        a = datetime.date(int(to_date[0]), int(to_date[1]), int(to_date[2]))
        b = datetime.timedelta(days=140)
        to_date = a + b
        pathlib.Path("{}:/{}/{}".format(DISK, "Database_MOEX", SECID)).mkdir(parents=True, exist_ok=True)
        filename = SECID + "_" + str(to_date) + ".csv"
        with requests.get("http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/tqbr/securities/{}.csv?date={}".format(SECID, to_date)) as response:
            with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f:
                for chunk in response.iter_content():
                    f.write(chunk)
Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.
Итак, перейдем к использованию:
1) Добавьте тикеры интересующих вас акций в список (SECIDs) как показано в примере
2) Выбирите диск (DISK) для сохранения выкаченной информации
3) Запишите даты («ГГГГ-ММ-ДД») в from_date (До какой даты качать) и to_date (С какой даты качать). Обе даты должны быть понедельниками, иначе код заработает не правильно
4) Запустить парсер
P.s. Буду рад вашим отзывам и поправкам:)
P.s.s. Еще больше буду рад если вы поделитесь способами выгрузки исторической информации и/или поделитесь ею со мной, можно в лс:)
P.s.s.s. Да, я знаю что я наглый)
17.5К | ★63
41 комментарий
Рынок любит слезу.
Деньги — наглых.
Форум — никого.
avatar
bocha, что верно то верно)
Подскажите, а по другим секциям кроме фондовой можно тоже?
avatar
Gordon, по всем можно.
avatar

Что если понедельник выходной?

А так + и звездочка 

avatar
заходи сюда - https://www.finam.ru/profile/moex-akcii/sberbank/export/  — и качай любые котиры до усрачки))
Сергей Симонов, или с mfd)
avatar
Сергей Симонов, человек делает программу, что бы не усираться как ты. Респект ему, а ты дальше усирайся.

avatar
олег гуськов, программирование ради программирования — удел программистов, а не трейдеров))
Раздел «Алго» постепенно превращается в бесконечный кружок авиамоделизма :(
Дмитрий Овчинников, потом все подрастут и будет интересней =)
avatar
Код обрезан вроде, или баг разметки.
avatar
Получается сайт выдает всегда по 140 дней? А где Вы нашли описание запроса?
avatar
Samtakoy Samtokoich, мосбиржа, я так понял выдоет порциями по 100 рабочих дней, то есть 140 обычных) Вот справочник запросов: iss.moex.com/iss/reference/
Емельянов Иван, вот, руководство разработчика, нашел через ссылку Михаила:
fs.moex.com/files/6523
avatar
Samtakoy Samtokoich, Спасибо) к сожалению не знаю где часовики взять, но вроде свечки можно, правда не знаю какой у них таймфрейм
Емельянов Иван, я раньше выкачивал с финама, но пару недель назад они стали отлавливать и запрещать автоматическое скачивание.
avatar
И это получается только дневки, а часовики не знаете где можно в автоматизированном режиме скачивать?
avatar
Михаил, люди поиском пользоваться не умеют(( MOEX ISS набрал и нашел на раз-два, даже самому писать ничего не надо. Хотя, иногда полезно и самому разобраться, с питоном не очень много времени на это требуется.
avatar

Вообщем, получается скачивать кучу файлов с одинаковыми датами.

В ручном режиме вроде работает

https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/EQNE/securities/gazp?from=2010-01-01&till=2010-01-20

avatar
Михаил Titov, к сожалению да(

Емельянов Иван, в коде нужно в строчке с адресом to_date заменить на str(to_date)

Посмотрел, что он не строчку вставлял в адрес, а численное значение даты

avatar
Михаил Titov, Спасибо за замечания!)
Емельянов Иван, Иван, подскажите (если знаете) как в Excel можно подгружать данныe инструментов срочного рынка Мосбиржи. 
Можно с задержкой или End of Date.
avatar
Иван Совяк, lua+dde
avatar
broker25, а что-нибудь готовое уже есть? типа штатной надстройки Акции (Stock Quotes) в Excel365?
В ней акции подгружать можно, но срочные рынки, увы, никак.

avatar
Иван Совяк, quik+dde вполне себе готовое. Не надо там кодить
avatar

Емельянов Иван, вот получше 

import requests<br />import datetime<br />import pathlib<br />import apimoex<br />import pandas as pd<br /><br />TICK = "SNGSP5"<br /><br />with requests.Session() as session:<br />         data = apimoex.get_board_history(session, 'SNGSP',)<br />         df = pd.DataFrame(data)<br />         df.to_csv("D:/Database_MOEX/{}.txt".format(TICK))
avatar
Михаил Titov, посмотрите либо Михаила, или мой код smart-lab.ru/blog/535735.php#comment11111685
только качайте данные частями (если вся история минуток нужна, например), долгие соединения сервер обрывает.
avatar
Зачем так сложно? 

import pandas_datareader.data as web
f = web.DataReader('SBER', 'moex', start='2020-01-01', end='2020-01-31')

avatar
broker25, а за 10 лет?
avatar
Михаил Titov, да я думаю, работает формула.
Причем, вместо 'SBER' можно подставить ['SBER', «LKOH»....]
avatar
Только вам и по большому секрету: эти данные бесполезны.
avatar
Качество данных? Есть ли мусор в них или фейки.
avatar
chizhan, качество должно быть приемлемым, я проверял на наличие ошибок, нашел, но очень мало — не критично. smart-lab.ru/blog/535735.php
avatar
Эти только дневки же?

Где скачать минутки?
avatar
sergeygaz, по платной подписке как я понял 
avatar
sergeygaz, минутки я качал таким же образом, просто надо несколько запросов под ряд запрограммировать. А потом разбить промежуток на меньшие (не больше 2-3 лет) чтобы 1 сессия не длилась слишком долго — сервер тогда оборвет соединения. В общем, на здоровье: smart-lab.ru/blog/535735.php#comment11111685
То же самое только чуть технологичее вроде как делает либа от Михаила
avatar
filename = SECID + "_" + str(to_date) + ".csv"
with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f:

есть же f строки. мало того, что они читабельнее, так еще и чуточку быстрее

avatar

Читайте на SMART-LAB:
Фото
Макро индикаторы по США подкрепляют кейс дальнейшего роста доллара
Европейские валюты активно сдают позиции после публикации ряда индикаторов по рынку труда, внешней торговле и производственной активности в...
Фото
Портфель Акции / Деньги (4,5% за 12 мес). Рынка нет и нет дохода
Эффект низкой базы в прошлом, и, сравнивая февраль 2026 с февралем 2025, получаем 12-месячный результат от наших вложений в акции всего лишь...
Фото
Россети Центр. Отчет об исполнении инвестпрограммы за Q4 2025г. Ожидаемо снизилась дивидендная база по РСБУ.
Компания Россети Центр опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по РСБУ в...
Фото
Россети Центр и Приволжье. Отчет об исполнении инвестпрограммы за Q4 2025г. Дивидендная база по РСБУ удивляет.
Компания Россети Центр и Приволжье (сокр. ЦиП) опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые...

теги блога Емельянов Иван

....все тэги



UPDONW
Новый дизайн