Разработка приложения по расчету VaR
Характеристика инвестиций как долгосрочных вложений капитала в собственной стране или за рубежом в предприятия разных отраслей, социально-экономические программы. Разработка приложения по расчету VaR ценной бумаги, находящейся в обращении на бирже.
Рубрика | Экономико-математическое моделирование |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.08.2020 |
Размер файла | 3,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Факультет бизнеса и менеджмента
РАЗРАБОТКА ПРИЛОЖЕНИЯ ПО РАСЧЕТУ VAR
Выпускная квалификационная работа
по направлению подготовки 38.03.05 Бизнес-информатика
образовательная программа «Бизнес-информатика»
Середин Владимир Валентинович
Научный руководитель
д-р физ.-мат. наук, проф.
Попов Виктор Юрьевич
Москва 2020
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
ГЛАВА 1. VALUE-AT-RISK
ГЛАВА 2. ПОДГОТОВКА И ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ
2.1 Стек используемых технологий
2.1.1 Язык программирования
2.1.2 Веб-фреймворк
2.1.3 Система сборки проекта и управления зависимостями
2.1.4 Spring boot и starter
2.2 Источник данных
2.3 Как работает приложение
2.3 Интерфейс приложения
ГЛАВА 3. РАЗРАБОТКА ПРИЛОЖЕНИЯ
3.1 Создание проекта
3.2 Получение данных по ценным бумагам
3.2.1 YahooFinanceApi
3.2.2 ResponseParser
3.3 Вычисление метрик
3.4 Разработка интерфейса
3.4.1 Форма ввода данных
3.4.2 ResultsLayout
ЗАКЛЮЧЕНИЕ
ЛИТЕРАТУРА
ВВЕДЕНИЕ
В современном мире существует множество вариантов, куда можно вложить собственные сбережения. Это может быть банковский вклад с фиксированной процентной ставкой, покупка недвижимости, покупка иностранной валюты и так далее. В данной работе пойдет речь об инвестировании в ценные бумаги, находящиеся в обращении на той или иной бирже.
Инвестиции -- это долгосрочные вложения капитала в собственной стране или за рубежом в предприятия разных отраслей, предпринимательские проекты, инновационные проекты. Различают следующие виды инвестиций: государственные, образуемые из средств государственного бюджета, из государственных финансовых источников; иностранные - вкладываемые зарубежными инвесторами, другими государствами, иностранными банками, компаниями, предпринимателями; частные, образуемые из средств частных, корпоративных предприятий и организаций, граждан, включая как собственные, так и привлеченные средства.
На сегодня существуют различные пути для торговли/инвестирования на бирже:
- Управляющие компании -- это компании, созданные в целях управления собственностью, пакетами акций, долями, паями в имуществе, выполняющая управленческие функции; действует обычно как трастовая компания. В таком случае инвестор отдает управление своими сбережениями компании, которая производит все операции на бирже взамен на некоторую комиссию. Примеры таких компаний:
- АО УК "БКС"
- АО "Сбербанк управление активами"
- АО ВТБ Капитал управление активами
- ООО "УК "Райффазен Капитал"
- ООО УК "Открытие" и т.д.
- Самостоятельное управление (или при помощи инвестиционной компании). Инвестор сам строит стратегию инвестирования, формирует инвестиционный портфель, производит операции на бирже, используя специальные терминалы/приложения (например, Тинькофф Инвестиции, рисунок 1).
Рисунок 1. Тинькофф Инвестиции. Тинькофф [Электронный ресурс]. URL: https://www.tinkoff.ru/about/news/29072019-tinkoff-investments-short-selling/
Также есть много продуктов, в которые можно инвестировать:
- Акции
- Облигации
- ETF (Exchange Traded Fund)
- ПИФ (Паевой инвестиционный фонд)
- Валюта
- Индексы (S&P100) и т.д.
Каждый из вариантов предполагает определенный уровень доходности, но, что не менее важно, уровень риска.
Инвестиционный рынок -- это достаточно нестабильный, подверженный изменениям рынок. Из работ профессора Барри Эйхенгрина из Калифорнийского университета в Беркли следует, что существует четыре основные причины:
Нестабильность макроэкономической системы в целом
Это может выражаться в высокой государственной задолженности, большом торговом дефиците, инфляционном давлении, нехватке кредитов и отсутствии веры инвесторов в экономику. Многие из этих макроэкономических проблем могут привести к тому, что стоимость валюты будет постоянно находиться под сомнением, что сделает инвестиции постоянно неустойчивыми.
Слабость Финансовой Системы
Эйхенгрин указывает на хрупкий характер финансовой системы как на еще одну важную макропричину инвестиционной нестабильности. В таких странах, как Южная Корея, большая зависимость от краткосрочных облигаций и других источников долгового финансирования сделала эту экономику очень уязвимой для спекулятивного давления. Именно это и произошло в 1997 году, когда спекуляции Джорджа Сороса на тайской валюте имели последствия по всей Азии. Высокая задолженность является одной из наиболее существенных причин нестабильности финансового рынка.
Институциональная слабость
Институциональная слабость является еще одной серьезной причиной неустойчивости и нестабильности инвестиций. Слабое государство часто не может контролировать денежные рынки и другие формы инвестиций. Сильные государства, такие как Китай, напрямую контролируют свою валюту и рынки, и в результате Китай смог пережить азиатский кризис 1997 года. На микроуровне недостаточная подотчетность совета директоров и руководства перед акционерами может привести к плохому управлению, которое может нанести ущерб стоимости акций и нанести ей быстрый ущерб.
Спекуляции и долги
Сам международный рынок может стать основной причиной нестабильности инвестиций. Спекуляция может создать пузыри, которые опасно завышают стоимость таких активов, как недвижимость. В конце концов, этот долговой пузырь лопнет, поскольку нельзя вечно занимать у одного, чтобы платить другому. Это приводит к быстрому краху и потенциальному разрушению всей экономики. Высокий долг на крупном рынке, таком как американский или европейский рынок, также может создать инвестиционную волатильность, поскольку многие инвесторы начинают думать, что эти рынки не могут вечно находиться в состоянии высокого долга. В конечном счете, когда счет приходит в срок и кредит становится очень дорогим, рынок уже не в состоянии поглотить производственный потенциал страны.
Для подтверждения слов о нестабильности достаточно привести график (рисунок 2) одного из крупнейших индексов NASDAQ COMPOSITE -- фондовый индекс, составленный из обыкновенных акций и подобных финансовых инструментов всех компаний, которые торгуются на бирже NASDAQ (американская биржа, которая специализируется на акциях высокотехнологичных компаний):
Рисунок 2. NASDAQ индекс
Невооруженным глазом видно несколько достаточно серьезных снижений стоимости индекса.
Приведу более конкретный пример: ниже можно увидеть график (рисунок 2) индекса S&P500 -- это фондовый индекс, в корзину которого включено 505 избранных торгуемых на фондовых биржах США публичных компаний с наибольшей капитализацией (рисунок 3).
Рисунок 3. S&P500, стоимость индекса
Один из крупнейших индексов в период с 19 февраля 2020 года по 23 марта 2020 года просел на более чем 33%. Одной из основных причин этому можно назвать распространение вируса covid-19.
Другой пример: на фоне пандемии и в результате срыва сделки ОПЕК+ (6 марта 2020) стоимость акции Сбербанка в период с 6 марта по 12 марта снизилась на более чем 16 % (рисунок 4).
Рисунок 4. Sberbank, стоимость акции
бумага ценный программа биржа
Также стоит понимать, что конкретный инвестор, управляющая компания или консультант могут принимать неверные решения, приводящие к убыткам. Это может происходить ввиду слабой компетенции, неверной интерпретации движений рынка или любых других внешних обстоятельств, которые могут повлиять на стоимость ценной бумаги.
Оценка риска
Таким образом, любая инвестиция сопровождается определенным уровнем риска. Каждый инвестор самостоятельно выбирает, на какой риск он готов пойти. От этого зависит его стратегия. Она может быть достаточно агрессивной (менее диверсифицированный портфель, акции второго/третьего «эшелона») -- с высокой долей риска, так и консервативной (большая степень диверсификации, акции крупных стабильных компаний, ОФЗ), то есть с низкой степенью риска. Для эффективной торговли/инвестировании на бирже необходимо уметь рассчитывать, оценивать риск. В настоящее время существует множество инструментов для оценки рисков. В их числе:
- Оценка среднеквадратичного отклонения
- Оценка волатильности
- Оценка системного риска по коэффициенту бета
- Оценка по методикам рисковой стоимости, VaR
- Оценка по методикам условной рисковой стоимости, Conditional VaR (CVaR)
В этой работе я подробней остановлюсь на метрике. VaR (Value at Risk) - это мера риска, которая оценивает величину потерь, которые не будут превышены с вероятностью, равной уровню доверия (например, 99%).
Целью данной работы является разработка приложения по расчету VaR ценной бумаги, находящейся в обращении на бирже. Приложение позволит всего в несколько кликов получить оценку риска нужной ценной бумаги за определенный период и с нужными пользователю параметрами.
ГЛАВА 1. VALUE-AT-RISK
VaR (Value at Risk) - это мера риска, которая оценивает величину потерь, которые не будут превышены с вероятностью, равной уровню доверия (например, 99%). Например, если портфель акций имеет однодневный 1% VaR в размере $1000, это означает, что существует вероятность 0,01, что портфель упадет в цене более чем на $1000 за один день.
На рисунке 5 можно увидеть графическое представление VaR:
Рисунок 5. VaR
VaR характеризуется тремя параметрами:
- Временной горизонт. Чаще всего это 1 или 10 дней (обычно используется для расчета величины капитала, покрывающего возможные убытки).
- Доверительный интервал (90, 95, 99% или точнее)
- Базовая валюта
Существует много методов оценки VaR, однако все их можно разделить на параметрические (например, дисперсионно-ковариационный VaR или дельта-гамма VaR) и непараметрические (например, историческое моделирование). Также отдельно можно выделить метод Монте-Карло.
В приложении будет реализован исторический, а также дельта нормальный (параметрический) метод, поэтому в первую очередь рассмотрим именно их.
Историческое моделирование
Алгоритм выглядит следующим образом:
1) Данные сортируются по темпам роста, от меньшего к большему
2) Отсекаются наихудшие значения, согласно заданному доверительному интервалу. То есть, если он равен 95%, а у нас есть значения за 100 дней, то нужно отсечь 5 значений. 6 значение будет равно VaR
Если необходимо посчитать VaR за n дней, полученное значение умножают на .
Однако у этого метода есть недостаток: оценка производится с предположением о том, что стоимость ценной бумаги будет вести также, как и за указанный временной интервал.
Дельта нормальный метод
Этот метод является параметрическим и предполагает, что распределение темпов роста стоимости акции является нормальным, то есть распределение вероятностей, которое в одномерном случае задаётся функцией плотности вероятности, совпадающей с функцией Гаусса.
Алгоритм:
1) Вычисляются стандартное отклонение темпов роста
2) VaR считается как стандартное отклонение, умноженное на Z-значение соответствующее заданному уровню доверия
ГЛАВА 2. ПОДГОТОВКА И ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ
2.1 Стек используемых технологий
2.1.1 Язык программирования
В качестве языка программирования я буду использовать Java (8 версия). Java -- это универсальный, строго типизированный, объектно-ориентированный язык программирования.
Главной особенностью, а также одним из преимуществ языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. Далее этот байт-код выполняется JVM (Java Virtual Machine). Благодаря этому приложения, написанные на Java, могут быть выполнены на любой архитектуре, для которой существует реализация JVM.
Java является одним из наиболее популярных языков программирования. Согласно рейтингу TIOBE за май 2020 года, Java занимает второе место по популярности (ранее, на протяжении долгого времени язык держал первую строчку). Этот рейтинг основан на количестве квалифицированных инженеров по всему миру, курсах и сторонних поставщиках, а также на запросах в наиболее популярных поисковых системах, таких как Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube и Baidu.
Java используется:
· на 97% корпоративных настольных ПК
· на 89% настольных ПК в США
· в 3 млрд мобильных телефонов
· в 125 млн ТВ-устройств
2.1.2 Веб-фреймворк
В проекте будет использоваться Vaadin -- это платформа с открытым исходным кодом, используемая для разработки веб-приложений. Платформа включает в себя ряд веб-компонентов, веб-фреймворк Java, набор инструментов и стартеров приложений.
Vaadin позволяет реализовать веб-интерфейсы HTML5 с использованием языка программирования Java.
Vaadin Framework предоставляет две модели разработки для веб-приложений: на стороне клиента (браузер) и на стороне сервера. Серверная модель разработки является более мощной, позволяя разрабатывать приложения исключительно на стороне сервера, используя клиентский движок Vaadin на основе AJAX, который отображает пользовательский интерфейс в браузере. Клиентская модель позволяет разрабатывать виджеты и приложения на Java, которые компилируются на JavaScript и выполняются в браузере. Эти две модели могут совместно использовать свои виджеты пользовательского интерфейса, темы, внутренний код и службы, а также легко смешиваться друг с другом.
Таким образом выглядит архитектура среды выполнения Vaadin (рисунок 6):
Рисунок 6. Vaadin runtime architecture. Vaadin [Электронный ресурс]. URL: https://vaadin.com/docs/v8/framework/architecture/architecture-overview.html
Vaadin Framework состоит из серверного API, клиентского API, большого числа компонентов пользовательского интерфейса/виджетов на обеих сторонах, тем для управления внешним видом и модели данных, которые позволяют привязывать серверные компоненты непосредственно к данным. Для разработки на стороне клиента он включает в себя компилятор Vaadin, который позволяет компилировать Java в JavaScript.
Серверное приложение Vaadin работает как сервлет на веб-сервере Java, обслуживая HTTP-запросы. Сервлет (VaadinServlet) получает клиентские запросы и интерпретирует их как события для конкретного сеанса пользователя. События связываются с компонентами пользовательского интерфейса и доставляются в прослушиватели событий, определенные в приложении. Если логика пользовательского интерфейса вносит изменения в компоненты пользовательского интерфейса на стороне сервера, сервлет отображает их в веб-браузере, генерируя ответ. Клиентский движок, работающий в браузере, получает ответы и использует их для внесения любых необходимых изменений на страницу в браузере.
2.1.3 Система сборки проекта и управления зависимостями
Maven -- это инструмент управления проектами, основанный на POM (project object model). Он используется для построения проектов, зависимостей и документации.
Maven делает много полезных задач, таких как:
· Построение проекта
· Добавление JAR'ников (Java-архив) и других зависимостей проекта
· Maven предоставляет информацию о проекте
· Maven позволяет легко обновить центральный репозиторий с JAR'никами и другими зависимостями
· С помощью Maven возможно создать любое количество проектов в форматы вроде WAR, JAR и т. д. без использования скриптов
· Используя maven, мы можем легко интегрировать наш проект с системой управления версиями (например, Subversion или Git)
Проекты, использующие данную систему управления проектом, имеют файл pom.xml, который содержит информация о проекте, зависимости и т.д.
2.1.4 Spring boot и starter
Для создания и простого запуска проекта мной будет использован Spring Boot (часть фреймворка Spring Framework), а также Spring Initializr в качестве стартера. Об этом будет поподробней рассказано в пункте, связанным с непосредственной разработкой.
2.2 Источник данных
API -- в общем смысле это набор функций (методов, констант, классов), благодаря которому одно приложение может взаимодействовать с другими.
На данный момент существует множество сервисов, предоставляющих данные по ценным бумагам. Среди них:
- Google Finance
- Yahoo Finance
- Investing.com
- Motley Fool
- Finbox.io и многие другие
Для получения данных я буду использовать Yahoo Finance, однако не напрямую, а через сервис-посредник -- RapidAPI. RapidAPI -- это крупнейший в мире рынок API, насчитывающий более 10 000 API и более 1 000 000 разработчиков.
Этот сервис предлагает хорошую документацию, примеры использования API, возможность тестирования (рисунок 7).
Рисунок 7. Code and response example. Rapid API [Электронный ресурс]. URL: https://rapidapi.com/apidojo/api/yahoo-finance1
Для использования необходимо зарегистрироваться, после чего будет получен ключ для использования API. Сервис достаточно просто в использовании и бесплатен (в некоторым пределах).
2.3 Как работает приложение
Обычный сценарий работы приложения будет выглядеть следующим образом (рисунок 8):
Рисунок 8. Этапы работы приложения
1) Пользователь вводит данные необходимые для расчета. Нам понадобятся:
- код ценной бумаги
- уровень доверия
- количество дней, за которое пользователь хочет узнать VaR
- временной промежуток, за которые будут взяты данные
В случае, если данные некорректны (все поля заполнены, соблюдены указанные форматы и установленные границы значений), выводится соответствующее сообщение с ошибкой. Если верно, шаг №2
2) На основе введённых данных составляется и отправляется API-запрос. Если получен корректный ответ (без ошибок), переходим к пункту №3. В ином случае, пользователю показывается сообщение об ошибке на данном этапе.
3) Полученный ответ (в формате JSON) парсится в Java-объекты для дальнейшей работы. В случае успеха, исполняется шаг №4. Если парсинг произошел с ошибкой, выводится информативное сообщение.
4) На основе полученные после парсинга данных производится расчет метрик (в том числе, VaR). Если этот этап проходит успешно, в интерфейс отдается результат расчета. В ином случае -- сообщение об ошибке.
2.3 Интерфейс приложения
Исходя из заявленного ранее функционала и сценария работы приложения, интерфейс будет представлять из себя две разных представления (layout):
1) форма для ввода параметров расчета
2) представление для результатов вычисления
В первой форме будут представлены поля для ввода всех необходимых параметров, а именно: код ценной бумаги, уровень доверия, даты старта и конца периода, количество дней, за которое необходимо посчитать метрику.
Вторая форма будет содержать компонент, содержащий результаты расчета, а также таблицу для отображения исторических данных.
Разработка данного интерфейса будет подробней рассмотрена в 3 главе.
ГЛАВА 3. РАЗРАБОТКА ПРИЛОЖЕНИЯ
3.1 Создание проекта
Для создания проекта, как говорилось ранее, я буду использовать Spring Initializr. В нем можно задать необходимые параметры (рисунок 9):
- система сборки проекта (gradle/maven)
- язык (Java/Kotlin/Groovy)
- версию Spring Boot
- версию выбранного языка программирования
- название проекта, группу, артефакт, название основной папки
- тип упаковки (Jar/War)
Рисунок 9. Spring Initializr. Settings [Электронный ресурс].
Spring Initializr URL: https://start.spring.io
А также задать начальные зависимости (рисунок 10):
Рисунок 10. Spring Initializr. Dependencies.
Spring Initializr [Электронный ресурс]. URL: https://start.spring.io
Как видно на рисунках 9, 10 мной были выбран описанный в пункте 2.1 стек технологий. Такой проект содержит в себе класс VarApplication (рисунок 11) со статическим void методом main(String [] args). Этот метод -- точка входа в приложение.
Рисунок 11. VarApplication class
Также можно увидеть файл pom.xml, в нем содержится информация по проекту, также все зависимости. Например, добавленная мной ранее Vaadin (рисунок 12):
Рисунок 12. Vaadin dependency
3.2 Получение данных по ценным бумагам
Для начала создам класс, который хранил бы в себе данные по ценной бумаге за 1 день. В нем будет 2 поля:
- price типа double
- date типа LocalDate
А также конструктор для инициализации объектов класса и геттеры/сеттеры для доступа к полям. Код (рисунок 13):
Рисунок 13. Stock class
Также я создам класс CalcContext, который будет хранить входные данные одного расчета. В нем будут следующие поля:
- stockCode типа String
- confidentLevel типа int
- timePeriod типа int
- startDate типа LocalDate
- endDate типа LocalDate
Так добавлены конструктор и геттеры (рисунок 14).
Рисунок 14. CalcContext class
Объект этого класса будет формироваться при запуске расчета пользователем (после ввода входных параметров и их проверки) и передаваться далее при расчете.
3.2.1 YahooFinanceApi
Для работы с API создадим класс YahooFinanceApi. Для получения респонса (HttpResponse, ответ фреймворка, который отдается клиенту) будет использоваться Unirest -- это клиентская библиотека HTTP от Mashape. Для ее использования необходимо добавить следующую зависимость с pom.xml (рисунок 15):
Рисунок 15. Unirest dependency
Чтобы получить респонс, потребуется данный код (рисунок 16):
Рисунок 16. Fetching data
В начале объявлены 3 статические строковые переменные:
HISTORICAL_DATA_API_URL -- основная часть URL'ы для запроса, а также два поля, используемых для получения респонса.
Метод getAPIUrl(CalcContext) возвращает итоговую строку запроса, основываясь на переданных пользователем параметрах.
Например, для акции с кодом «intc» (Intel Inc), начальной датой 4 мая 2020 и конечной датой 8 мая ссылка будет иметь следующий вид:
https://apidojo-yahoo-finance-v1.p.rapidapi.com/stock/v2/get-historical-data?frequency=1d&filter=history&period1=1588539600&period2=1588971600&symbol=intc (при переходе по ссылке запрос не пройдет, поскольку еще должны быть переданы некоторые параметры).
Для перевода даты в нужный формат (epochs in seconds) создам метод (рисунок 17):
Рисунок 17. localDateToEpochSeconds
Далее следует метод getHistoricalData(CalcContext ctx) с возвращаемым типом List<Stock>, в котором с помощью класса ResponseParser парсится полученный респонс, а затем полученный лист с данными фильтруется по дате (рисунок 18):
Рисунок 18. getHistoricalData
Сам класс будет соответствовать шаблону проектирования Singleton (рисунок 19). Singleton -- порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
Рисунок 19. YahooFinanceApi Singleton
3.2.2 ResponseParser
Существует несколько вариантов парсинга файлов, однако я напишу свой собственный, чтобы:
- снизить потребление памяти (мой парсер не будет считывать и хранить ненужную информацию)
- более удобным образом работать с полученными данными в будущем
Любой JSON построен на двух конструкциях:
- Коллекция пар имя / значение. В различных языках это реализуется в виде объекта, записи, структуры, словаря, хэш-таблицы, ключевого списка или ассоциативного массива.
- Упорядоченный список значений. В большинстве языков это реализуется в виде массива, вектора, списка или последовательности.
Файл с данными по ценной бумаге выглядит следующим образом (рисунок 20):
Рисунок 20. Http response
Prices представляет из себя массив, каждый элемент которого имеет следующие поля:
- date
- open
- close
- high
- low
- volume
- adjclose
Для расчета метрика нужны лишь 2 из них: date и close (он же price в классе Stock).
Для прохождения по JSON файлу, я буду итерироваться по JsonToken'ам.
Код (рисунок 21):
Рисунок 21. ResponseParser
Пошагово процесс выглядит следующим образом:
1) Создается пусть лист, в который затем будут добавляться объекты класса Stock.
2) Инициализируется парсер прохода по JSON'у.
3) Первые три токена пропускаются:
a. Первый токен -- JsonToken.START_OBJECT. Начало респонса.
b. Второй токен -- JsonToken.FIELD_NAME. Токен, содержащий название объекта, которое будет следующим (пара имя/значение).
c. Третий токен -- JsonToken.START_ARRAY. Начало массива с нужными данными.
4) Начинается цикл внутри массива. Входя в очередной объект, происходит инициализация нового объекта класс Stock, затем проходя по всем полям, записываются лишь нужны (date и close). На выходе из объекта происходит добавление в результирующий лист, объявленный ранее.
5) По выходу из цикла метод возвращает лист.
DATE_KEY и CLOSE_KEY -- статические переменные (рисунок 22).
Рисунок 22. Date и close fields keys
Парсер также, как и API класс, соответствует шаблону Singleton и имеет единственный объект.
3.3 Вычисление метрик
Для хранения результатов метрик будет создан класс VarResult, который будет содержать:
- CalcContext
- List<Stock>, то есть данные полученные после парсинга
- Map<String, Double> -- словарь с вычисленными метриками
Сам класс (рисунок 23):
Рисунок 23. VarResult class
Далее создается класс VarCalculator, который будет производить расчет на основы полученных от парсера данных и выбранных пользователем параметров.
Класс содержит методы по расчету математического ожидания, стандартного отклонения и дисперсии (рисунок 24), которые соответствуют формулам:
n = количество полученных объектов класса Stock
Рисунок 24. Mean, std, variance
Для построения нормального распределения понадобится следующая зависимость с модулем математики (рисунок 25):
Рисунок 25. Math dependency
Далее идет главный метод calculate с возвращающим типом VarResult (рисунок 26):
Рисунок 26. VarResult calculate
Алгоритм:
1) От API забираются исторические данные по ценной бумаге. Производятся проверки на их наличие ( != null) и размер от 3 и более (если 2, то стандартное отклонение темпов роста будет ровно 0)
2) Создается объект класса VarResult и словарь для результатов расчета
3) Считаются дополнительные метрики, далее не участвующие в расчете (среднее и стандартное отклонение стоимости актива)
4) С помощью цикла происходит расчет темпов роста согласно формуле:
5) Расчет дельта нормального VaR (рисунок 27) согласно формуле:
6) Расчет исторического VaR (рисунок 28)
a. Темпы роста сортируются от меньшего к большему
b. Считается перцентиль (100 - уровень доверия)
c. Считается минимальная прогнозная цена по формуле:
d. Считается VaR по формуле:
7) Заполнение словаря с результатами
Рисунок 27. Delta normal VaR calculation
Рисунок 28. Historical VaR calculation
3.4 Разработка интерфейса
Интерфейс будет состоять из одной страницы. Для начала необходимо создать класс, унаследоваться от класса UI и добавить аннотацию @SpringUI. Также переопределим метод protected void init(VaadinRequest request) следующим образом (рисунок 29):
Рисунок 29. MainView class
Сначала я объявляю переменную класс VerticalLayout с названием root. VerticalLayout -- это некоторой контейнер, элементы которого расположены вертикально. Затем инициализирует объект и применяю метод setContent(root) -- то есть задаю root в качестве контента для класса MainView.
root будет содержать в себе следующие объекты (именно в таком порядке):
- Label
Этот компонент отображает текст без возможности его изменения пользователем
- Tabsheet
Компонент позволяет разделения между формой для ввода данных и результатов расчета использую элемент TabSheet (рисунок 30).
Рисунок 30. TabSheet. Vaadin [Электронный ресурс]. URL: https://demo.vaadin.com/sampler/#ui/structure/tab-sheet
Далее будут представлены два метода для заполнения двух таб (для формы и результатов соответственно).
3.4.1 Форма ввода данных
Ниже представлен код метода initSettingLayout() (рисунок 31).
Рисунок 31. MainView initSettingsLayout()
В данном методе создается новый объект класса VerticalLayout, которой будет содержать в себе:
- TextField для ввода кода ценной бумаги
Этот компонент представляет из себя окно ввода данных пользователем
- TextField для ввода уровня доверия
- TextField для количества дней, за которое необходимо посчитать VaR
- DateField для ввода начальной даты
Компонент позволяет вводить дату, используя календарь
- DateField для ввода конечной даты
- Button для старта расчета
Для полей с датами задаются ограничения.
Для проверки и конвертации (для числовых полей) можно использовать класс Binder. Это класс также хранит в себе все возникающие ошибки и «сообщает» об их наличии пользователю. Код выглядит следующим образом (рисунок 32):
Рисунок 32. Binder for input fields
Ограничения следующие:
- каждое из полей должно быть заполнено
- уровень доверия лежит в пределах от 1 до 99
- количество дней по меньшей мере равно 1
Также добавляю логику, согласно которой запуск расчет при наличии ошибок невозможен. К binder применяется метод добавляющий слушатель (listener) --это обработчик, который привязан к определённому событию, и вызывается автоматически при его наступлении.
Далее идет кнопка, по нажатию на которую начинается расчет (рисунок 33):
Рисунок 33. MainView calculate button
Как видно, применен метод addClickListener, который отвечает за обработку события нажатия на компонент. Алгоритм:
1) Попытка считать с binder'a объект класса CalcContext. При ошибке -- вывод сообщения пользователю.
2) Запуск расчета
3) Вывод полученных результатов, метод fillResultsLayout(VarResult varRes)
3.4.2 ResultsLayout
Этот компонент также будет представлять собой VerticalLayout, которой содержит (рисунок 34):
- Label с результатами расчета
- Grid с полученными историческими данным по ценной бумаге
Рисунок 34. MainView initResultsLayout
Для заполнения таблицы и результатов используется метод (рисунок 35):
Рисунок 35. MainView fillResultsLayout
Происходит переключение на табу с результатами. С полученного объекта класс VarResult берутся данные по ценной бумаге и проставляются в качестве контента в таблицу. Формируется и проставляется контент для компоненты класса Label.
Результаты работы приложения будут представлены в заключении.
ЗАКЛЮЧЕНИЕ
В результате проделанной работы я выполнил анализ предметной области, достаточный для разработки:
- Инвестиционный рынок и его нестабильность
- Различные методы оценки рисков
- VaR и методы его моделирования
o Исторический метод
o Дельта-нормальный метод
Было разработано приложение, позволяющее расcчитывать VaR с заданными пользователем параметрами. Интерфейс приложения выглядит следующим образом (рисунок 36, 37)
Рисунок 36. UI, settings part
На первой форме пользователь выбирает код ценной бумаги, уровень доверия, количество дней, даты начала и конца периода расчета. В случае, если все в порядке, пользователь получить форму с результатом (рисунок 37):
Рисунок 37. UI, results part
Здесь пользователь видит вычисленные метрики:
- Среднее значение
- Стандартное отклонение
- VaR, посчитанный дельта-нормальным методом
- VaR, посчитанный с помощью исторического метода
Из перспектив развития приложения можно назвать введение возможности находить нужные данные по названию компании, а не коду. Возможно добавление большего количества метрик для оценки риска ценной бумаги, например, Conditional VaR или коэффициент бета. Также возможно добавить возможность считать риск целого портфеля акций.
ЛИТЕРАТУРА
1) What is Maven? [Электронный ресурс] / Apache Maven Project. URL: https://maven.apache.org/what-is-maven.html. (Дата обращения: 03.04.20).
2) Vaadin [Электронный ресурс] / Википедия - свободная энциклопедия. URL: https://ru.wikipedia.org/wiki/Vaadin. (Дата обращения: 01.04.20).
3) Подробней о технологии Java [Электронный ресурс] / Java. URL: https://www.java.com/ru/about/. (Дата обращения: 01.04.20).
4) Java [Электронный ресурс] / Википедия - свободная энциклопедия. URL: https://ru.wikipedia.org/wiki/Java. (Дата обращения: 01.04.20).
5) Yahoo Finance API Documentation [Электронный ресурс] / RapidAPI. URL: https://rapidapi.com/apidojo/api/yahoo-finance1. (Дата обращения: 01.04.20).
6) Joshua Bloch. Effective Java 3d edition: Addison-Wesley Professional, 2017.
7) Мартин Фаулер. Рефакторинг. Улучшение существующего кода / Пер. с англ. под ред. С. Маккавеевой.: Символ-Плюс, 2003
8) Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования / Пер. с англ. под ред. А. Слинкина.: Питер, 2001
9) Value at risk [Электронный ресурс] / Википедия - свободная энциклопедия. URL: https://en.wikipedia.org/wiki/Value_at_risk. (Дата обращения: 01.04.20).
10) Spring initializr [Электронный ресурс] / Spring initializr. URL: https://start.spring.io/. (Дата обращения: 01.04.20).
11) Maven repository [Электронный ресурс] / Maven repository. URL: https://mvnrepository.com/. (Дата обращения: 01.04.20).
12) Percentile [Электронный ресурс] / Apache Commons Math 3.6 API. URL: http://commons.apache.org/proper/commons-math/javadocs/api-3.6/org/apache/commons/math3/stat/descriptive/rank/Percentile.htmlhttps://maven.apache.org/what-is-maven.html. (Дата обращения: 02.04.20).
13) Vaadin Sampler [Электронный ресурс] / Vaadin. URL: https://demo.vaadin.com/sampler/. (Дата обращения: 03.04.20).
14) Calculating VaR Using Historical Simulation [Электронный ресурс] / Finance Train. URL: https://financetrain.com/calculating-var-using-historical-simulation/. (Дата обращения: 01.04.20).
15) An Introduction to Value at Risk (VAR) [Электронный ресурс] / Investopedia. URL: https://www.investopedia.com/articles/04/092904.asp. (Дата обращения: 01.04.20).
16) Сизых Д.С., Сизых Н.В. Новый подход к оценке риска акций: методология и практическое применение // Финансовая аналитика проблемы и решения [Электронный ресурс]. URL: https://cyberleninka.ru/article/n/novyy-podhod-k-otsenke-riska-aktsiy-metodologiya-i-prakticheskoe-primenenie/viewer. (Дата обращения: 01.05.20).
17) S&P500 [Электронный ресурс] / Yahoo Finance. URL: https://finance.yahoo.com/quote/%5EGSPC?p=^GSPC&.tsrc=fin-srch. (Дата обращения: 13.05.20).
18) Sberbank of Russia [Электронный ресурс] / Yahoo Finance. URL: https://finance.yahoo.com/quote/SBER.ME?p=SBER.ME&.tsrc=fin-srch. (Дата обращения: 13.05.20).
19) Сделка ОПЕК+ развалилась [Электронный ресурс] / Ведомости. URL: https://www.vedomosti.ru/business/articles/2020/03/06/824657-opek. (Дата обращения: 01.04.20).
20) P. Jordon. Value at Risk. The New Benchmark For Managing Financial Risk. - The McGraw-Hill Companies Inc, 2007. [Электронный ресурс] / Apache Maven Project. URL: https://www.academia.edu/8519246/Philippe_Jorion_-_Value_at_Risk_-_The_New_Benchmark_for_Managing_Financial_Risk_3rd_Ed_2007. (Дата обращения: 01.04.20).
21) БКС [Электронный ресурс] / БКС. URL: https://bcs.ru/. (Дата обращения: 05.04.20).
22) Binding Data to Forms [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/datamodel/datamodel-forms.html. (Дата обращения: 01.04.20).
23) TextField [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/components/components-textfield.html. (Дата обращения: 02.04.20).
24) Button [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/components/components-button.html. (Дата обращения: 02.04.20).
25) Grid [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/layout/layout-orderedlayout.html. (Дата обращения: 02.04.20).
26) VerticalLayout and HorizontalLayout [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/components/components-label.html. (Дата обращения: 02.04.20).
27) TabSheet [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/layout/layout-tabsheet.html. (Дата обращения: 02.04.20).
28) Date Input with DateField [Электронный ресурс] / Vaadin. URL: https://vaadin.com/docs/v8/framework/components/components-datefield.html. (Дата обращения: 02.04.20).
29) What is Maven? [Электронный ресурс] / Apache Maven Project. URL: https://maven.apache.org/what-is-maven.html. (Дата обращения: 01.04.20).
30) Райзберг Б.А., Лозовский Л.Ш., Стародубцева Е.Б. Современный экономический словарь. - 6-е изд., перераб. и доп. - М. (ИНФРА-М, 2011) [Электронный ресурс] / КонсультантПлюс. URL: http://www.consultant.ru/document/cons_doc_LAW_67315/. (Дата обращения: 01.04.20).
31) Introducing Json [Электронный ресурс] / Json URL: https://www.json.org/json-en.html. (Дата обращения: 01.04.20).
32) What Causes Instability in Investment? [Электронный ресурс] / PocketSense. URL: https://pocketsense.com/causes-instability-investment-8174442.html. (Дата обращения: 01.04.20).
33) JsonParser [Электронный ресурс] / FasterXML. URL: https://fasterxml.github.io/jackson-core/javadoc/2.8/com/fasterxml/jackson/core/JsonParser.html. (Дата обращения: 01.04.20).
34) Singleton [Электронный ресурс] / Википедия - свободная энциклопедия. URL: https://en.wikipedia.org/wiki/Singleton_pattern. (Дата обращения: 04.04.20).
35) Unirest Java [Электронный ресурс] / kong.github.io. URL: http://kong.github.io/unirest-java/. (Дата обращения: 01.04.20).
36) Spring Boot [Электронный ресурс] / Spring. URL: https://spring.io/projects/spring-boot. (Дата обращения: 01.04.20).
37) P. Jorion. Methods to measure VAR [Электронный ресурс] / Apache Maven Project. URL: https://merage.uci.edu/~jorion/oc/case4.html. (Дата обращения: 01.04.20).
38) Таблицы распределений [Электронный ресурс] / StatSoft электронный учебник по статистике. URL: http://statsoft.ru/home/textbook/modules/sttable.html#z. (Дата обращения: 02.04.20).
39) TIOBE Index for May 2020 [Электронный ресурс] / TIOBE -- the software quality company. URL: https://www.tiobe.com/tiobe-index/. (Дата обращения: 01.04.20).
40) How Do You Calculate Value at Risk (VaR) in Excel? [Электронный ресурс] / Investopedia. URL: https://www.investopedia.com/ask/answers/033115/how-can-you-calculate-value-risk-var-excel.asp. (Дата обращения: 01.04.20).
41) Nasdaq [Электронный ресурс] / Википедия - свободная энциклопедия. URL: https://en.wikipedia.org/wiki/Nasdaq. (Дата обращения: 01.04.20).
42) NASDAQ Composite [Электронный ресурс] / Yahoo Finance. URL: https://finance.yahoo.com/quote/%5EIXIC?p=^IXIC&.tsrc=fin-srch. (Дата обращения: 13.05.20).
Размещено на Allbest.ru
...Подобные документы
Экономическая сущность инвестиций. Классификация детерминированных методов моделирования. Анализ финансово-хозяйственной деятельности предприятия. Общее описание программы. Начисление штрафов за перераспределение инвестиций. Модели оптимизации выбора.
дипломная работа [2,5 M], добавлен 06.03.2013Виды инвестиционного риска. Понятия доходности и риска ценной бумаги. Однофакторная модель рынка капитала. Модель размещения средств с анализом риска убытков Ф. Фабоцци. Практическое применении модели Г. Марковица для оптимизации фондового портфеля.
презентация [109,0 K], добавлен 04.01.2015История возникновения и развития нейронной сети, ее значение и применение. Реализация приложения, позволяющего определить фигуры изображенные пользователем на панели приложения. Создание однослойной нейронной сети (персептрон) с возможностью её обучения.
курсовая работа [860,1 K], добавлен 13.07.2012Организационно-функциональная структура предприятия ООО "Колорит", его характеристика, основные технико-экономические показатели, дерево целей и функциональные задачи. Математическая модель прибыли предприятия, разработка алгоритма и анализ результатов.
курсовая работа [159,9 K], добавлен 21.01.2010Сущность экономико-математического моделирования. Понятия и типы моделей. Принцип работы симплекс-метода. Разработка математической модели по формированию производственной программы. Оптимизационные расчеты, связанные с выбором производственной программы.
курсовая работа [1,3 M], добавлен 09.07.2015Эффективность капитальных вложений. Статистические методы оценки целесообразности инвестиций с риском. Анализ чувствительности, сценариев. Установление номинальных и предельных значений неопределенных факторов. Имитационное моделирование Монте-Карло.
контрольная работа [34,4 K], добавлен 27.10.2008Анализ роли инвестиций в накоплении капитала. Общая характеристика модели динамики капитала, предложенной выдающимся польским ученым Михаилом Калецким. Примеры оценки результатов реализации различных инвестиционных проектов при помощи моделирования.
контрольная работа [112,5 K], добавлен 01.08.2010Математическое моделирование и оптимизация проектных решений с применением ЭВМ. Анализ загрузки производственных мощностей. Разработка сетевого графика и граф-дерева целей программы, рабочей документации целевой программы. Разработка Графика Гантта.
курсовая работа [1,0 M], добавлен 11.09.2008Формальная постановка задачи, методы решения. Модульная организация приложения. Общая схема взаимодействия модулей, описание модулей. Текст программы, руководство пользователя. Тестовый пример игры, приложение Delphi, надежность программного обеспечения.
курсовая работа [14,4 K], добавлен 19.10.2010Применение метода равномерного расположения для оптимизации бизнес-процессов. Программное обеспечение Staffware Process Suit, суть его работы и преимущества. Разработка приложения-прототипа для автоматизации применения метода равномерного расположения.
дипломная работа [214,9 K], добавлен 21.08.2016Общая характеристика и экономические показатели деятельности трех исследуемых предприятий. Решение задачи планирования производства, а также распределения инвестиций методом линейного и динамического программирования. Сравнительный анализ результатов.
курсовая работа [215,1 K], добавлен 25.04.2015Составление экономико-математической модели на примере СПК "Батаево" Хотимского района Могилёвской области. Расчет сбалансированной программы развития хозяйства и анализ полученного решения. Обоснование эффективности использования ресурсов предприятия.
курсовая работа [128,7 K], добавлен 11.04.2010Обоснование, схема и описание бизнес-процесса организации. Идентификация законов распределения случайных величин. Разработка и описание моделирующего алгоритма для реализации программы имитационной модели. Разработка компьютерной программы моделирования.
курсовая работа [265,3 K], добавлен 28.07.2013Производственная программа сельскохозяйственного предприятия, ее структура и основные статьи. Условия задачи оптимизации сочетания отраслей. Состав переменных модели, система ограничений. Анализ и оценка оптимального решения, его выбор и обоснование.
контрольная работа [51,1 K], добавлен 04.05.2014Выбор детерминант структуры капитала компаний, функционирующих на российском рынке. Сбор статистических данных по российским компаниям в разрезе отраслей российской экономики, построение и тестирование регрессионных моделей с учетом фактора отрасли.
дипломная работа [898,9 K], добавлен 31.10.2016Основные положения теории расписаний, постановка задачи минимизации средневзвешенного суммарного штрафа и методы ее решения. Разработка алгоритма решения данной задачи методами полного перебора и оптимальной вставки, составление программы на Delphi.
курсовая работа [468,7 K], добавлен 10.04.2011Методы предпроектного обследования предприятия. Анализ полученных материалов для последующего моделирования. Разработка модели процесса в стандарте IDEF0. Описание документооборота и обработки информации в стандарте DFD. Математическая модель предприятия.
курсовая работа [1,2 M], добавлен 25.11.2009Роль экономико-математических методов в оптимизации экономических решений. Этапы построения математической модели и решение общей задачи симплекс-методом. Составление экономико-математической модели предприятия по производству хлебобулочных изделий.
курсовая работа [1,3 M], добавлен 09.07.2015Подходы к оптимизации структуры капитала. Анализ формирования собственного и заемного капитала. Расчет эффекта финансового рычага. Влияние дивидендной политики на структуру капитала. Моделирование финансовой системы ООО "Первый Автомобильный Салон".
дипломная работа [184,0 K], добавлен 13.02.2015Выявление зависимости ценообразования от структуры рынка. Особенности разработки ценовой политикой фирмы, находящейся в фазе экспериментирования. Изучение понятия плановых и тактических скидок как главных инструментов маркетинговой политики предприятия.
контрольная работа [32,9 K], добавлен 01.12.2014