а) Пассивная модель - модель не имеет никаких способов воздействовать на представление или контроллер, и используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются контроллером и он же отвечает за перерисовку представления, если это необходимо. Такая модель чаще используется в структурном программировании <#"818333.files/image077.jpg">
Рисунок 2.1 - Схема паттерна MVC
Важно отметить, что как представление, так и контроллер зависят от
модели. Однако модель не зависит ни от представления, ни от контроллера. Тем
самым достигается назначение такого разделения: оно позволяет строить модель
независимо от визуального представления, а также создавать несколько различных
представлений для одной модели.
3. Реализация приложения
Данное приложение автоматизирует работу по прогнозированию временных рядов с применением фрактального анализа. Веб-интерфейс приложения позволяет пользователю добавлять исторические данные различных временных рядов и делать прогноз с помощью нейронной сети, использующей на этапе формирования входных данных фрактальный анализ.
Пользователь может просматривать исторические данные различных котировок, которые он может с легкостью импортировать в приложение.
Также в приложении есть возможность проведения RS анализа временных рядов для нахождения экспоненты Херста. Она в свою очередь необходима для расчета фрактальной размерности при проведении псевдофазовой реконструкции. Присутствует также возможность расчета оптимальной временной задержки.
Характерной чертой программы является возможность проведения псевдофазовой реконструкции для подготовки входных данных для нейронной сети. Также есть возможность обучения нейронной сети. В приложении используется многослойный перцептрон, а нейронная сеть обучается методом обратного распространения ошибки.
В итоге можно получить прогноз на будущий период.
3.2 Архитектура приложения
Ниже представлена диаграмма классов приложения (Рисунок 3.1):
Рисунок 3.1 - Диаграмма классов
Класс Quote описан в таблице 1.
Таблица 1 - Описание класса Quote
|
Свойства и методы |
Описание |
|
Id |
уникальный идентификатор котировки |
|
Name |
название тикера |
|
url |
путь, по которому доступны данные котировок по тикеру |
|
Hurst |
значение показателя Херста |
|
tableName() |
возвращает имя таблицы, с которой работает модель |
|
rules() |
возвращает массив с параметрами валидации |
|
attributeLabels() |
возвращает массив с русскоязычными названиями свойств |
|
search($model) |
возвращает массив всех объектов этой модели |
Класс Stock описан в таблице 2.
Таблица 2 - Описание класса Stock
|
Свойства и методы |
Описание |
|
|
Id |
уникальный идентификатор тикера |
|
|
ticker_id |
внешний ключ на таблицу с тикерами |
Дата |
|
Quote |
значение котировки |
|
|
tableName() |
возвращает имя таблицы, с которой работает модель |
|
|
rules() |
возвращает массив с параметрами валидации |
|
|
attributeLabels() |
возвращает массив с русскоязычными названиями свойств |
|
|
search($model) |
возвращает массив всех объектов этой модели |
|
|
relations() |
возвращает массив с внешними связями данной модели с другими моделями |
|
|
linear_regression($x, $y) |
считает регрессию |
Класс NeuralNetwork описан в таблице 3.
Таблица 3 - Описание класса NeuralNetwork
|
Свойства и методы |
Описание |
|
NeuralNetwork($nodecount) |
конструктор нейронной сети |
|
activation($value) |
возвращает значение выходного нейрона после применения к нему функции активации |
|
Свойства и методы |
Описание |
|
addControlData($input,$output) |
добавляет данные для обучения, не для тестирования |
|
addTestData($input,$output) |
добавляет тестовые данные для обучения НС |
|
calculate($input) |
возвращает выходное значение НС для заданного входного вектора |
|
derivative_activation($value) |
реализует производную функции активации |
|
getControlDataIDs() |
возвращает идентификаторы входных векторов при тестировании |
|
getLearningRate($layer) |
возвращает коэффициент скорости обучения для определенного слоя |
|
getMomentum() |
возвращает импульс НС |
|
getRandomWeight($layer) |
- при генерации НС задает рандомные веса нейронов |
|
getTestDataIDs() |
возвращает идентификаторы входных векторов при обучении |
|
isVerbose() |
отображаются ли ошибки НС |
|
load($filename) |
по заданному пути загружает НС |
|
save($filename) |
сохраняет НС в файл |
|
setLearningRate($learningrate) |
задает коэффициент скорости обучения |
|
setMomentum($momentum) |
задает импульс НС |
|
setVerbose($is_verbose) |
задает отображение ошибок НС |
|
showWeights() |
выводит текущие веса нейронов |
|
train($maxEpochs,$maxError) |
запускает тренировочный процесс |
Класс MainController описан в таблице 4.
Таблица 4 - Описание класса MainController
|
Свойства и методы |
Описание |
|
Index() |
выводит главную страницу приложения |
|
Login() |
выводит страницу логина, а также проводит аутентификацию и авторизацию |
|
Logout() |
удаляет сессию пользователя |
Класс EParseQuotesManager описан в таблице 5.
|
Свойства и методы |
Описание |
|
UpdateDB() |
парсит котировки в БД |
Класс StockController описан в таблице 6.
Таблица 6 - Описание класса StockController
|
Свойства и методы |
Описание |
|
$layout |
ссылка на базовую разметку страницы |
|
Filters() |
возвращает массив с фильтрами доступа к контроллеру |
|
AccessRules() |
возвращает массив прав доступа |
|
Create() |
возвращает форму создания нового тикера |
|
Update($id) |
возвращает форму обновления тикера |
|
Delete($id) |
по определенному id удаляет тикер |
|
Admin() |
возвращает административную страницу управления тикерами |
|
LoadModel($id) |
по id возвращает определенную модель тикера |
|
ShowGraph($id) |
возвращает график по id тикера |
|
Hurst() |
считает показатель Херста для всех тикеров |
|
TestAnn() |
обучает НС |
Класс RSAnalyze описан в таблице 7.
Таблица 7 - Описание класса RSAnalyze
|
Свойства и методы |
Описание |
|
$quotes |
массив котировок |
|
GetLog($values) |
возвращает массив логарифмированного временного ряда |
|
GetAvgInSubperiod($n, $values) |
возвращает массив со средними значениями для каждого подпериода |
|
GetSumDevPerPeriod($avgPerPeriod, $values) |
возвращает временной ряд накопленных отклонений |
|
GetR($sumDev, $n) |
возвращает массив размахов для каждого подпериода |
|
GetS($avgPerPeriod, $values) |
возвращает массив стандартных отклонений для каждого подпериода |
|
GetRS($arrR, $arrS) |
возвращает показатель R/S |
|
GetArrN($values) |
возвращает все возможные количества элементов в подпериоде |
|
GetOptR($values) |
возвращает оптимальную временную задержку |
|
Свойства и методы |
Описание |
|
PseudoReconst($values, $m, $tau) |
проводит псевдофазовую реконструкцию, возвращает 2 массива, входных и выходных векторов |
Главное окно приложения представлено на рисунке 3.2:
Рисунок 3.2 - Главное окно приложения
Для добавления новых исторических данных необходимо зайти в меню
«Справочники» и выбрать «Компании» (Рисунок 3.3).
Рисунок 3.3 - Меню компании
Затем необходимо нажать на кнопку «Добавить компанию». Откроется форма
(Рисунок 3.4). Введите название компании и путь к текстовому файлу с
историческими данными и нажмите «Сохранить».
Рисунок 3.4 - Добавление компании
В меню «Действия» (Рисунок 3.5) доступны следующие функции:
«Обновить БД» - записывает исторические данные в базу данных
«Обновить Херста» - рассчитывает экспоненту Херста
«Обучение НС» - выполняет псевдофазовую реконструкцию и проводит обучение
нейронной сети

С историческими данными можно ознакомиться в меню «Графики» (Рисунок 3.6):
Рисунок 3.6 - Исторические данные
С прогнозами временных рядов можно ознакомиться в меню «Прогнозы»
(Рисунок 3.7):
Рисунок 3.7 - Прогнозы
Заключение
Главной целью дипломной работы являлась разработка веб-приложения для прогнозирования временных рядов методом фрактального анализа.
Для достижения этой цели были решены следующие задачи:
изучены методы фрактального анализа временных рядов;
разработана нейронная сеть для прогнозирования временных рядов, использующая на этапе формирования обучающей выборки фрактальный анализ;
разработан веб-интерфейс для взаимодействия с пользователем.
Созданное веб-приложение позволяет пользователю:
проводить R/S анализ временных рядов;
обновлять исторические данные различных тикеров;
добавлять исторические данные для новых компаний;
просматривать исторические данные;
получать прогноз следующего значения временного ряда.
Благодаря данному веб-приложению, автоматизирована работа по созданию
прогноза методом фрактального анализа. Приложение легко можно расширить
благодаря модульному строению фреймворка Yii. Дружеский интерфейс пользователя, единообразие в отображении
данных - делают информационную систему понятной и легкой для освоения даже
неопытным пользователям.
Список использованных источников
1 Граничин О.Н., Поляк Б.Т. Рандомизированные алгоритмы оценивания и оптимизации при почти произвольных помехах. М.: Наука. 2003.
2 Готовчинков И.Оценка путей совершенствования стратегий поведения на российском валютном рынке // Финансовый менеджмент, №4. 2003.
3 Мандельброт Б., Хадсон Р.. (Не)послушные рынки. Фрактальная революция в финансах. Изд.: Вильямс.2006.
4 Морозов А. Введение в теорию фракталов. Н.Новгород: ННГУ. 2004.
Пардо Р. Разработка, тестирование, оптимизация торговых систем для
биржевого трейдера. Москва: Минакс. 2002.
Пашутин С. Нелинейная динамика российского рынка: фрактальный подход к устранению хаоса.
7 Пустовит Д., Подколзина И. История биржевой торговли. СПб.: Вектор. 2009.
Петерс Э. Фрактальный анализ финансовых рынков. Применение теории Хаоса в инвестициях и экономике.
9 Ширяев В. Финансовые рынки: Нейронные сети, хаос и нелинейная динамика. М.: Либроком. 2009
Интернет энциклопедия Википедия //URL: www.ru.wikipedia.org (дата обращения: 29.04.2014)
11 Головко В.А. Нейросетевые методы обработки хаотических процессов // В книге
«Лекции по Нейроинформатике». - M.: МИФИ, 2005. - C. 43-88.
Петерс Э. Хаос и порядок на рынках капитала. Новый аналитический взгляд на циклы, цены и изменчивость рынка. - М.: Мир, 2000. - 333 с.
Волков М.В. Структура и классификация рынка ценных бумаг. Операции с ценными бумагами в деятельности банков. Управление портфелем ценных бумаг // Финансы и кредит. - 2005. - № 10 (178) - с. 31-40.
Найман Э.Л. Трейдер-инвестор. - Киев.: ВИРА-Р, 2000. - 640 с.
Хаертфельдер М. Фундаментальный и технический анализ рынка ценных бумаг. Спб.: Питер, 2005. - 352 с.
Найман Э.Л. Путь к финансовой свободе: профессиональный
подход к трейдингу и инвестициям. - М.: Альпина Бизнес-Букс, 2004. - 480 с.
17 Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические
алгоритмы и нечеткие системы. Горячая Линия-Телеком, 2008. - 452 с.
Барский А.Б. Нейронные сети: Распознавание, управление, принятие решений. Финансы и статистика, 2007 г. - 175 с.
Кесиян Г.А., Шахмеликян Т.А. Анализ и моделирование
хаотических процессов в экономике // Прикладная математика XXI века: материалы XI объединенной науч. конф. студентов и
аспирантов / под ред. Ю.В. Кольцова. Краснодар: Кубанский гос. ун-т, 2011.
Приложение А График выходов нейронной
сети по обучающей выборке для обычных акций Сбербанка
Приложение В График выходов нейронной сети по тестовой выборке для обычных акций Сбербанка