САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
КАФЕДРА УПРАВЛЕНИЯ МЕДИКО-БИОЛОГИЧЕСКИМИ СИСТЕМАМИ
Харламов Кирилл Александрович
Выпускная квалификационная работа бакалавра
Создание программного обеспечения для анализа
динамики курсов валют, построения и
прогнозирования валютной корзины минимальной
волатильности
Направление 010300
Фундаментальные информатика и информационные технологии
Научный руководитель,
кандидат физ.-мат. наук,
доцент
Корников В. В.
Санкт-Петербург
2016
1
Содержание
Введение ........................................................................................................ 3
Постановка задачи ....................................................................................... 5
Обзор литературы ........................................................................................ 6
Глава 1. Экономическая модель .................................................................. 8
1.1. Модель обмена ................................................................................ 8
1.2. Инвариантные индексы ................................................................ 10
1.3. Валютные корзины ....................................................................... 12
Глава 2. Инструменты программной реализации ................................... 14
2.1. Язык программирования ............................................................... 14
2.2. Графический интерфейс ............................................................... 16
2.3. Построение графиков ................................................................... 17
Глава 3. Детали программной реализации .............................................. 18
3.1. Входные данные ............................................................................ 18
3.2. Подсчет индексов .......................................................................... 20
3.3. Построение валютных корзин ..................................................... 22
3.4. Использование генетического алгоритма при построении
корзины минимальной волатильности .............................................. 24
3.5. Построение прогноза на основе линейной регрессии ............... 29
Глава 4. Инструкция по использованию программы ............................. 31
4.1. Стартовый экран настроек ........................................................... 31
4.2. Визуализация индексов валют и валютных корзин .................. 35
4.3. Прогнозирование .......................................................................... 38
Заключение ................................................................................................. 41
Список литературы .................................................................................... 43
2
Введение
Валютой называют важнейшую составляющую денежной системы
какого-либо государства или региона, являющуюся мерой стоимости,
средством обращения и платежа. Только Центральный банк Российской
федерации ведет статистику по курсам 149 валют [1], однако также
существуют виртуальные валюты, валюты непризнанных или частично
признанных государств и территорий, частные и региональные валюты.
Численные значения курсов валют в совокупности достаточно объемны и
мало показательны. В связи с этим возникает необходимость создания
простого и гибкого инструмента для обработки данных подобного рода.
Валютный рынок, как и любой другой, подвержен колебаниям и
изменениям, то есть является нестабильным. Во многом это происходит из-за
того, что цены формируются на основе спроса и предложения, которые, в
свою
очередь,
постоянными
не
являются.
Это
влечет
за
собой
малоустойчивость, а зачастую и нелогичность в формировании цен на
отдельные валюты. Следовательно, имеет смысл использовать наборы валют,
взятых в определенных пропорциях – валютные корзины, которые глубже
отражают состояние рынка и его динамику. Более того, располагая
статистическими данными за некоторый период времени и используя ряд
математических методов, возможно построить максимально стабильную
корзину.
Пусть ценность некоторого блага выражается в определенной валюте.
Имея построенную стабильную валютную корзину, можно получить курс
обмена интересующей нас валюты к данной корзине. Таким образом
получим показатель ценности блага в стабильной агрегированной денежной
единице. Это позволит наблюдать за реальной динамикой ценности актива,
которая не отражает в себе колебания конкретной валюты.
3
Другим
применением
стабильных
валютных
корзин
являются
международные торговые операции по форвардным контрактам. В таких
контрактах часто дата оплаты поставки какого-либо товара не совпадает с
датой самой поставки. Данный факт вносит в бизнес определенные риски,
связанные с возможными изменениями курсов валют за промежуток времени
между передачей товара и получением за него оплаты. Использование
стабильной валютной корзины вместо одной или нескольких конкретных
валют при подобных торговых операциях позволило бы избежать проблем.
Кроме того, многие государства хранят резервы в иностранных
валютах. При падении на валютном рынке используемых государством
валют, денежные запасы страны уменьшатся. Таким образом, стабильные
валютные корзины также позволяют эффективно сохранять денежный
капитал.
Наконец, имея статистические данные, можно построить прогноз,
показывающий предположительные значения и динамику курсов отдельных
валют и валютных корзин. Прогноз по очевидным причинам не может быть
абсолютно точным. Но, не смотря на это, грамотное построение прогноза
является важным аспектом экономической деятельности.
В виду широкого распространения информационных технологий и
высокой
вычислительной
мощности
современных
персональных
компьютеров, удобным инструментом для выполнения вышеописанных
действий
может
являться
специальное
программное
обеспечение.
Программная реализация позволяет скрыть от конечного пользователя
математические рассчеты и выполнить обработку значительных объемов
информации за весьма короткий промежуток времени.
4
Постановка задачи
В данной работе ставится задача рассмотреть экономическую модель
валютного рынка, включающую в себя инвариантные индексы и валютные
корзины, а также создать специализированное программное обеспечение
(ПО). Это программное обеспечение должно позволять проводить анализ
динамики курсов валют, строить валютные корзины (в том числе
максимально стабильные), делать прогноз изменений стоимости валют и
валютных корзин. Разрабатываемая программа имеет исследовательскую
направленность, однако вместе с тем должна быть достаточно простой в
освоении.
Важным
аспектом
является
предоставление
пользователю
возможности использовать входные статистические данные, получаемые из
общедоступных источников, что придает программному обеспечению
необходимую гибкость и универсальность. Описываемое ПО должно
являться
удобным
инструментом
для
исследователя,
позволяющим
экспериментировать с минимальными затратами времени на расчеты и
изменение параметров модели.
5
Обзор литературы
Простая модель обмена, на основе которой строится модель
предметной области в данной работе, вводится в совместных публикациях
научных сотрудников СПбГУ: кандидата физико-математических наук,
доцента кафедры высшей математики факультета прикладной математики –
процессов управления – Геннадия Михайловича Хитрова, и профессора
экономического факультета – Николая Васильевича Хованова [2, 3, 4].
Проблема построения агрегированных валют минимального риска
также широко освещается в публикациях Николая Васильевича Хованова. В
его работах обосновывается необходимость рассмотрения составных валют,
строятся модели обмена и индексы простых и составных благ, а также
описываются
методы
построения
составных
благ
минимальной
волатильности [5, 6, 7].
В свою очередь, опираясь на результаты Хованова и его соавторов,
другие исследователи создали ряд работ по смежным темам. Например,
Victor Pontines и Ramkishen S. Rajan в исследовательской статье «The Asian
Currency Unit (ACU): exploring alternative currency weights» рассматривают
возможность применения альтернативных весовых коэффициентов для
Азиатской валютной единицы [8].
Поскольку для выполнения поставленной в данной работе задачи
необходимо использование ряда технических средств и алгоритмов, выделим
литературу и из этой области. В свете использования в созданной программе
генетического алгоритма минимизации, стоит отметить известную книгу
Джона Холланда «Адаптация в естественных и искусственных системах» [9],
которая стала толчком для популяризации и дальнейших исследований в
области эволюционных алгоритмов. В наши дни существует множество
публикаций и книг, в которых можно найти информацию о генетических
алгоритмах. Например, принципы построения таких алгоритмов изложены в
6
книге Юрия Ивановича Нечаева и Александра Борисовича Дегтярева
«Интеллектуальные системы: концепция и приложения» [10].
В качестве пособия по использованному в данной работе языку
программирования
C#
автором
использовалась
книга
«Язык
программирования C#» Андерса Хейлсберга – одного из разработчиков этого
языка [11].
7
Глава 1. Экономическая модель
1.1. Модель обмена
При разработке программного обеспечения, прежде всего, необходимо
формализовать предметную область, к которой оно относится. В данной
работе предметной областью является валютный рынок (его часть),
следовательно, можно построить следующую модель.
Рассмотрим набор экономических благ 𝐺 = {𝑔1 , … , 𝑔𝑛 }, которые в
нашем случае будут являться валютами. Каждая из валют может иметь
количественную характеристику – действительное число 𝑞𝑖 ≥ 0, 𝑖 = 1, … , 𝑛,
𝑞1 + ⋯ + 𝑞𝑛 > 0.
Любая валюта может быть обменяна на определенное количество
другой валюты. Таким образом, коэффициент обмена для двух валют 𝑔𝑖 и 𝑔𝑗
определим как
𝑐(𝑖, 𝑗) =
𝑞𝑗
.
𝑞𝑖
Для полноты функционала программного обеспечения необходимо
иметь значения коэффициентов 𝑐(𝑖, 𝑗) для всех рассматриваемых валют.
Набор коэффициентов 𝑐(𝑖, 𝑗) составляет матрицу обмена 𝐶 = {𝑐(𝑖, 𝑗)},
𝑖 = 1, … , 𝑛, 𝑗 = 1, … , 𝑛. Эта информация по большей части будет относиться
к априорной, получаемой из внешнего источника, и называться курсами
валют. Отношение обмена, которое отражают коэффициенты, является
отношением эквивалентности, так как для него характерны рефлексивность,
симметричность и транзитивность:
любую валюту можно обменять саму на себя;
если валюту 𝑎 можно обменять на валюту 𝑏, то и валюту 𝑏 можно
обменять на валюту 𝑎;
8
если валюту 𝑎 можно обменять на валюту 𝑏, а валюту 𝑏 на валюту 𝑐, то
валюту 𝑎 можно обменять на валюту 𝑐.
Свойство транзитивности играет особенно важную роль при обработке
входных данных в программе, так как из внешнего источника не всегда
возможно получить все значения матрицы 𝐶 = {𝑐(𝑖, 𝑗)}, ввиду неполноты
исходных данных или из соображений компактности их хранения. При
выполнении данного свойства для расчета всех значений матрицы обмена
достаточно знать одну её строку.
Для того чтобы модель была полностью адекватной (то есть
соответствовала предметной области), необходимо отметить два свойства
матрицы 𝐶. Первое, наиболее очевидное: все диагональные элементы
матрицы обмена равны единице, так как одна единица некоторой валюты
обменивается на одну единицу той же самой валюты. Второе: если 𝑐(𝑖, 𝑗)
единиц валюты 𝑖 обменивается на одну единицу валюты 𝑗, то одна единица
валюты 𝑖 обменивается на 1⁄𝑐(𝑖, 𝑗) единиц валюты 𝑗.
9
1.2. Инвариантные индексы
Элементы матрицы обмена 𝐶 = {𝑐(𝑖, 𝑗)} отражают динамику валюты 𝑖
по отношению к валюте 𝑗 и наоборот. По изменению лишь одного курса
𝑐(𝑖, 𝑗) трудно понять, какой из переменных оно вызвано. Поэтому для
отслеживания реальной ситуации на валютном рынке встает вопрос о
введении характеристики, которая отражала бы динамику некоторого курса
по отношению не к одной, а ко всем имеющимся в рассмотрении валютам.
Именно зависимость от всех имеющихся валют означает, что такой индекс
будет независим от базового блага, то есть инвариантен по отношению к
каждой конкретной денежной единице. Это позволит наиболее объективным
образом оценивать изменения в ценности валют. Можно составить
бесконечно много различных индексов. В данной работе используются
аддитивные и мультипликативные индексы следующего вида:
𝐼𝑛𝑑𝐴𝑑𝑑(𝑖) =
𝐼𝑛𝑑𝑀𝑢𝑙𝑡(𝑖) =
𝑐(𝑖, 𝑗)
1 𝑛
∑ 𝑐(𝑖, 𝑗)
𝑛 𝑖=1
𝑐(𝑖, 𝑗)
, где 𝑗 ∈ {1, … , 𝑛};
√∏𝑛𝑖=1 𝑐(𝑖, 𝑗)
𝑛
, где 𝑗 ∈ {1, … , 𝑛}.
Значение данных индексов для валюты 𝑖 не зависит от выбора базовой
валюты 𝑗. Далее необходимо ввести в рассмотрение последовательность
моментов времени 𝑡 ∈ {1, … , 𝑇}, в которые измеряются значения курсов для
входных данных. Соответственно, инвариантные индексы будут зависеть от
𝑡:
𝐼𝑛𝑑𝐴𝑑𝑑(𝑖, 𝑡) =
𝐼𝑛𝑑𝑀𝑢𝑙𝑡(𝑖, 𝑡) =
𝑐(𝑖, 𝑗, 𝑡)
1 𝑛
∑ 𝑐(𝑖, 𝑗, 𝑡)
𝑛 𝑖=1
𝑐(𝑖, 𝑗, 𝑡)
, где 𝑗 ∈ {1, … , 𝑛}, 𝑡 ∈ {1, … , 𝑇};
√∏𝑛𝑖=1 𝑐(𝑖, 𝑗, 𝑡)
𝑛
, где 𝑗 ∈ {1, … , 𝑛}, 𝑡 ∈ {1, … , 𝑇}.
Полученные индексы могут иметь сильно различающиеся числовые
значения, что осложняет восприятие визуализированной на графике
10
динамики изменения валюты. Поэтому из соображений удобства будет
разумно редуцировать индексы следующим образом:
𝐼𝑛𝑑𝐴𝑑𝑑𝑅 (𝑖,
𝑡
𝐼𝑛𝑑𝐴𝑑𝑑(𝑖, 𝑡)
;
)=
𝑡0
𝐼𝑛𝑑𝐴𝑑𝑑(𝑖, 𝑡0 )
𝐼𝑛𝑑𝑀𝑢𝑙𝑡𝑅 (𝑖,
𝑡
𝐼𝑛𝑑𝑀𝑢𝑙𝑡(𝑖, 𝑡)
.
)=
𝑡0
𝐼𝑛𝑑𝑀𝑢𝑙𝑡(𝑖, 𝑡0 )
Здесь 𝑡0 – некоторый момент времени. В программе в качестве 𝑡0
используется начальный момент времени.
11
1.3. Валютные корзины
Валютная корзина – набор определенных количеств различных валют
[12]. Необходимость в использовании валютной корзины возникает в связи с
нестабильностью отдельных валют. Именно совокупность нескольких валют,
взятых в определенных пропорциях, позволяет комплексно учитывать
рыночную ситуацию и изменение
общеэкономических условий обмена.
Количество той или иной валюты, входящей в рассматриваемую корзину,
называется удельным весом валюты. Каждый удельный вес принадлежит
отрезку [0; 1], а сумма всех весов должна равняться единице.
Валютные корзины, как и отдельные валюты, по сути, являются
расчётными единицами. Поэтому из тех же соображений, что и для валют,
имеет смысл для формализации понятия «валютная корзина» использовать
редуцированный индекс, не зависящий от базовых валют, выбранных для
построения индексов компонентов корзины. Искомая величина будет
являться
функцией
от
инвариантных
индексов
отдельных
валют,
приведенных к начальному моменту времени:
𝑛
𝑡
𝑡
𝐶𝐵𝑖𝑛𝑑 (𝑤, ) = ∑ 𝑤𝑖 𝐼𝑛𝑑𝑅 (𝑖, ),
𝑡0
𝑡0
𝑖=1
𝑡
где n – число валют в корзине. Здесь и далее под 𝐼𝑛𝑑𝑅 (𝑖, ) будем
𝑡
0
подразумевать аддитивный или мультипликативный индекс (применимы
оба). Ограничения на значения удельных весов 𝑤 = (𝑤1 , … , 𝑤𝑛 ) имеют вид:
𝑛
∑
𝑤𝑖 = 1, 𝑤𝑖 ≥ 0 ∀ 𝑖 ∈ {1, . . , 𝑛}.
𝑖=1
(1.3.1)
Аддитивный вид индекса позволяет работать с корзинами, некоторые
компоненты которых имею близкий к нулю вес.
Далее перейдем к проблеме построения стабильной валютной корзины.
Значение индекса корзины минимальной волатильности с течением времени
должно изменяться минимальным образом (оставаться неизменным в
12
идеальном случае). Нестабильность корзины можно выразить через
дисперсию:
𝐷=
𝑇
1
2
∑ (𝐶𝐵𝑖𝑛𝑑(𝑤, 𝑡) − 𝑀𝐶𝐵𝑖𝑛𝑑(𝑤)) ,
𝑇
𝑡=1
(1.3.2)
𝑇
1
𝑀𝐶𝐵𝑖𝑛𝑑(𝑤) = ∑ 𝐶𝐵𝑖𝑛𝑑(𝑤, 𝑡) ,
𝑇
𝑡=1
{1, … , 𝑇} − рассматриваемые моменты времени.
Таким образом, для построения валютной корзины минимальной
волатильности необходимо подобрать весовые коэффициенты 𝑤𝑖 таким
образом, чтобы дисперсия 𝐷 была наименьшей. Этого можно достичь,
применив алгоритм минимизации к (1.3.2) при ограничениях (1.3.1). В
данной работе использовался генетический алгоритм, который описан в
параграфе 3.4.
13
Глава 2. Инструменты программной реализации
В данной главе описан набор инструментов и технологий, с помощью
которых строится конечный программный продукт.
2.1. Язык программирования
Для создания программы выбран язык программирования C#. Он был
разработан в 2002 году компанией Microsoft и с тех пор является одним из
самых
распространенных
языков
разработки.
C#
предназначен
для
программной платформы .NET Framework, которая, в свою очередь,
ориентирована на операционную систему Microsoft Windows (хотя и
существуют
некоторые
технологии,
позволяющие
работать
с
.NET
Framework на других операционных системах). С учетом того, что по разным
оценкам более 85% персональных ПК работает под управлением Windows
[13, 14], написанная на C# программа может быть использована достаточно
широким кругом пользователей, что удовлетворяет поставленным целям.
Данный язык имеет большое количество библиотек, в том числе и
стандартных, что делает удобным процесс разработки и позволяет в
некоторых модулях программы использовать уже готовые решения.
Так как C# имеет управляемый код, то есть исполнение кода
осуществляется под управлением виртуальной машины .NET, пиковая
производительность кода в нем не достижима (в отличие от неуправляемого
кода). Однако этого и не требует концепция разработки программы в
текущей работе, так как целевой аудиторией разработанного программного
обеспечения являются частные лица, а не коммерческие организации.
Следовательно, ранее описанные преимущества перевешивают тот факт, что
предельная скорость выполнения программы может быть не максимальной.
14
Таким образом, язык C# является подходящим инструментом для
решения поставленной в данной работе задачи.
15
2.2. Графический интерфейс
Графический интерфейс пользователя, ГИП (graphical user interface,
GUI) – разновидность реализации пользовательского интерфейса, при
которой использование программы осуществляется путем взаимодействия с
графическими элементами, размещенными на экране.
Альтернативой GUI является интерфейс на основе командной строки,
который является неприемлемым в данной работе. Аргументы в пользу
реализации ГИП следующие:
необходимость в максимальной «дружественности» интерфейса;
существование
большого
объема
информации,
которую
нужно
визуализировать в различных формах;
Иными словами, трудозатраты и объем потраченного времени на разработку
графического интерфейса в данном случае вполне оправданы.
Для реализации GUI был выбран интерфейс программирования
приложений Windows Forms, который является частью .NET Framework. Для
создания программы, удовлетворяющей требованиям, описанным в этой
работе, требуется ряд широко используемых графических элементов:
кнопки
текстовые поля
списки
таблицы
элементы для построения изображений
Все они присутствуют в Windows Forms, кроме того, могут быть созданы с
использованием визуального редактора, что экономит время на разработку.
При этом ввиду исследовательского характера приложения не требуются
какие-либо
оригинальные
и
нестандартные
дизайнерские
решения.
Следовательно, данный интерфейс программирования вполне пригоден для
использования.
16
2.3. Построение графиков
В ходе работы программы в виде входных необработанных данных,
либо в результате обработки этих данных, возникает большой объем
информации. В качестве этой информации выступают курсы валют, индексы
валют, индексы различных валютных корзин, а также спрогнозированные
значения временных рядов. Разработанное программное обеспечение
позволяет работать со статистическими данными за десятки лет, объем этих
данных после обработки и построения индексов значительно возрастает.
Например, при использовании информации о курсах пяти разных валют к
рублю за один год, лишь после расчёта полной матрицы обмена и
инвариантных индексов получится 7200 числовых значений. Всю эту
информацию необходимо представить пользователю наглядно. Так как
существуют две основные характеристики: момент времени и значение
величины, то лучшим выходом является построение двумерных графиков.
Язык C# в купе с Windows Forms позволяют разработать модуль
программы, ответственный за создание 2D графиков. Однако в открытом
доступе
существует
множество
готовых
библиотек,
реализующих
поставленную задачу с большим количеством инструментов и широкими
возможностями настройки. Одной из таких библиотек является ZedGraph,
которая имеет открытый код, полноценную документацию, хорошее
быстродействие и стабильность в работе [15]. Именно она и была
использована в данном проекте.
17
Глава 3. Детали программной реализации
3.1. Входные данные
Входными данными служат файлы формата DBF. Данный формат
широко распространен. Его используют в базах данных для хранения
информации предметной области и метаданных. Файлы этого формата с
курсами различных валют к рублю можно получить на официальном сайте
Центрального банка Российской Федерации [1]. Для просмотра содержимого
файла
можно
воспользоваться,
например,
Microsoft
Excel.
ЦБ
РФ
предоставляет данные с 1992 года до наших дней. Существует возможность
выбрать любую часть данного временного промежутка.
В программе используются два столбца из входных файлов: дата, когда
было зафиксировано определенное значение курса, и само это значение.
Получение этих данных из файла осуществляется при помощи SQL запроса,
с применением набора интерфейсов OLE DB. Информация из каждого файла
с курсом некоторой валюты к рублю извлекается в экземпляры класса
System.Data.DataTable, представляющие
таблицы. Затем
эти
таблицы
объединяются в System.Data.DataSet.
Далее данные с курсами валют реорганизуются в набор матриц, где
каждая матрица является матрицей обмена, введенной в параграфе 1.1, в
некоторый момент времени (в данном случае – за какую-то дату).
Неизвестные элементы матриц рассчитываются из исходных данных за счет
того, что для курсов валют выполняется свойство транзитивности. В новом
виде информация по-прежнему представлена экземпляром класса DataSet,
состоящим из таблиц DataTable, только теперь каждая таблица относится не
к конкретной валюте, а к моменту времени. Также создается массив дат,
размер которого равен числу таблиц в новом DataSet.
18
Для наглядности вышеописанные преобразования для четырех валют
(включая рубль) показаны на рисунке 1.3.1.
Рисунок 1.3.1. Слева: набор таблиц без преобразований; справа: полученный после
реорганизации данных набор матриц, а также вектор дат, указывающих, когда
проводились измерения курсов.
Полученные матрицы данных выводятся на экран в виде таблиц с
применением элемента Windows Forms – DataGridView, в котором в качестве
источника данных указывается одна из таблиц DataTable (матрица курсов).
Номер выбранной таблицы определяется номером в массиве дат выбранной в
календаре даты. Календарь также реализован средствами Windows Forms
(элемент MonthCalendar). Помимо этого, на основе курсов валют строится 2D
график при помощи библиотеки ZedGraph.
19
3.2. Подсчет индексов
После успешного получения входных данных и их обработки
происходит
объективным
подсчет
инвариантных
показателем
динамики
индексов,
курса
той
которые
или
иной
являются
валюты,
используются для построения валютных корзин и при прогнозировании.
Согласно параграфу 1.2, в данной работе используются аддитивные
индексы вида
𝐼𝑛𝑑(𝑖, 𝑡) =
𝑐(𝑖, 𝑗, 𝑡)
,
1 𝑛
∑ 𝑐(𝑖, 𝑗, 𝑡)
𝑛 𝑖=1
(3.2.1)
либо мультипликативные
𝐼𝑛𝑑(𝑖, 𝑡) =
𝑐(𝑖, 𝑗, 𝑡)
√∏𝑛𝑖=1 𝑐(𝑖, 𝑗, 𝑡)
𝑛
,
(3.2.2)
𝑗 ∈ {1, … , 𝑛}, 𝑡 ∈ {1, … , 𝑇},
которые приводятся к начальному моменту времени:
𝐼𝑛𝑑𝑅 (𝑖,
𝑡
𝐼𝑛𝑑(𝑖, 𝑡)
.
)=
𝑡0
𝐼𝑛𝑑(𝑖, 𝑡0 )
(3.2.3)
Выбор между двумя вышеприведенными типами осуществляет пользователь.
На языке C# функция, отвечающая за подсчет аддитивных индексов,
выглядит следующим образом:
double[,] CreateAdditiveIndices(int baseCurrency) // baseCurrency - номер базовой валюты
{
double[,] index = new double[numberOfCurrency, numberOfTimeMoments];
double indexT0 = 1; // Индекс в начальный момент времени
for (j = 0; j < numberOfCurrency; j++) // j - номер валюты
for (t = 0; t < numberOfTimeMoments; t++) // t - момент времени
{
double sum = 0;
for (int i = 0; i < numberOfCurrency; i++) // подсчет суммы в (3.2.1)
sum = sum + rates[t][i][baseCurrency];
index[j, t] = rates[t][j][baseCurrency] / (sum / numberOfCurrency);
if (t == 0)
indexT0 = index[j, 0];
index[j, t] = index[j, t] / indexT0; // (3.2.3)
}
return index;
}
20
Для мультипликативных:
double[,] CreateMultiplicativeIndices(int baseCurrency) // baseCurrency - номер базовой
валюты
{
double[,] index = new double[numberOfCurrency, numberOfTimeMoments];
double indexT0 = 1; // Индекс в начальный момент времени
for (j = 0; j < numberOfCurrency; j++) // j - номер валюты
for (t = 0; t < numberOfTimeMoments; t++) // t - момент времени
{
double comp = 1;
for (int i = 0; i < numberOfCurrency; i++) // подсчет произведения в
(3.2.2)
comp = comp * rates[t][i][baseCurrency];
index[j, t] = Pow(comp, 1.0 / numberOfCurrency);
if (t == 0)
indexT0 = index[j, 0];
// Индекс в начальный момент времени
index[j, t] = index[j, t] / indexT0; // (3.2.3)
}
return index;
}
Из соображений краткости и наглядности в приведенном коде
экземпляры класса DataSet заменены на многомерные массивы.
По окончании подсчетов, данные полученного массива по аналогии с
курсами валют выводятся на экран в качестве таблицы, а также могут быть
визуализированы
в
виде
графика
для
любой
пользователем (из имеющихся в рассмотрении).
21
валюты,
выбранной
3.3. Построение валютных корзин
Как отмечалось в параграфе 1.3, валютные корзины представляются в
виде индексов, подсчитанных по формуле:
𝑛
𝑡
𝑡
𝐶𝐵𝑖𝑛𝑑 (𝑤, ) = ∑ 𝑤𝑖 𝐼𝑛𝑑𝑅 (𝑖, ),
𝑡0
𝑡0
𝑖=1
(3.3.1)
Построение корзины становится доступно только после подсчета
𝑡
индексов отдельных валют 𝐼𝑛𝑑𝑅 (𝑖, ). Создается список с названиями
𝑡
0
имеющихся валют, в котором выбираются нужные для построения корзины.
По названиям валют можно определить их номера в массиве индексов.
Весовые коэффициенты 𝑤𝑖 вводятся пользователем в текстовое поле через
пробел самостоятельно.
Далее необходимо произвести парсинг весовых коэффициентов. Вопервых, необходимо предусмотреть некорректный ввод данных в текстовое
поле (например, наличие букв среди чисел). Ошибочный текст исправляется
путем удаления несоответствующих требованиям символов, приводится к
единому формату. Во-вторых, могут быть не соблюдены ограничения,
накладываемые на весовые коэффициенты рассматриваемой моделью (сумма
весов равна единице, каждый вес принадлежит отрезку [0; 1], число
введенных весов должно совпадать с количеством выбранных валют в
списке). Сообщение об ошибке такого рода выводится на экран.
Обработка содержимого текстового поля производится с помощью
регулярных выражений. Например, убрать некорректные символы, можно
следующим образом:
string patternWrongSymb = @"[^0123456789,. ]";
string replacementWS = "";
string text = Regex.Replace(input, patternWrongSymb, replacementWS);
22
В приведенном примере любой символ, не являющийся цифрой, точкой,
запятой или пробелом, заменяется пустой строкой.
Если после парсинга весовые коэффициенты признаются корректными,
происходит подсчет значений индекса валютной корзины и вывод их на
график.
23
3.4. Использование генетического алгоритма при
построении корзины минимальной волатильности
Согласно параграфу 1.3, задача построения корзины минимальной
волатильности
сводится
к
минимизации
𝑤=
относительно
(𝑤1 , … , 𝑤𝑛 ) функции
𝐷=
𝑇
1
2
∑ (𝐶𝐵𝑖𝑛𝑑(𝑤, 𝑡) − 𝑀𝐶𝐵𝑖𝑛𝑑(𝑤)) ,
𝑇
𝑡=1
𝑀𝐶𝐵𝑖𝑛𝑑(𝑤) =
(3.4.1)
𝑇
1
∑ 𝐶𝐵𝑖𝑛𝑑(𝑤, 𝑡) ,
𝑇
𝑡=1
{1, … , 𝑇} − рассматриваемые моменты времени,
при ограничениях
𝑛
∑
𝑤𝑖 = 1, 𝑤𝑖 ≥ 0 ∀ 𝑖 ∈ {1, . . , 𝑛}.
(3.4.2)
𝑖=1
В данной работе для поиска оптимальных весовых коэффициентов
использовался генетический алгоритм минимизации.
Генетический алгоритм (ГА) оптимизации – это алгоритм поиска
оптимальных решений задачи путем эвристического подбора и модификаций
искомых параметров с применением механизмов, аналогичных механизмам
естественного отбора в природе. Термин «генетический алгоритм» впервые
был упомянут Р. Багли в 1957 году, позднее, в конце 60-х годов двадцатого
века, формальный механизм и теоретическое обоснование алгоритма было
введено американским ученым Дж. Холландом.
Генетические алгоритмы имеют ряд достоинств [10, 16, 17, 18]:
ГА не накладывают никаких требований на вид оптимизируемой
функции и на вид ограничений. При применении ГА не появляется
необходимость
упрощать
исследуемую
адекватности.
24
модель
в
ущерб
её
Генетические алгоритмы устойчивы к попаданию в локальный
минимум,
благодаря
альтернативных
тому,
решений,
что
которые
рассматривается
к
тому
же
множество
подвергаются
стохастическим изменениям.
ГА удобен и достаточно прост в программной реализации, не требует
использования методов численного дифференцирования.
Основным недостатком является скорость поиска экстремума. Однако
в виду исследовательской направленности целевой программы и достаточной
вычислительной мощности современных ПК, данный недостаток не является
критичным.
Существует
алгоритма,
множество
ниже
различных
приводится
описание
вариаций
рассматриваемого
конкретной
реализации,
использованной в данной работе.
Исходной задачей является задача поиска набора параметров 𝑤 =
(𝑤1 , … , 𝑤𝑛 ), при котором функция (3.4.1) примет минимальное значение, с
учетом ограничений (3.4.2). Введем основные понятия. Fitness-функция – это
функция, оценивающая меру пригодности некоторого потенциального
решения. В данном случае fitness-функцией является выражение (3.4.1): чем
меньше его значение для рассматриваемых параметров, тем ближе данный
набор к окончательному результату. Популяцией будем называть набор из 𝑛
векторов 𝑤. Особь – один из элементов популяции.
В начале работы алгоритма случайным образом задаются вектора
популяции.
Выбор
наиболее
подходящего
размера
популяции
осуществляется опытным путем. После генерации значений каждого вектора
к
нему применяется
функция нормализации, которая
поддерживает
ограничения (3.4.2). Также для каждого вектора вычисляется значение
функции полезности. Это значение хранится в одной структуре данных с
самим вектором. Таким образом, мы получили стартовую популяцию. Её
элементы являются далекими от оптимальных. Теперь над особями из
25
популяции
нужно
произвести
итеративную
последовательность
преобразований, чтобы увеличить их «полезность». Одна итерация данных
преобразований называется шагом эволюции или эпохой. Оптимальное
количество шагов эволюции, также как и размер популяции, определяется
опытным путем.
Рассмотрим один эволюционный шаг. Он состоит из следующих
составляющих.
1. Кроссовер. Случайным образом выбираются две особи популяции,
называемые родительскими. Путем «скрещивания», то есть создания
комбинаций параметров родителей, создаются две новых особи. В данной
реализации алгоритма описанный процесс происходит по формулам:
𝑟 = 𝑅𝑎𝑛𝑑𝑜𝑚(0; 1)
𝛼 = 2𝑟 − 0.5
𝛽 = 2(1 − 𝑟) − 0.5
𝑐ℎ𝑖𝑙𝑑1𝑖 = |𝛼 ∙ 𝑝𝑎𝑝𝑎𝑖 + 𝛽 ∙ 𝑚𝑎𝑚𝑎𝑖 |
𝑐ℎ𝑖𝑙𝑑2𝑖 = |𝛼 ∙ 𝑚𝑎𝑚𝑎𝑖 + 𝛽 ∙ 𝑝𝑎𝑝𝑎𝑖 |
Эти формулы итерационно применяются для всех элементов вектора
коэффициентов 𝑤. Здесь 𝑟 – случайное число от 0 до 1. Ранее выбранные
родительские особи обозначены, как 𝑚𝑎𝑚𝑎 и 𝑝𝑎𝑝𝑎, а дочерние,
соответственно, 𝑐ℎ𝑖𝑙𝑑1 и 𝑐ℎ𝑖𝑙𝑑2.
К новым особям применяется функция нормализации для выполнения
наложенных на них ограничений, после чего к каждой новой особи
прикрепляется
значение
fitness-функции,
подсчитанное
подстановкой
вектора параметров в функцию (3.4.1). Далее эти элементы добавляются в
общую популяцию.
2. Мутация. На данном этапе случайным образом выбираются одна из
особей популяции и один из её параметров. В этот параметр вносятся
изменения:
𝑤(𝑖) = 𝑤(𝑖) ∗ 𝑅𝑎𝑛𝑑𝑜𝑚(0; 1) + 0.5
26
Затем
вектор
коэффициентов
с
одной
обновленной
составляющей
нормализуется и для него пересчитывается значение функции пригодности.
3. Редукция. В ходе выполнения текущей итерации популяция выросла
на
два
элемента.
Однако
целесообразно
поддерживать
стабильную
численность. Для этого отсортируем элементы популяции по значению
fitness-функции и удалим два наименее подходящих элемента. В нашем
случае таковыми будут те векторы весовых коэффициентов, при которых
значения минимизируемой функции будут наибольшими.
Описанные три пункта повторяются в каждой эпохе эволюции. По
окончании эволюционного процесса, получим набор отсортированных по
оптимальности векторов, с помощью которых можно построить валютную
корзину минимальной волатильности.
Блок-схема описанного алгоритма представлена на рисунке 3.4.1.
27
Рисунок 3.4.1. Блок-схема генетического алгоритма.
28
3.5. Построение прогноза на основе линейной регрессии
В качестве дополнительного инструмента в созданной программе
реализован механизм построения прогноза курсов валют, индексов валют и
валютных корзин. Рассмотрим применение для этих целей многофакторной
линейной регрессии.
Целью
построения
регрессионной
модели
является
выявление
зависимости переменной 𝑌 от 𝑘 независимых переменных 𝑋, называемых
факторами. Пусть 𝑦 – наперед известное значение, а 𝑌 – значение функции
регрессии (спрогнозированное значение), тогда выполняется:
𝑦 = 𝑌(𝑎, 𝑋) + 𝜀,
где 𝜀 – ошибка регрессионной модели. Функция регрессии задается в виде:
𝑌(𝑎, 𝑋) = 𝑎1 𝑋1 + ⋯ + 𝑎𝑘 𝑋𝑘 .
(3.5.1)
𝑋𝑖 – факторы регрессии, 𝑎𝑖 – коэффициенты регрессии.
Сформулируем
задачу
прогнозирования,
применительно
к
рассматриваемому программному обеспечению. После обработки входных
данных мы имеем значения курсов и индексов валют, а также индексов
валютных корзин за заданный входными данными временной промежуток.
Этот промежуток представлен моментами времени {1, … , 𝑇}. Далее для
краткости будем называть любые значения (курсов или индексов) временным
рядом. Необходимо построить значения временного ряда для моментов
времени {𝑇 + 1, … , 𝐿}, где 𝐿 − длина прогноза.
Перед
тем,
как
начать
использовать
модель
регрессии
для
непосредственного построения прогноза, необходимо определить значения
коэффициентов регрессии. Для этого найдем такую линейную функцию 𝑌,
которая наилучшим образом апроксимирует имеющий временной ряд (или
его часть). Коэффициенты данной функции и будут искомыми значениями
𝑎 = {𝑎1 , … , 𝑎𝑘 }.
Для
решения
поставленной
определим меру качества аппроксимации:
29
промежуточной
задачи
𝑁
𝐸= ∑
𝑖=1
(𝑌𝑎𝑝𝑝 (𝑖) − 𝑌𝑟𝑒𝑎𝑙 (𝑖))2 ,
где 𝑁 ≤ 𝑇 – число аппроксимируемых моментов времени, 𝑌𝑎𝑝𝑝 – функция
аппроксимации, 𝑌𝑟𝑒𝑎𝑙 – реальные значения временного ряда. Необходимо
минимизировать 𝐸 по коэффициентам {𝑎1 , … , 𝑎𝑘 }. Для этого в программе
применяется описанный в предыдущем параграфе генетический алгоритм.
Пользователю
умолчанию
предоставляется
размер
популяции
возможность
и
изменить
количество
эпох
заданные
эволюции
по
через
соответствующие текстовые поля. Также пользователю необходимо указать
количество независимых переменных в процентном соотношении от общего
количества моментов времени.
Теперь,
зная
вектор
𝑎 = {𝑎1 , … , 𝑎𝑘 },
можно
приступать
к
прогнозированию. Получив из текстового поля длину прогноза 𝐿, по формуле
(3.5.1) вычисляется значение временного ряда на момент времени 𝑇 + 1.
Далее по той же формуле считается значение на момент 𝑇 + 2. При этом в
качестве одной из независимых переменных уже используется подсчитаное
на предыдущем шаге значение за дату 𝑇 + 1. Процесс продолжается до
достижения 𝑇 + 𝐿. При этом на каждом шаге общее количество независимых
переменных остается постоянным. Таким образом, точность прогноза будет
убывать с удалением от стартовой точки.
Доверительный интервал прогноза построим следующим образом. Для
каждой прогнозной точки 𝑓𝑜𝑟𝑒𝑐𝑎𝑠𝑡 найдем верхнюю и нижнюю границы
интервала 𝑎 и 𝑏 соответственно:
𝑎 = 𝑓𝑜𝑟𝑒𝑐𝑎𝑠𝑡 + 𝑡 ∙ 𝑠;
𝑏 = 𝑓𝑜𝑟𝑒𝑐𝑎𝑠𝑡 − 𝑡 ∙ 𝑠.
Здесь 𝑡 – коэффициент Стьюдента для доверительной вероятности 0.95, 𝑠 –
стандартное отклонение значений временного ряда.
30
Глава 4. Инструкция по использованию программы
4.1. Стартовый экран настроек
После запуска программы открывается стартовое окно (рисунок 4.1.1).
Рисунок 4.1.1. Стартовое окно.
Навигация по программе осуществляется с помощью главного меню,
расположенного в верхней части экрана. Оно остается неизменным при
переходе в разные разделы.
Прежде чем перейти к построению графиков, необходимо передать в
программу входные данные и произвести их обработку. Для этого в верхней
левой части окна нужно добавить в список файлы с расширением .dbf,
каждый из которых содержит курс какой-то определенной валюты к рублю.
31
Данные файлы можно получить на почту, заполнив соответствующую форму
на официальном сайте Центрального банка Российской Федерации.
Временной промежуток у всех подключаемых файлов должен быть
одинаковым.
Рядом со списком присутствуют следующие кнопки:
– Вызов краткой справки о требованиях, налагаемых на входные файлы.
– Добавление файла в программу. После нажатия откроется диалоговое
окно, в котором можно выбрать подходящий файл, предварительно
скачанный на жесткий диск или съемный носитель.
– Удаление выбранного файла из списка.
– Сохранение списка подключенных к текущему моменту файлов. При
следующем запуске программы их не нужно будет добавлять снова.
После выбора всех необходимых входных файлов, следует произвести
преобразования данных и расчёт инвариантных индексов валют согласно
параграфам 3.1 и 3.2 нажатием одной кнопки «Рассчитать». В случае
успешного подсчета появятся два новых графических элемента: календарь и
таблица (рисунок 4.1.2).
32
Рисунок 4.1.2. Окно настроек. Результат расчета индексов.
В правой части экрана можно увидеть матрицу курсов валют за какуюлибо дату. Выбрать эту дату можно с помощью календаря. Также стали
активными кнопки «Показать курсы валют» и «Показать инвариантные
индексы». С их помощью можно переключаться между табличными
представлениями курсов и индексов валют. Рисунок 4.1.3 демонстрирует вид
окна программы с таблицей значений индексов.
33
Рисунок 4.1.3. Окно настроек. Табличное представление индексов валют.
В случае неудачной попытки расчётов (например, если пользователь
попытался подсчитать индексы, не подгрузив ни одного входного файла с
валютами), вместо таблицы со значениями в центральной части окна
появится сообщение об ошибке.
Далее можно перейти к построению графиков. Соответствующий пункт
главного меню после выполнения подсчетов становится активным.
34
4.2. Визуализация индексов валют и валютных корзин
В разделе визуализации в верхней части окна расположен график, а в
нижней – инструменты для его построения (рисунок 4.2.1).
Рисунок 4.2.1. Окно визуализации.
Инструменты для построения графика разделены на категории: «курсы
валют», «инвариантные индексы» и «валютные корзины». В первых двух
категориях
достаточно
выбрать
нужные
валюты
и
нажать
кнопку
«Изобразить».
Для построения графика валютной корзины, необходимо из списка
выбрать валюты, из которых будет состоять искомая корзина. Затем в
текстовое поле ввести весовые коэффициенты для каждой валюты через
пробел (самый левый коэффициент соответствует верхней валюте в списке,
самый правый – нижней). Каждый из весов должен быть больше или равен
35
нулю и меньше или равен единице, а сумма весов должна равняться единице.
После задействования кнопки «Построить корзину» её график появится в
соответствующей области экрана.
Выбрав из списка валют нужные и нажав кнопку «Рассчитать веса для
корзины с минимальной волатильностью», начнутся подсчеты, после
выполнения которых, текстовое поле будет заполнено значениями весов,
минимизирующих отклонение графика. Например, значения весов для
наиболее стабильной корзины, построенной на основе данных за промежуток
времени 01.01.2014 – 31.12.2015 и состоящей из российского рубля,
китайского юаня, евро и доллара США, будут равны 0.172, 0.174, 0.289 и
0.364 соответственно. График такой корзины соответствует линии красного
цвета на рисунке 4.2.2.
Рисунок 4.2.2. Пример построения стабильной валютной корзины.
Управлять видом графика можно с помощью контекстного меню,
вызываемого нажатием правой кнопки мыши при её наведении на область, в
которой
расположен
график.
Присутствует
возможность
изменения
масштаба, сохранения изображения на жесткий диск или в буфер обмена, а
36
также вывода на печать. В правом верхнем углу графика расположены
кнопки очистки, выбора цвета линий и вызова краткой подсказки.
37
4.3. Прогнозирование
Для перехода к разделу прогнозирования можно воспользоваться
соответствующим пунктом главного меню в верхней части окна.
Рисунок 4.3.1. Раздел прогнозирования.
В верхней части данного раздела (рисунок 4.3.1) расположен график,
обладающий
всеми
перечисленными
в
параграфе
4.2
свойствами.
Единственным отличием является возможность выбрать разные цвета линий
для фактических данных и для прогноза. Под графиком находится ряд
выпадающих списков и текстовых полей, с помощью которых настраиваются
параметры расчётов.
В левом выпадающем списке выбирается объект прогноза (рисунок
4.3.2).
38
Рисунок 4.3.2. Виды прогнозов.
В первых двух случаях с помощью соседних выпадающих списков можно
выбрать конкретные валюты, а в последнем вести работу с корзиной,
построенной по инструкции из параграфа 4.2 (если таковая вообще
построена).
Для более тонкой настройки предназначены поля со следующими
иконками.
- Длина прогноза. Измеряется в днях. Рассматриваются только дни, в
которые происходит изменение курсов валют (пять дней недели).
- Количество независимых переменных в процентном соотношении от тех
данных, на которых происходит поиск оптимальных коэффициентов
регрессии.
- Размер популяции в генетическом алгоритме минимизации ошибки
аппроксимации.
- Количество шагов эволюции в генетическом алгоритме минимизации
ошибки аппроксимации.
Все перечисленные поля для удобства пользователя заполнены
значениями по умолчанию. Вдобавок к этому, при наведении курсора на
любую иконку появляется всплывающая подсказка.
При установке галочки напротив пункта «ретроспективный прогноз»
открывается календарь, на котором можно выбрать стартовую дату для
данного прогноза. Аналогичным образом можно выбрать опцию построения
доверительных интервалов.
При наличии большого объема исторических данных, подгруженных в
программу, имеет смысл игнорировать часть из них для построения более
39
точного прогноза. Это возможно сделать с помощью соответствующего
ползунка в правой части экрана.
В качестве иллюстрации приведем ретроспективный прогноз фунта
стерлингов к рублю (GBP/RUB) на 7 дней с параметрами, представленными
на рисунке 4.3.3.
Рисунок 4.3.3. Параметры, использованные при прогнозе курса GBP/RUB.
В качестве результата получим график, изображенный на рисунке 4.3.4.
Рисунок 4.3.4. Прогноз курса GBP/RUB. Красная линия – прогноз, черная – реальные
данные.
40
Заключение
В данной работе была рассмотрена экономическая модель, построены
инвариантные индексы и обосновано их применение. Были формализованы
такие понятия, как «валютная корзина» и «валютная корзина минимальной
волатильности».
обеспечения
для
Показана
анализа
необходимость
динамики
разработки
валют,
программного
построения
корзин
и
прогнозирования. Было создано ПО, обоснован выбор тех или иных
инструментов, описаны использованные алгоритмы и продемонстрирована
работа программы.
Разработанное программное обеспечение решает все поставленные
задачи.
Программа позволяет автоматизировать расчет курсов и индексов
валют, имеет интерфейс табличного представления числовых значений
данных показателей, а также инструменты для создания графика. Все
это может использоваться для анализа динамики валют.
У пользователя имеется возможность на основе входных данных
строить
различные
Реализовано
валютные
построение
корзины
валютной
и
визуализировать
корзины
их.
минимальной
волатильности для разных наборов валют и разного количества валют в
наборе.
Разработан модуль прогнозирования. Пользователю предоставляется
возможность изменения параметров прогноза. Данный модуль является
инструментом для исследователя, позволяющим автоматизировать
расчеты, экспериментировать с параметрами и визуализировать
результаты. Точность прогноза в большой степени зависит от
введенных
пользователем
использованная
в
настроек.
программе,
41
Регрессионная
ориентирована
на
модель,
построение
краткосрочного прогноза. В будущем возможно расширение данного
модуля с целью добавления других методов прогнозирования.
Программа позволяет обрабатывать входные данные, полученные при
помощи
интерфейса
Российской
официального
федерации.
Эти
сайта
Центрального
статистические
данные
банка
являются
надежными и корректными. При этом со стороны пользователя не
требуется их дополнительная обработка перед использованием в
разработанном ПО.
Создан
удобный
графический
интерфейс
со
всплывающими
подсказками и краткими справками, что делает использование
описываемого программного обеспечения удобным и минимизирует
временные затраты на изучение возможностей программы.
Данная работа была представлена на XLVII Международной научной
конференции
аспирантов
и
студентов
«Процессы
управления
и
устойчивость», а также на XVI Всероссийском Симпозиуме по прикладной и
промышленной математике. Тексты соответствующих докладов приняты к
публикации в сборниках трудов конференций.
42
Список литературы
1. База данных по курсам валют | Банк России.
http://www.cbr.ru/currency_base/dynamics.aspx
2. Хитров Г. М., Хованов Н. В. Простая модель обмена: основные
предположения и ближайшие следствия // Вестник Санкт-Петербургского
университета. Серия 5: Экономика. 1992. № 4. С. 101–106.
3. Хитров Г. М., Хованов Н. В. Простая модель обмена: рандомизированные
транзитивные
матрицы
коэффициентов
обмена
//
Вестник
Санкт-
Петербургского университета. Серия 5: Экономика. 1994. № 1. С. 94–100.
4. Хитров Г. М., Хованов Н. В. Простая модель обмена: анализ динамики
покупательной способности и курсовой стоимости валюты // Вестник СанктПетербургского университета. Серия 5: Экономика. 1995. № 3. С. 90–96.
5. Hovanov N. V., Kolari J. W., Sokolov M. V., Sutyrin S. F. Meta-money: theory
and application under risk and instability // The Sixth International Scientific
School “Modeling and Analysis of Safety and Risk in Complex systems” (MASR2006). July 4–8, 2006. SPb., RAS, 2006. P. 240–247.
6. Hovanov N. V., Kolari J. W., Sokolov M. V. Synthetic U.S. Dollar as an
“Anchor” for Chinese yuan (An application of currency stochastic indices theory)
// International Scientific School “Modeling and Analysis of Safety and Risk in
Complex systems” (MASR-2004). June 22–25, 2004. SPb., Russia. IPME, 2004.
P. 219–225.
7. Hovanov N. V., Kolari J. W., Sokolov M. V. Computing currency invariant
indices with an application to minimum variance currency baskets // Journal of
Economic Dynamics & Control 28. 2004. P. 1481–1504.
8. Pontines V., Rajan R. S. The Asian Currency Unit (ACU): exploring alternative
currency weights // Macroeconomics and Finance in Emerging Market Economies
Vol. 1, No. 2, September 2008, P. 269–278.
43
9. Holland J. H. Adaptation in natural and artificial systems. University of
Michigan Press, Ann Arbor, 1975. 211 pp.
10. Нечаев Ю. И., Дегтярев А. Б. Интеллектуальные системы: концепция и
приложения. СПб.: Изд-во С.-Петерб. ун-та, 2011. 269 с.
11.
Хейлсберг
А.,
Торгерсен
М.,
Вилтамут
С.,
Голд
П.
Язык
программирования C#. Классика Computers Science. 4-е изд. СПб.: Питер,
2012. 784 с.
12. Финансовый словарь. http://dic.academic.ru/dic.nsf/fin_enc/12090
13. StatCounter Global Stats - Browser, OS, Search Engine including Mobile
Usage Share. http://gs.statcounter.com/#desktop-os-ww-monthly-201501-201601bar
14. Market share for browsers, operating systems and search engines | News.
http://www.netmarketshare.com/report.aspx?qprid=11&qpcustomb=0&qpsp=192
&qpnp=13&qptimeframe=M&qpct=2
15. ZedGraph. https://sourceforge.net/projects/zedgraph/
16. Li H., Love P. E. D., Ogunlana S. Genetic algorithm compared to nonlinear
optimization for labour and equipment assignment // Building Research &
Information, 1998. 26:6, P. 322–329.
17. Gallagher K., Sambridge M. Genetic algorithms: a powerful tool for
large-scale nonlinear optimization problems // Computers & Geosciences Vol. 20,
No. 7/8, 1994. P. 1229–1236.
18. А. П. Ротштейн “Интеллектуальные технологии идентификации”.
http://matlab.exponenta.ru/fuzzylogic/book5/1_2.php
44
Отзывы:
Авторизуйтесь, чтобы оставить отзыв