Перейти к содержимому

График выплат купонов и дивидендов

График выплат купонов и дивидендов

График выплат купонов по облигациям и дивидендов по акциям в 1С.

Учет доходов и расходов веду в собственной конфигурации, где фиксирую события покупки и продажи активов, таких как облигации и акции. Во многих сервисах и приложениях по учету инвестиций можно увидеть информацию по датам и суммам выплат. Для прогнозирования будущих поступлений купонов и дивидендов, решил разобраться как получить данную информацию.

Источником данных послужит «Информационно-статистический сервер Московской Биржи (ИСС / ISS)«.
Например, для получения данных по облигации ОФЗ 26238 воспользуемся адресом:

https://iss.moex.com/iss/securities/SU26238RMFS4

где SU26238RMFS4 — это 12-значный идентификатор ценной бумаги, результат выполнения:

Данные по облигации
Данные по облигации


Для получения данных по акции, вместо идентификатора можно использовать биржевой тикер, например:

https://iss.moex.com/iss/securities/SBER

Данные по акции
Данные по акции


Можно задать формат, в котором будет возвращаться ответ, для этого в конце основной части URL, через точку указывается XML, CSV, JSON или HTML, например:

https://iss.moex.com/iss/securities/SU26238RMFS4.json

Данные по облигации JSON
Данные по облигации JSON


Для того чтобы получить только интересующую нас информацию, например, все даты выплат и размеры купонов, воспользуемся следующими параметрами:

https://iss.moex.com/iss/statistics/engines/stock/markets/bonds/bondization/SU26238RMFS4.json?iss.meta=off&iss.only=coupons&coupons.columns=coupondate,value&start=0&limit=100

Вывод только графика
Вывод только графика


Информация о параметрах запросов описана в руководстве разработчика https://fs.moex.com/files/6523, описание методов доступно по адресу: https://iss.moex.com/iss/reference/.

Создадим простую конфигурацию и научимся получать основные данные по ценной бумаге, так называемую спецификацию и график выплат купонов и дивидендов.

1. Создание конфигурации.

Создаем новую базу данных и открываем конфигуратор 1С, используемая версия платформы 8.3.23.2157.
Для работы по протоколу HTTP будет используется библиотека «Коннектор: удобный HTTP-клиент для 1С:Предприятие 8» заходим на страницу по адресу https://github.com/vbondarevsky/Connector/releases и скачиваем файл конфигурации, последней доступной версии, на момент написания это Connector_v2.6.0.cf.

С помощью меню «Файл — Открыть», открываем файл скаченной конфигурации «Коннектора» и переносим в свою конфигурацию общий модуль «КоннекторHTTP»:

Перенос общего модуля Коннектор HTTP
Перенос общего модуля Коннектор HTTP

2. Создание метаданных.

Для простоты разработки будет использоваться общая форма, которая выведена в рабочую область начальной страницы:

Создание общей формы
Создание общей формы

В общей форме создаем реквизит формы «КодЦеннойБумаги» (тип «Строка», длина 12):

Реквизит код ценной бумаги
Реквизит код ценной бумаги

Добавляем таблицу значений «Спецификация», к ней колонки «Имя», «Наименование» и «Значение», все с типом «Строка»:

Создание таблицы спецификация
Создание таблицы спецификация

Добавляем таблицу значений «РежимыТоргов», к ней колонки «Идентификатор» и «Наименование», все с типом «Строка»:

Создание таблицы режимы торгов
Создание таблицы режимы торгов

Добавляем команду «ПолучитьДанные» и размещаем созданные элементы на форме:

Добавление реквизитов на форму
Добавление реквизитов на форму

Для команды «ПолучитьДанные» создаем обработчик события:

Создание обработчика команды
Создание обработчика команды

3. Получение спецификации.

В серверной процедуре «ПолучитьДанныеНаСервере» добавляем следующий код:

&НаСервере
Процедура ПолучитьДанныеНаСервере()
	
	#Область Спецификация
	
	// Подготавливаем адрес.
	Адрес = СтрШаблон("https://iss.moex.com/iss/securities/%1.json", КодЦеннойБумаги);
	
	// Выполняем запрос и получаем результат в формате JSON.
	Результат = КоннекторHTTP.GetJson(Адрес);
	
	// Из результата получаем описание.
	Описание = Результат.Получить("description");
	
	Спецификация.Очистить();
	
	// Выводим данные по ценной бумаге.
	Для каждого МассивДанных Из Описание.Получить("data") Цикл

		СтрокаДанных = Спецификация.Добавить();
		СтрокаДанных.Имя = МассивДанных[0];
		СтрокаДанных.Наименование = МассивДанных[1];
		СтрокаДанных.Значение = МассивДанных[2];
		
	КонецЦикла;
	
	// Выводим данные по режимам торгов.
	Доски = Результат.Получить("boards");
	
	РежимыТоргов.Очистить();
	
	Для каждого МассивДанных Из Доски.Получить("data") Цикл
		
		СтрокаДанных = РежимыТоргов.Добавить();
		СтрокаДанных.Идентификатор = МассивДанных[1];
		СтрокаДанных.Наименование = МассивДанных[2];
		
	КонецЦикла;
	
	#КонецОбласти
	
КонецПроцедуры

Результат работы:

Результа получения спецификации
Результа получения спецификации

4. Получение графика выплат купонов.

Для получения данных по графику выплат купонов, создаем таблицу значений «ГрафикВыплат», с колонками «Дата» (тип «Дата»), «Значение» (тип «Число», длина 15, точность 2), «Валюта» (тип «Строка») и размещаем на форме.
В процедуру «ПолучитьДанныеНаСервере», после области «Спецификация» добавляем следующий код:

&НаСервере
Процедура ПолучитьДанныеНаСервере()
	
	#Область Спецификация
	//
	// ...	
	//
	#КонецОбласти
	
	#Область График
	
	НайденныеСтроки = Спецификация.НайтиСтроки(Новый Структура("Имя", "GROUPNAME"));
	Если НайденныеСтроки.Количество() = 0 Тогда
		ВызватьИсключение "Не удалось найти «Тип инструмента».";
	КонецЕсли;
	
	ТипаИнструмента = НайденныеСтроки[0].Значение;
	Если ТипаИнструмента = "Облигации" Тогда
		
		ГрафикКупонов();
	
	ИначеЕсли ТипаИнструмента = "Акции" Тогда
		
		ГрафикДивидендов();
		
	Иначе
		ВызватьИсключение "Неизвестный «Тип инструмента».";
	КонецЕсли;
	
	#КонецОбласти
	
КонецПроцедуры

Данный участок кода проверяет какой тип инструмента указан в спецификации и в зависимости от этого вызывает соответствующую процедуру получения графика.

После процедуры «ПолучитьДанныеНаСервере», добавляем две процедуры «ГрафикКупонов» с кодом ниже и «ГрафикДивидендов» пока пустую:

&НаСервере
Процедура ГрафикКупонов()

	// Подготавливаем адрес.
	Адрес = СтрШаблон("https://iss.moex.com/iss/statistics/engines/stock/markets/bonds/bondization/%1.json", КодЦеннойБумаги);
	
	ПараметрыЗапроса = Новый Соответствие;
	
	// Отключаем вывод метаданных.
	ПараметрыЗапроса.Вставить("iss.meta", "off");
	
	// Вывод только блока с купонами.
	ПараметрыЗапроса.Вставить("iss.only", "coupons");
	
	// Вывод только указанных полей блока данных.
	ПараметрыЗапроса.Вставить("coupons.columns", "coupondate,value,faceunit");
	
	// Начальное значение номера строки.
	ПараметрыЗапроса.Вставить("start", 0);
	
	// Размер выборки строк.
	ПараметрыЗапроса.Вставить("limit", 100);
	
	// Выполняем запрос и получаем результат в формате JSON.
	Результат = КоннекторHTTP.GetJson(Адрес, ПараметрыЗапроса);
	
	// Из результата получаем данные графика.
	Купоны = Результат.Получить("coupons");
	
	ГрафикВыплат.Очистить();
	
	// Выводим данные графика.
	Для каждого МассивДанных Из Купоны.Получить("data") Цикл

		// Преобразуем строку в дату.
		ДатаКупона = МассивДанных[0];
		ДатаКупона = СтрЗаменить(ДатаКупона, "-", "");
		ДатаКупона = Дата(ДатаКупона);
		
		СтрокаДанных = ГрафикВыплат.Добавить();
		СтрокаДанных.Дата = ДатаКупона;
		СтрокаДанных.Значение = МассивДанных[1];
		СтрокаДанных.Валюта = МассивДанных[2];		
		
	КонецЦикла;	

КонецПроцедуры

&НаСервере
Процедура ГрафикДивидендов()

КонецПроцедуры

Пробуем получить данные по облигации, результат работы:

Результат получения графика выплат
Результат получения графика выплат

5. Получение графика выплат дивидендов.

Для получения графика выплат дивидендов, добавим следующий код в процедуру «ГрафикДивидендов»:

&НаСервере
Процедура ГрафикДивидендов()
	
	// Подготавливаем адрес.
	Адрес = СтрШаблон("https://iss.moex.com/iss/securities/%1/dividends.json", КодЦеннойБумаги);
	
	ПараметрыЗапроса = Новый Соответствие;
	
	// Отключаем вывод метаданных.
	ПараметрыЗапроса.Вставить("iss.meta", "off");
	
	// Выполняем запрос и получаем результат в формате JSON.
	Результат = КоннекторHTTP.GetJson(Адрес, ПараметрыЗапроса);
	
	// Из результата получаем данные графика.
	Дивиденды = Результат.Получить("dividends");
	
	ГрафикВыплат.Очистить();
	
	// Выводим данные графика.
	Для каждого МассивДанных Из Дивиденды.Получить("data") Цикл

		// Преобразуем строку в дату.
		ДатаКупона = МассивДанных[2];
		ДатаКупона = СтрЗаменить(ДатаКупона, "-", "");
		ДатаКупона = Дата(ДатаКупона);
		
		СтрокаДанных = ГрафикВыплат.Добавить();
		СтрокаДанных.Дата = ДатаКупона;
		СтрокаДанных.Значение = МассивДанных[3];
		СтрокаДанных.Валюта = МассивДанных[4];		
		
	КонецЦикла;

КонецПроцедуры

Результат получения дивидендов по акции:

Результат получения дивидендов
Результат получения дивидендов

Теперь вы знаете как получить график выплат купонов и дивидендов для ваших информационных систем, надеюсь информация была полезна.

💾 Файл конфигурации: ГрафикВыплатКупоновИДивидендов.zip

Дополнительная информация:

Используемые изображения:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *