Блог им. 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:
Фото
Газета «Коммерсант» выпустила тематическое приложение о страховом рынке
Много интересных материалов для тех, кто работает в отрасли и тех, кто так или иначе с ней связан. Полагаем, публикации могут быть интересны и...
Фото
🥳 В десяточку! Два выпуска на сумму более 10 млрд рублей
ГК «А101» завершила сбор книги заявок на два выпуска облигаций общим объемом 10,5 млрд рублей. Начало торгов состоится 26 декабря....
АКРА присвоило нам рейтинг «А-(RU)» со стабильным прогнозом
Друзья, привет!   ⚡️ Под конец года делимся новостями – с учетом высокой ключевой ставки и параметров оценки риска отрасли девелопмента...
Фото
Какая доходность среди облигаций с наивысшим рейтингом надежности и сроком погашения от 3 лет?

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

....все тэги



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