Блог им. dataserverdeveloper

Google Colab: Российский рынок - по многочисленным просьбам

В одном из предыдущих постов писал про Google Colab — бесплатный доступ к интерактивной среде Jupyter Notebook на языке Python с кучей библиотек для анализа данных (и самой популярной — Pandasобучалки-введение).
   Низкий порог входа в мир серьёзного анализа данных -тем и привлекателен этот зоопарк. Несколько строк кода и уже можно анализировать-смотреть данные (акции, облигации, фьючи, макро).

   Если вы пробовали писать скрипты в Excel, кастомные индикаторы в Мультичартсах или Метастоках, то освоить язык Python в интерактивной среде Jupyter Notebook (Google Colab — даёт бесплатный доступ) — посильное занятие.
   Для американского рынка есть библиотека (-ки), которые позволяют подкачать биржевые и экономические данные — я писал об этом. Кстати к  Google Colab можно подключить IQFeed (если интересно — тут).

   Для российского рынка — всё сложнее (или наоборот проще — как посмотреть). Рынок меньше, провайдеров мало. Но по многочисленным просьбам… Повозившись с сайтом МБ (iss.micex.ru), удалось написать небольшой кусок кода, который скачивает данные, парсит и помещает их в таблицу Pandas -с ней можно работать (рисовать графики, анализировать и тп).

Этот кусок кода я и выкладываю с комментариями:

import json, urllib,sys, pandas as pd #импортируем модули парсинга json, скачивание с инета, пандас
from datetime import datetime as dt # импортируем модуль работы с датами
Ndays=2000
#('stock','shares',57,'LKOH')   # ('stock','bonds',58,'SU26220RMFS2')
#('futures','forts',45, 'SiH9')
#('currency','selt',13,'EUR_RUB__TOM')  ('currency','selt',13,'USD000UTSTOM')
# ('stock','shares',57,'GMKN')
engine,market,boardgroup,ticker=('stock','shares',57,'GMKN')
url='https://iss.moex.com/cs/'
url=url+'engines/%s/markets/%s/boardgroups/%s/securities/%s.hs?s1.type=candles&interval=24&candles=%s' % (engine,market,boardgroup,ticker,Ndays)
try: s = urllib.request.urlopen(url).read()
except urllib.error.HTTPError as e: print('Ошибка скачивания:',e); sys.exit()
    
dictslists=json.loads(s) #парсим текстовый документ из формата json в формат "dict&lists"
listOHLC=dictslists['candles'][0]['data'] # выбираем только OHLC
listV=dictslists['volumes'][0]['data']# выбираем только V
dfOHLC=pd.DataFrame(listOHLC,columns=['Date','Open','High','Low','Close']) # парсим OHLC в таблицу(dataframe) пандаса
dfV=pd.DataFrame(listV,columns=['Date','Volume']) # парсим V в таблицу(dataframe) пандаса
if len(dfOHLC)==0: print('Нет данных'); sys.exit()
dfOHLC.index=pd.to_datetime(dfOHLC['Date'],unit='ms') # кол-ку в ф-те UNIX(ms) конв-ем во внутр формат даты И ставим индексом
dfV.index=pd.to_datetime(dfV['Date'],unit='ms') # кол-ку в ф-те UNIX(ms) конв-ем во внутр формат даты И ставим индексом
dfOHLC=dfOHLC.drop('Date',axis=1)
dfV=dfV.drop('Date',axis=1)
dfOHLCV=pd.concat([dfOHLC,dfV],axis=1) # сваливаем OHLC и V в единую таблицу(dataframe) пандаса
#dfOHLCV=dfOHLCV[dt(2010,1,1):dt(2018,1,1)] #раскомментировать, если нужно работать с диапазоном
display(dfOHLCV[:3]) #посмотреть первые 3 значения
display(dfOHLCV[-3:]) #посмотреть последние 3 значения
dfOHLCV['Close'].plot(figsize =(14,6),title=ticker) # figsize=(,) это размеры по ширине и высоте
dfOHLCV['Volume'].plot(secondary_y=True,kind='area'); # secondary_y=True рисовать на правой шкале

Обратите внимание — знать только тикер инструмента недостаточно. Нужно знать «engine»,«market»,«boardgroup»,«ticker». Для одной секции — первые 3 параметра одинаковые, поэтому те кто торгует ликвидными акциями могут в скрипте менять только название тикера и оставить всё «as is». Для других секций (валюта, фортс, офз) — приведены примеры.

На выходе работы скрипта (I. открыть Google Colab (достаточно экаунта gmail) II. создать File -> New Python 3 III. вставить код и выполнить нажав на треугольник), должно получится:

   Google Colab: Российский рынок - по многочисленным просьбам
Важно: API который предоставляет МБ для рисования своих графиков (скрипт использует именно его) может быть изменён без уведомления самой биржей.

Успехов (в комментариях — без оффтопа).
7.9К | ★60
4 комментария
Спасибо за интересный материал! От меня + (пока только такой :) )
avatar
я даже залогинился чтобы плюсануть :)
avatar
запустил, описка: dictslists=json.loads(str(s, «utf-8»))
avatar
sam, только что перепроверил в Colab — работает и так, т.е. без преобразования в utf-8. На «своём» Jupyter Notebook — тоже работает.

Но в любом случае — если кому то поможет, то хорошо. Спасибо.



avatar

Читайте на SMART-LAB:
Фото
Снижение военной премии в нефти: что это меняет для доллара и G10
Во второй половине понедельника – начале вторники рынки активно пересматривают премию за худший сценарий на энергетическом рынке, что цепочкой...
Фото
12 марта Группа Ренессанс страхование опубликует МСФО за 2025 год
Напоминаем, что 12 марта 2026 года RENI опубликует МСФО Группы за 2025 год, а также проведет День инвестора, чтобы рассказать о ситуации на...
Фото
Как заработать на росте цен на удобрения
Дарья Фёдорова Конфликт на Ближнем Востоке и перекрытие Ормузского пролива вызвали ралли не только цен на нефть и газ, но также алюминий и...
Фото
Гендиректор Инарктики продал свои акции компании. Что это может значить?
Вечером в пятницу (6 марта ) вышел сущфакт о том, что Соснов Илья Геннадьевич, гендиректор Инарктики, продал свои акции компании. В нашем...

теги блога Ромирес

....все тэги



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