График выплат купонов по облигациям и дивидендов по акциям в 1С.
Учет доходов и расходов веду в собственной конфигурации, где фиксирую события покупки и продажи активов, таких как облигации и акции. Во многих сервисах и приложениях по учету инвестиций можно увидеть информацию по датам и суммам выплат. Для прогнозирования будущих поступлений купонов и дивидендов, решил разобраться как получить данную информацию.
Источником данных послужит «Информационно-статистический сервер Московской Биржи (ИСС / ISS)«.
Например, для получения данных по облигации ОФЗ 26238 воспользуемся адресом:
где SU26238RMFS4 — это 12-значный идентификатор ценной бумаги, результат выполнения:
Для получения данных по акции, вместо идентификатора можно использовать биржевой тикер, например:
Можно задать формат, в котором будет возвращаться ответ, для этого в конце основной части URL, через точку указывается XML, CSV, JSON или HTML, например:
Для того чтобы получить только интересующую нас информацию, например, все даты выплат и размеры купонов, воспользуемся следующими параметрами:
Информация о параметрах запросов описана в руководстве разработчика 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»:
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
Дополнительная информация:
- Что делает Free API Московской биржи в Google Таблицах
- Free API Мосбиржи в формулах Microsoft Excel
- Excel таблица для мониторинга облигационного портфеля с данными из API московской биржи
- Изучаем и парсим биржевую информацию с сайта Мосбиржи. Разбор кода на Python
- API MOEX Еще раз о том, как получать данные с MOEX в Excel
Используемые изображения: