Прототип конфигурации для фундаментального анализа ценных бумаг и финансового анализа

06.01.18

Функциональные - Управление инвестициями

Прототип конфигурации для расчёта значений произвольных показателей по заданным формулам. Основное назначение - финансовый анализ и фундаментальный анализ ценных бумаг, но, теоретически, может быть использована и для других целей.

Скачать файлы

Наименование Файл Версия Размер
fa-2018-01-06.7z
.7z 88,01Kb
5
.7z 88,01Kb 5 Скачать

Основная идея

Есть три вида показателей:

  1. "Непериодические". Значения этих показателей вводятся нерегулярно, по мере их изменения. Примеры таких показателей: "Количество обыкновенных акций в обращении", "Цена обыкновенной акции".
  2. "Периодические". Значения этих показателей вводятся с определённой периодичностью (месяц/квартал/год). Примеры таких показателей: данные баланса (как-то: размер оборотных/внеоборотных активов, капитала, долгосрочной/краткосрочной задолженности и т.п.), данные отчёта о прибылях и убытках (как-то: выручка, себестоимость, чистая прибыль и т.п.).
  3. "Расчетные". Значения этих показателей вычисляются по заданным формулам на основе значений "Непериодических" и "Периодических" показателей, а также значений других "Расчетных" показателей. Например, показатель "Капитализация" может быть вычислен как "Количество обыкновенных акций в обращении" * "Цена обыкновенной акции". А показатель "P/E" может быть вычислен как "Капитализация" / "Чистая прибыль".

Собственно, вся задача конфигурации - это рассчитать "Расчетные" показатели и вывести их в отчёт.

Реализация

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

Как это работает (вид снаружи)

Конечным результатом является отчёт с рассчитанными значениями показателей. Находится он в разделе "Отчеты", называется "Расчет показателей" и выглядит примерно вот так (вариант отчёта = "Динамика контрагента"):

Список используемых показателей хранится в справочнике Показатели.

Если у Показателя не установлен флажок "Периодический", то показатель считается "Непериодическим". Например:

 
 Про флажок "Использовать последнее значение для последнего периода"

Флажок "Использовать последнее значение для последнего периода" означает, что при выводе отчёта для самого последнего периода вместо значения показателя на дату окончания периода будет взято самое последнее значение показателя. Например, формируем отчёт с 01.01.2014 по 31.12.2016. В 2014 и 2015 годах значения показателей "Кол-во ао" (количество обыкновенных акций) и "Цена ао" (цена обыкновенной акции) будут показаны по состоянию на 31.12.2014 и 31.12.2015 соответственно. А в 2016 году (последний период отчёта) будут выведены последние доступные значения этих показателей. Так, например, если последние значения этих показателей установлены на 05.01.2017, то будут использованы именно они, а не значения на 31.12.2016.

Если у Показателя установлен флажок "Периодический", то показатель считается "Периодическим" и он должен вводиться с какой-либо периодичностью (месяц/квартал/год). Например:

Если у Показателя установлен флажок "Расчетный", то показатель считается "Расчетным". Например:

У "Расчетного" показателя обязательно должна быть заполнена формула, по которой он рассчитывается (реквизит "Формула расчета").

Формула расчета - это выражение на языке 1С, в котором можно ссылаться на значения других показателей, указывая в квадратных скобках их "условные обозначения". Например, показатель "Капитализация" на приведенном выше скриншоте вычисляется по формуле:

[КолвоАО] * [ЦенаАО] + [КолвоАП] * [ЦенаАП]

При вычислении формулы вместо ссылок на показатели будут подставлены их значения, которые были введены пользователем (в случае, если это ссылка на "Непериодические" или "Периодические" показатели), либо были вычислены ранее (если это ссылка на "Расчетный" показатель).

Ещё один пример "Расчетного" показателя:

Этот показатель вычисляется по формуле:

[Капитализация] / [ЧП]

и его значение зависит от значения другого "Расчетного" показателя с условным обозначением "Капитализация". Порядок расчёта показателей определяется значением реквизита "Порядок", поэтому показатель "Капитализация" ("Порядок" = 100) будет вычислен раньше, чем показатель "P/E" ("Порядок" = 500) и при вычислении показателя "P/E" значение показателя "Капитализация" уже будет известно.

 
 Ещё немного про формулы

Для ввода "Непериодических" и "Периодических" показателей предназначен документ "Ввод показателей". Список документов удобно сгруппировать по Контрагенту и Стандарту отчетности:

При вводе "Непериодических" показателей в документе "Ввод показателей" в качестве значения реквизита "Периодичность" указывается "Нет":

При вводе "Периодических" показателей в документе "Ввод показателей" в качестве значения реквизита "Периодичность" указывается требуемая периодичность (в данном примере "Год"):

Все исходные данные введены, можно строить отчёт!

Вот второй вариант отчета "Расчет показателей", который называется "Сравнение контрагентов" (итоги по группировкам пока считаются неправильно):

Как это работает (вид изнутри)

Конфигурация в текущем виде проста и незатейлива. Есть всего один документ ВводПоказателей, который пишет то, что в него наколотили, в регистр сведений ЗначенияПоказателей. Отчёт РасчетПоказателей выбирает данные из этого регистра сведений, рассчитывает "Расчетные" показатели и выводит всё с помощью СКД. Для расчёта показателей используются три функции из общего модуля ОбщегоНазначенияКлиентСервер : РассчитатьЗначениеПоказателя(), ПроверитьЗначениеПоказателя() и ВычислитьЗначениеПоФормуле(). Есть ещё сервисная обработка ЗагрузкаКотировокММВБ, предназначенная для загрузки котировок акций с сайта rbc.ru. Собственно, и всё.

Содержимое прилагаемого архива:

  • fa/src/* - конфигурация, выгруженная в XML-файлы;
  • fa/data/data_for_uploadtoxml.xml - тестовые данные по нескольким эмитентам (в т.ч. Газпрому, Роснефти, Сбербанку) в формате XML для загрузки с помощью обработки "Выгрузка и загрузка данных XML.epf".

Как сделать тестовую базу:

  1. Создаём пустую конфигурацию, в Конфигураторе заходим в меню Конфигурация / Загрузить конфигурацию из файлов...,  в качестве каталога-источника указываем каталог src/, обновляем конфигурацию базы данных.
  2. В режиме Предприятие запускаем обработку "UNIREPS83\UploadToXML\Выгрузка и загрузка данных XML.epf" и загружаем данные из файла data/data_for_uploadtoxml.xml.

Известные проблемы/нереализованные хотелки:

  1. В отчёте неправильно считаются итоги по группировкам (иерархия контрагентов, периоды). Для начала нужно хотя бы просто отключить их вывод, но я не знаю как это сделать в СКД. А в дальнейшем, конечно, хотелось бы их правильно посчитать, чтобы можно было посмотреть общие результаты по отрасли (т.е. группе контрагентов) и в целом по всем компаниям за год.
  2. При использовании формул с индексами предыдущих периодов, таких как "( [ЧП(-2)] + [ЧП(-1)] + [ЧП(0)] ) / 3", выводятся назойливые сообщения об ошибках о том, что значение показателя  не задано. Причина понятна: при расчёте самого первого периоде отчёта действительно ещё нет никаких [ЧП(-2)] и [ЧП(-1)], они появятся только при расчёте следующих периодов. В общем, надо как-то сделать так, чтобы в этом случае сообщение об ошибке не выводилось.
  3. Выгрузка в Excel/LibreOffice. Вообще, есть ощущение, что оптимальным вариантом работы был бы следующий: исходные данные ("Непериодические" и "Периодические") хранятся в 1С-е, потом это всё выгружается в Excel/LibreOffice, а уже Excel/LibreOffice по формулам сам вычисляет значения "Расчетных" показателей. Но как это можно реализовать я пока не представляю. Т.е. выгрузить исходные данные в Excel/LibreOffice не проблема, но как заставить Excel/LibreOffice эти данные сконсолидировать, а потом ещё и заставить его что-то по этим сконсолидированным данным посчитать я не знаю. Если кто-то решал подобную задачу, расскажите-покажите как.

Зачем тут эта статья?

Надеюсь, что "многабукаф" и "многакартинаг" сделали своё дело и до этого места дочитали только те, кого действительно интересует тема статьи.

Я долго думал стоит или не стоит выкладывать на всеобщее обозрение свой "полуфабрикат", и в итоге всё-таки решил, что стоит. Во-первых, конфигурация уже худо-бедно работает, и я даже в ней что-то потихоньку считаю. Во-вторых, к конфигурации прилагается вполне себе реальные данные отчётности 20+ эмитентов. И хотя местами эти данные не совсем полные, и я не исключаю, что там могут быть ошибки (т.к. перебивал вручную из отчётов эмитентов), но, думаю, в целом их достоверность должна быть удовлетворительной, ведь делал для себя и лично заинтересован чтобы там не было лажи. Ну, и наконец, в-третьих, эта статья - это приглашение к дискуссии. Есть ряд вопросов, которые хотелось бы обсудить с людьми, которые уже сталкивались со схожими проблемами и, возможно, даже успешно их решали.

Вот, например, какие вопросы хотелось бы обсудить:

  1. Существует ли доступное готовое ПО (не обязательно на платформе 1С), предназначенное для фин.анализа и фунд.анализа ценных бумаг? Или может какие-то сервисы в интернете? Прежде чем начать пилить свой велосипед, я постарался найти что-нибудь подходящее, но, увы, ничего толкового не нашёл. Да, есть сервисы вроде dividendo.ru, dohod.ru, smart-lab.ru, но наборы показателей там жестко зафиксированы, нельзя добавить что-то своё, покрутить-повертеть-пощупать.
  2. Существуют ли какие-то источники данных, из которых можно загружать значения показателей отчётности эмитентов вместо того чтобы тупо перебивать вручную их из отдельных отчётов?
  3. Какие толковые интернет-ресурсы по теме фундаментального анализа можете порекомендовать?

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

Аналогично, если кто-то захочет помочь в вводе данных из отчётности эмитентов - пишите в комментариях или в личку - договоримся как лучше организовать этот процесс.

Адрес проекта на GitHub-е: https://github.com/q-i/fa

См. также

Криптобиржа

Управление инвестициями WEB-интеграция Платформа 1С v8.3 Финансовые услуги, инвестиции Абонемент ($m)

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

10 стартмани

01.03.2022    3510    5    Kupinov    6    

4

Анализ и учет сделок в TSLab

Файловый обмен (TXT, XML, DBF), FTP Управление инвестициями Платформа 1С v8.3 Финансовые услуги, инвестиции Управленческий учет Абонемент ($m)

Конфигурация для анализа и учета сделок в TSLab позволит взглянуть на ваши сделки в других измерениях! Новая версия.

5 стартмани

11.11.2021    4509    2    andriigontsa    0    

3

Портфель инвестора, загрузка данных с МОСБИРЖИ, СБЕРИНВЕСТОР и ТИНЬКОФФ ИНВЕСТИЦИИ

Управление инвестициями Платформа 1С v8.3 Финансовые услуги, инвестиции Россия Управленческий учет Абонемент ($m)

Все больше людей в России задумывается о своем непростом будущем. Одна из возможностей - это инвестиции (не путать с "пирамидами"). К сожалению, автономных инструментов для ведения инвестиционных портфелей не так уж много. Некоторые ведут учет в EXCEL, кто-то на сайтах. Первый вариант совсем уж неудобен, второй - зависит от сайта и часто требует оплаты. Было принято решение создать для себя простую программку, по возможности с какой-никакой автоматизацией для расчета доходности портфеля, пополнения, ну и различного анализа. Данная программа может помочь разобраться в механизме работы API от Тинькофф и API от Мосбиржи.

5 стартмани

27.07.2021    7542    40    sdamir2    8    

12

Сверка остатков оперативного и регламентированного учетов по займам предоставленным (доработана для приобретенных прав требований) для 1С:Управление микрофинансовой организацией и кредитным потребительским кооперативом

Анализ учета Займы, кредит, лизинг Управление инвестициями Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Финансовые услуги, инвестиции Бухгалтерский учет Управленческий учет Абонемент ($m)

Конфигурация: 1С:Управление микрофинансовой организацией и кредитным потребительским кооперативом. Стандартный отчет доработан для сверки приобретенных займов. Цифры регистров накопления в отчете не изменились, ОД для покупных займов сверяется с номинальной стоимостью, проценты - номинальная стоимость + начисленный процент. Стоимость приобретения не сверяет. Отчет разработчика не учитывает приобретенные займы и всегда показывает разницу оперативного и регламентного учета.

5 стартмани

25.03.2021    5965    0    user1393353    0    

3

АКАМ: инвестиционные проекты

Управление инвестициями Управление проектом (PMO, EPM) Платформа 1С v8.3 1С:CRM ПРОФ, КОРП Финансовые услуги, инвестиции Управленческий учет Платные (руб)

АКАМ: инвестиционные проекты является частью решения 1С:CRM и предназначен для автоматизации проработки инвестиционных проектов различных уровней (государственный, федеральный, местный, коммерческий) в рамках продвижения своих товаров и услуг, что уже стало новым трендом в развитии отделов продаж.

42000 руб.

19.03.2021    6963    0    0    

0

Учет ценных бумаг - расширение для конфигурации "INFOSTART ERP community edition"

Infostart ERP community Управление инвестициями Платформа 1С v8.3 Конфигурации 1cv8 Бухгалтерский учет Абонемент ($m)

Расширение предназначено для учета операций с ценными бумагами, отчет по движению ценных бумаг.

1 стартмани

25.02.2021    8321    11    33lab    1    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ulus 288 11.01.18 10:40 Сейчас в теме
Может бегло прочитал. Баланс/форму загружаешь? Распарсиваешь ? Или просто глазами считываем определенные строки из баланса и вкалачиваешь руками?
2. q_i 577 11.01.18 21:23 Сейчас в теме
(1) Вкалачиваю руками. С удовольствием бы загрузил, только вопрос где взять что-то пригодное для загрузки?
8. user1034710 29.12.19 23:51 Сейчас в теме
(2) Добрый вечер! Можно у Вас приобрести конфигурацию? Не могу скачать здесь.
9. q_i 577 23.01.20 16:55 Сейчас в теме
(8) Здравствуйте!
В статье есть ссылка на git-репозиторий: https://github.com/q-i/fa
Там же есть описание как собрать базу из исходников: https://github.com/q-i/fa/blob/master/docs/install.md
Если что-то не получится, пишите сюда или в личку.
3. Ulus 288 12.01.18 05:13 Сейчас в теме
) дак вот.
есть куча он-лайн сервисов, которые умеют загружать.
Подробно не смотрел, есть какие то требования к ексель файлам и.т.п
Ведь я там понимаю эмитент не придерживается одного формата Екселя (если вообще есть в екселе у него, а то и только в pdf)
4. q_i 577 18.01.18 18:38 Сейчас в теме
(3)
есть куча он-лайн сервисов, которые умеют загружать
например?
а то и только в pdf
На сайтах самих эмитентов в основном pdf-ы. Зачастую ещё и просто сканы, сохраненные как pdf. Если знаете откуда можно взять "машиночитаемые данные", подскажите.
5. q_i 577 28.04.18 20:07 Сейчас в теме
Выложил свои инструменты для учёта бумаг в УНФ: https://github.com/q-i/unf-for-investments
6. пользователь 01.08.19 12:53
Сообщение было скрыто модератором.
...
7. q_i 577 02.08.19 04:52 Сейчас в теме
(6) Добрый день!
Нет, такой нужды пока не возникало. У меня есть обработка для выгрузки заявок в tri-файл для последующего их импорта в QUIK (см. https://github.com/q-i/unf-for-investments обработка ВыгрузкаЗаявокВTRIФайл.epf). И есть функция (макрос) для LibreOffice-а, которая умеет формировать строку tri-файла с заявкой: https://gist.github.com/q-i/9fbf9d2720d7fd0114195546924daa9d
Что до использования Trans2QUIK.dll вместе с 1С, то для этого по моим ощущениям нужно нарисовать какую-нибудь обёртку вроде внешней компоненты или com-сервера. Задача в общем-то не выглядит чрезмерно сложной, другой вопрос насколько это вообще востребовано.
Оставьте свое сообщение