Импорт котировок с сайта Мосбиржи с помощью VisualStudioCode (Pyton)

Больше
01 сен 2022 21:07 - 20 июнь 2023 03:24 #38 от roman
В ветке рассмотрим вопрос:
1. импорта котировок (парсинг, скачивание) российских акций с сайта Мосбиржи с помощью VisualStudioCode используя язык программирования Pyton.
2. создание нейронной сети, обучение ее и прогнозирование дальнейшего движения цены акции.
Тема должна быть интересной.
Последнее редактирование: 20 июнь 2023 03:24 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 21:09 - 09 сен 2022 05:16 #39 от roman
В начале рассмотрим установку Pyton и Visual Studio Code на компьютер.
1. Установка Visual Studio Code с официального сайта code.visualstudio.com/
2. Установка расширения Python для Visual Studio Code
В верхнем меню перейдите на меню Представление (View) выберите Расширения (Extensions) или щелкните значок Расширения (Extensions) на панели действий в левой части Visual Studio Code.
Чтобы отфильтровать список расширений, введите Python в поле поиска в верхней части представления расширений. Выберите расширение, опубликованное корпорацией Майкрософт (обычно первое в списке). Сведения об этом расширении будут отображаться на вкладке в основной области справа.
3. Установка Python в Windows
Перейдите на официальную страницу загрузки Python: www.python.org/downloads/
Скачаете приложение на компьютер и включите установку программы. После появления диалогового окна установщика выберите Добавить Python 3.8 в ПУТЬ (установить галочку на позиции «Add python to PATH»)
 
Примечание:
Обращаю Ваше внимание, что для построения нейронной сети мы будем пользоваться библиотекой «TensorFlow», которая совместима только с 64-битной установкой python (versions of Python 3.5.x and 3.6.x на Windows).

 
Чтобы убедиться в правильности установкиPython 3, введите следующую команду в командной строке и нажмите клавишу «ВВОД»:
py – version
Должно появиться слово Python с набором чисел, разделенных символами. Ниже приведен пример результатов, которые вы можете получить.

 
Чтобы проверить, какую версиюPython вы используете, создайте новое приложение Python (новый файл.py), а затем запишите в него следующие строчки:
import struct;
print(struct.calcsize("P") * 8 )
В результате выполнения программы вы увидите какая разрядная версия Python у вас установлена (либо 32-битная версия, либо 64-битная версия ).
Последнее редактирование: 09 сен 2022 05:16 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 21:10 - 01 сен 2022 21:24 #40 от roman
Загрузку котировок мы будем выполнять через запрос к информационно-статистическому серверу Московской Биржи (далее ИСС / ISS). Информационно-статистический сервер Московской Биржи (ИСС / ISS) ( www.moex.com/a2193 ) позволяет выполнить загрузку котировок и других данных бесплатно (с задержкой в 15 минут) и без регистрации. Более подробное описание вы можете также посмотреть по ссылке:  iss.moex.com/iss/reference/

В данном случае мы будем запрашивать котировки цены акции за год с интервалом 1 день.
Пример такого запроса показан ниже на примере запроса котировок Сбербанка за 2020 год: Данные по данной ссылке откроются любым браузером (обычный HTTP-запрос к API Московской Биржи) в формате данных json.
Последнее редактирование: 01 сен 2022 21:24 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 21:13 - 20 июнь 2023 03:22 #41 от roman
Код проекта на языке программирования Pyton  в Visual Studio Code (внесены изменения от 06.2023г.)


import json
import urllib.request
import pandas as pd
import matplotlib.pyplot as plt

#1. выбираем тикер акции
ticker='SBER'
j=0
price_dict = {}

#2. Цикл по годам
for i in range(2022,2024,1):
    #2.1. Формируем запрос к ИСС Мосбиржи
    url='http://'+'iss.moex.com/iss/engines/stock/markets/shares/securities/'+ticker+'/candles.json?from='+str(i)+'-01-01&till='+str(i)+'-12-31&interval=24'
    # Вариация по скачиваемым данным
    # interval=1 - 1 минута
    # interval=10 - 10 минут
    # interval=60 - 1 час
    # interval=24 - 1 день
    # interval=7 - 1 неделя
    # interval=31 - 1 месяц
    # interval=4 - 1 квартал
    # print(url)
    # !(!)Если запрашивать даннные за каждую минуту, нужно запрос делать по дням. Есть лимит по предоставляемым данным от iss.moex.com
    # !(!)Если запрашивать даннные за каждый час, нужно запрос делать по месяцам. Есть лимит по предоставляемым данным от iss.moex.com

    s=urllib.request.urlopen(url).read()
    #2.2. парсим текстовый документ из формата json в формат "dict&lists"
    dictslists=json.loads(s)
    price_dict = pd.DataFrame(dictslists["candles"]["data"])
    frames={}
    if j < 1:
        ext_array=price_dict
    else:
        frames=[ext_array,price_dict]
        ext_array=pd.concat(frames,ignore_index=True)  
    j=j+1

# Конец Цикла
# В итоге получена результирующая таблица ext_array, которая является DataFrame.

#3. Небольшие преобразования таблица ext_array
# 3.1.Добавим название столбцам. Всего 8 столбцов.
# К столбцам таблицы ext_array можно обратится двумя способами:
# ext_array.high или ext_array["high"]

ext_array.columns=["open", "close", "high", "low", "value", "volume", "begin", "end"]
# 3.2.Добавим столбец с Датой и Временем отдельно.
# Данные возьмем из столбца "begin"
#len(ext_array) - Количество строк

data_begin={}
time_begin={}
for i in range(0,len(ext_array),1):  
    data_begin=ext_array.begin.split(" ")[0]
    time_begin=ext_array.begin.split(" ")[1]
ext_array["data"]=data_begin

# В итоге получена результирующая таблица ext_array, которая является DataFrame.

#4. Вывод информации на экран
# 4.1. Строим обычный график

plt.figure()
plt.plot((ext_array["high"]+ext_array["low"])/2)
plt.title('1. График '+ ticker) # заголовок
plt.ylabel('2. Стоимость акции, (руб.)') # подпись оси OY
plt.xlabel('3. Номер бара')  # подпись оси OX
plt.grid(color='black', linestyle='--', linewidth=0.5) # сетка
plt.xticks(rotation ='vertical') # можно явно указать, как подписывать ось
plt.show()


# 4.2.Строим свечной график с помощью библиотеки Matplotlib в Python
# Создаем графическое окно

plt.figure()
width = .4
width2 = .05
up = ext_array[ext_array.close >=ext_array.open ]
down = ext_array[ext_array.close <ext_array.open ]
col1 = 'green'
col2 = 'red'

#plot up prices
plt.bar (up. index ,up. close -up. open ,width,bottom=up. open ,color=col1)
plt.bar (up. index ,up. high -up. close ,width2,bottom=up. close ,color=col1)
plt.bar (up. index ,up. low -up. open ,width2,bottom=up. open ,color=col1)

#plot down prices
plt.bar (down. index ,down. close -down. open ,width,bottom=down. open ,color=col2)
plt.bar (down. index ,down. high -down. open ,width2,bottom=down. open ,color=col2)
plt.bar (down. index ,down. low -down. close ,width2,bottom=down. close ,color=col2)

#rotate x-axis tick labels
plt.xticks (rotation= 45 , ha='right')
plt.title('1. График '+ ticker) # заголовок
plt.ylabel('2. Стоимость акции, (руб.)') # подпись оси OY
plt.xlabel('3. Номер бара')  # подпись оси OX
plt.grid(color='black', linestyle='--', linewidth=0.5) # сетка
plt.yticks() # можно явно указать, как подписывать ось
plt.xticks(rotation ='vertical') # можно явно указать, как подписывать ось
plt.show()


В результате мы получим два графика изменения цены
1. Обычный график, который отображает один параметр ("open", "close", "high", "low" или другую переменную)
 
2. Свечной график, который отображает изменение цены в виде свечи с параметрами ("open", "close", "high", "low" )
 
 


 
Последнее редактирование: 20 июнь 2023 03:22 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 21:14 - 20 июнь 2023 03:38 #42 от roman
Представленный код работает при поддержке следующих библиотек:

1. JSON
import json
json - это библиотека Python для работы с форматом передачи данных - json.
Данная функция используется как для разбора формата, так и для создания объектов для отправки.
Python содержит встроенный модуль под названием json для кодирования и декодирования данных JSON.
Дополнительно устанавливать данную библиотеку - не требуется.

2. Pandas
import pandas as pd
pandas — программная библиотека на языке Python для обработки и анализа данных. Работа pandas с данными строится поверх библиотеки NumPy, являющейся инструментом более низкого уровня. Предоставляет специальные структуры данных и операции для манипулирования числовыми таблицами и временными рядами.
Python не содержит по умолчанию данной библиотеки, поэтому ее нужно установить с помощью команды:pip install pandas
Pandas предоставляет расширенный набор функций и методов для работы и выполнения анализа данных.
# Windows (в зависимости от ОС свой вызов команды)
py -m pip install numpy
py -m pip install pandas

3. Matplotlib
import matplotlib.pyplot as plt
Matplotlib — библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой.
Python не содержит по умолчанию данной библиотеки, поэтому ее нужно установить с помощью команды:pip install matplotlib
# Windows (в зависимости от ОС свой вызов команды)
py -m pip install matplotlib
4. Requests
import urllib.request
Request — библиотека на языке программирования Python для работы с HTTP-запросами.
Библиотека requests позволяет отправлять HTTP-запросы HEAD, GET, POST, PUT, PATCH и DELETE. Все заголовки и параметры добавляются очень просто, также и обработка ответов сервера. 
Дополнительно устанавливать данную библиотеку - не требуется.
Последнее редактирование: 20 июнь 2023 03:38 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 21:14 - 01 сен 2022 21:23 #43 от roman
Для вывода графика в "читаемом виде" немного корректируем окончание кода:

from datetime import datetime
def date_convert(date_to_convert):
return datetime.strptime(date_to_convert, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')
ext_array = ext_array.apply(date_convert)
print(ext_array)
 
plt.title('1. График '+ ticker) # заголовок
plt.xlabel('2. Дата ') # подпись оси OX
plt.ylabel('3. Стоимость акции, (руб.)') # подпись оси OY
plt.grid(True)
 
plt.plot(ext_array, ext_array, color = 'r', linewidth = 3)
plt.setp(plt.gca().xaxis.get_majorticklabels(),rotation=-30)
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=80))
 
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.show()


В результате получаем график изменения стоимости акции в течение времени для запрашиваемого эмитента 
 
Последнее редактирование: 01 сен 2022 21:23 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум
Пользовательское соглашение.

По всем возникшим вопросам Вы можете обратиться к администрации сайта по электронной почте (administrator@simenergy.ru) или с помощью формы обратной связи.

Статистика сайта:
Яндекс.Метрика