Импорт котировок с сайта Мосбиржи с помощью Matlab

Больше
15 окт 2023 11:02 #128 от roman
Рассмотрим вопрос Импорта котировок с сайта Мосбиржи с помощью Matlab.
 В начале Вам нужно установить Matlab на компьютер.
 Matlab - пакет прикладных программ для решения задач технических вычислений.
 Ниже представленный код был написан и проверен на версии Mathworks Matlab R2022b (9.13.0) Windows x64.
 

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

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

В данном случае мы будем запрашивать котировки цены акции за год с интервалом 1 день.
Пример такого запроса показан ниже на примере запроса котировок Сбербанка за 2020 год:
iss.moex.com/iss/engines/stock/markets/shares/securities/sber/candles.json?from=2020-01-01&till=2020-12-31&interval=24
Данные по данной ссылке откроются любым браузером (обычный HTTP-запрос к API Московской Биржи) в формате данных json.

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

Больше
15 окт 2023 12:22 - 15 окт 2023 19:12 #130 от roman
Код проекта на языке программирования Matlab (версия от 15.10.2023)
Code:
clc clear % Определим тикер акции, который нужно запросить у Мосбиржи % Тикер акции Сбербанк - SBER ticker='SBER'; % Определим два массива данных % i_price - Массив для хранения цены % i_datetime - Массив для хранения даты и времени i_price=[]; i_datetime=strings; j=0; % Данные будем запрашивать на несколько лет. % Создадим Цикл по годам for i = 2020:2023 % Сформируем ссылку на запрос данных с МосБиржи (Free API) % https://www.moex.com/a2193 url='http://iss.moex.com/iss/engines/stock/markets/shares/securities/'+string(ticker)+'/candles.json?from='+string(i)+'-01-01&till='+string(i)+'-12-31&interval=24'; % webread(url) считывает содержимое из веб-службы, указанной в параметре, url и возвращает содержимое в формате data. headers = {'Content-Type' 'application/json'; 'Accept' 'application/json'}; options = weboptions('HeaderFields',headers); s=webread(url, options); % Информация находится в массиве s.candles.data % Скопируем данные в массив i_price[] [sizaA,sizeB]=size(s.candles.data); for i = 1:sizaA j=j+1; i_price(j,1)=j; %Номер значения i_price(j,2)=s.candles.data{i}{1,1}; %'open' i_price(j,3)=s.candles.data{i}{2,1}; %'close' i_price(j,4)=s.candles.data{i}{3,1}; %'high' i_price(j,5)=s.candles.data{i}{4,1}; %'low' i_price(j,6)=s.candles.data{i}{5,1}; %'value' i_price(j,7)=s.candles.data{i}{6,1}; %'volume' dt=datestr(datetime(s.candles.data{i}{7,1},'Format','yyyy-MM-dd HH:mm:ss'), 'dd.mm.yyyy'); i_datetime(j,1)=string(dt); % begin data dt=datestr(datetime(s.candles.data{i}{7,1},'Format','yyyy-MM-dd HH:mm:ss'), 'HH:mm:ss'); i_datetime(j,2)=string(dt); % begin time dt=datestr(datetime(s.candles.data{i}{8,1},'Format','yyyy-MM-dd HH:mm:ss'), 'dd.mm.yyyy'); i_datetime(j,3)=string(dt); % end data dt=datestr(datetime(s.candles.data{i}{8,1},'Format','yyyy-MM-dd HH:mm:ss'), 'HH:mm:ss'); i_datetime(j,4)=string(dt); % end time end end % Вывод графика изменения стоимости акции figure(1) x_data=i_datetime(:,1); y_data=(i_price(:,4)+ i_price(:,5))/2; plot(i_price(:,1),y_data) grid on title('Котировки ' + string(ticker) + ". Обычный график"); figure(2) tsobj=[ i_price(:,2),i_price(:,4), i_price(:,5), i_price(:,3)]; candle(tsobj,'b'); title('Котировки ' + string(ticker)+ ". Свечной график");
 
Последнее редактирование: 15 окт 2023 19:12 пользователем roman.

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

Больше
15 окт 2023 13:30 #131 от roman
 В результате мы получим два графика изменения цены
1. Обычный график, который отображает один параметр ( high+ low ) / 2
 
2. Свечной график, который отображает изменение цены в виде свечи с параметрами ("open", "close", "high", "low" )
 
  
  

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

Больше
15 окт 2023 13:32 - 15 окт 2023 19:14 #132 от roman
У меня остался один вопрос как добавить на ось Х дату времени?
Сразу это сделать у меня не получилось. 
Последнее редактирование: 15 окт 2023 19:14 пользователем roman.

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

Больше
22 окт 2023 22:17 #137 от roman
Рассмотрим способ, с помощью которого на график можно вставить даты, вместо текущего индекса массива.
Для этого в файле "myplot_date.m" создаем функцию со следующим кодом:
Code:
function [number_x_axes,string_x_axes] = myplot_date(var_X,num_x_axes) % Входные параметры: %1.1.Вектор столбец var_X[] %1.2.Количество точек на оси X: параметр num_x_axes %2.Алгоритм: [sizaA,sizeB]=size(var_X); delta_x_axes=floor(sizaA/num_x_axes); % floor() - округление до целого наименьшего значения number_x_axes=[]; string_x_axes=string(); for i=1:num_x_axes number_x_axes(i,1)=1+(i-1)*delta_x_axes; string_x_axes(i,1)=var_X(1+(i-1)*delta_x_axes,1); end number_x_axes(i+1,1)=sizaA; string_x_axes(i+1,1)=var_X(sizaA,1); end

На вход функции мы подаем информацию о датах var_X и необходимое количество меток на графике num_x_axes
На выходе функции мы получаем:
- вектор столбец соответствующего индекса в массиве number_x_axes
- вектор столбец соответствующей даты string_x_axes

Далее в основной программе вызываем данную функцию и с помощью команд xticks() и xticklabels() преобразуем график
Code:
[number_x,string_x]=myplot_date(i_datetime(:,1),40); xticks(number_x(:,1)); %Наносим необходимое количество делений на график в нужных местах xticklabels(string_x(:,1)); %Деление обозначаем через необходимые даты. xtickangle(90)

В результате мы получаем график изменения цены относительно даты
 

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

Работает на Kunena форум
Статистика сайта:
Яндекс.Метрика