Блог им. JohnMitrich |Качаем исторические данные с MOEX! (продолжение)

Итак, сразу к делу (подробности в конце). Я написал програмку для парсинга данных MOEX с помощью их API, вот, собственно она:
Качаем исторические данные с MOEX! (продолжение)

Скачать ее можно по адресу: drive.google.com/drive/folders/1SnxKojpiXD2or6begSZTkzDyDoCBla_d?usp=sharing. Т.к. компиляция производилась при помощи pyinstaller, то, скорее всего винда пожалуется на exe-шник (решение проблемы нетрудно гуглится), поэтому, и потому что люди могут сидеть не из под винды, в папке с exe-шником лежит питонячий проект. Замечание: Если хотите скачать только exe-шник, то не забудьте скачать db.json и поместить его в ту же директорию, иначе программа не запустится!

Программа качает котировки в csv файл (считайте аналог Финама) с разделителем ";".

Некоторые замечания по разработке: Изначально планировалось что все разделы (Торговая система, Рынок и т.д.) будут парсится с API, такая идея даже была осуществлена, но показала свою неэффективность, поэтому в настоящей версии парсится только период времени для которого возможно скачивание, а остальные данные берутся из db.json, которую вы можте сами дополнить (если понадабится).
При возникновении проблем связанных с интернетом (его отсутствие, отказ сервера и т.д.) в окошках «Начало периода» и «Конец периода» будут стоять даты 01.01.0001.
По любым вопросам можете писать в коментарии или ЛС. Всем добра!
Если хотите поддержать автора: Сбер — 4817 7602 2175 5865 (Емельянов Иван Д.)


Блог им. 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)
Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.

( Читать дальше )

....все тэги
UPDONW
Новый дизайн