Блог им. 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 который предоставляет МБ для рисования своих графиков (скрипт использует именно его) может быть изменён без уведомления самой биржей.

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

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



avatar

Читайте на SMART-LAB:
Фото
🕵️ Если встретите Kafario, знайте — это мы
В App Store появилось новое приложение «ВТБ Мои Инвестиции» для iPhone. Найти его можно под именем Kafario. Здесь можно следить за своим...
Фото
Как заработать на сбое юаня
На Мосбирже возникла редкая ситуация — вечный фьючерс на юань ушёл в бэквордацию без видимых причин. Через сутки всё вернулось на свои...
Фото
Нефть даёт передышку, но долги Франции мешают отскоку евро
Нефть в пятницу дешевеет, помогая европейским валютам наконец остановить падение. Последние данные говорят о восстановлении поставок из...
Фото
Бюджет-2027: баланс рисков смещён в сторону ухудшения относительно плана.
Представлен проект бюджета на 2027 год. Риски для дефицита смещены в сторону превышения плановых 5,44 трлн руб. Главный риск – расходы. Проект...

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

....все тэги



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