Перейти к основному содержанию
ИТарктика
УДК 338
Миронов Владимир Валерьевич, Рябов Евгений Николаевич
к.ф.-м.н., доцент, руководитель Департамента научной и проектно-инновационной деятельности ФГБОУ ВО «СыктГУ им. Питирима Сорокина»

студент ФГБОУ ВО «СыктГУ им. Питирима Сорокина»
Прогнозирование рыночных цен при помощи нейронных сетей
Аннотация:

Работа посвящена демонстрации использования нейронных сетей в рыночной торговле с использованием инструментов электронной торговли.

Ключевые слова: электронная торговля, нейронные сети, информационные технологии.

На сегодняшний день становится всё больше и больше желающих изучать рынок Forex и все, что с ним связано. Появилось гораздо больше курсов для начинающих и уже продвинутых трейдеров. Причина роста популярности рынка Forex в том, что он дает возможность получить дополнительный заработок или даже сделать это своей основной профессией, приносящей неплохой доход. Для возможности не выполнять все манипуляции вручную и облегчить работу трейдеров создаются всё больше и больше автоматизированных систем для торговли на рынке Forex.

В работе будут рассмотрены следующие задачи:

  1. Исследовать возможности и способы современной торговли;
  2. Изучить возможности автоматизации электронной торговли;
  3. Изучить возможность использования нейронных сетей для автоматизации электронной торговли;
  4. При помощи нейронных сетей разработать программу для автоматизации электронной торговли.

Электронная торговля

Интернет-биржи

Интернет биржа – это самый простой и доступный заработок в сети интернет. Предметами электронной биржевой торговли являются в основном финансовые контракты, то есть фьючерсы и опционы на валюты, фондовые индексы, процентные ставки и т.п. Основная задача интернет биржи – обеспечить возможность использования сети интернет как удобного и доступного инструмента, реально помогающего осуществлять профессиональную деятельность. В настоящее время в мире действуют самые различные системы электронной биржевой торговли. Однако все эти системы строятся, по сути, по одной и той же схеме: центральный компьютер с разветвленной сетью, обеспечивающей работу определенного количества терминалов. Любая электронная биржевая система включает в себя три главных компонента:

  1. Рабочая станция члена биржи – участника торговли (трейдера) (Trader Station) - при помощи нее брокеры участвуют в торговле, получая рыночную информацию и вводя в систему свои приказы на покупку или продажу;
  2. Линия связи (Communications Link) – средство для осуществления диалога между брокером и центральной биржей;
  3. Центральная биржевая система (Central Exchange System) – обеспечивает сведение всей рыночной информации и выполнение приказов брокеров.

Основными техническими требованиями к электронной системе являются надежность и эффективность. При разработке такой системы ставится цель – обеспечить гарантированный доступ и скорость передачи информации, которые бы фактически не уступали по своей эффективности человеческому общению. Решение этих двух задач не так просто в техническом плане, однако вполне возможно на современном уровне технологии. Функциональные возможности в плане выполнения правил заключения сделок и распространения информации обеспечиваются прикладным программным обеспечением. В настоящее время существуют различные концептуальные подходы, в рамках которых по-разному решаются вопросы о видах приказов и котировок, о продолжительности действия приказов, о принципах распределения сделок между покупателями и продавцами, об уровне сложности (изощренности) применяемой техники торговли, т.е. об использовании спрэдов, арбитража и приказов с ограничительными условиями.

Разработать прикладные программы для центральной биржевой системы, которые бы обеспечивали выполнение основных функций системы, не так уж сложно. С гораздо большими трудностями сталкиваются разработчики при решении таких задач, как уровень сложности правил заключения сделок, надежность и эффективность. Если учесть, что количество видов товаров и финансовых инструментов, которыми ведется торговля на современных товарных биржах, весьма велико, причем торговая активность по ним весьма различная; если учесть, что продолжается рост как числа участников биржевой торговли, так и количества биржевых товаров, то необходимо признать, что разработанные на сегодняшний день основные принципы электронной торговли еще далеки от совершенства. Информация, собираемая центральной системой, представляет собой очень полезную базу данных (в динамике), содержащую сведения о рыночной активности и тенденциях рынка. Это создает гораздо лучшую основу для экономического анализа, что приносит пользу как брокерам, так и самой бирже. Целостность и своего рода "честность" электронной биржи устраняет растущие опасения государственных служб, самих бирж и общественности по поводу недобросовестной торговой практики. Электронная центральная биржевая система обеспечивает расчетным палатам и их членам средства для более тщательного надзора и своевременного получения данных для контроля рисков.

Alpari MetaTrader

MetaTrader – информационно-торговая платформа, разработанная MetaQuotes Software Corp., предназначенная для организации дилингового обслуживания на рынках Forex, CFD и Futures. Это комплекс полного цикла, то есть для организации дилингового обслуживания при наличии MetaTrader4 (Рис. 1) не требуется дополнительного программного обеспечения. Серверная часть работает только на платформе семейства Windows. Клиентская часть есть в версиях для Windows, Android и iOS (iPhone).

По состоянию на август 2010 года активно используется четвёртая версия платформы и выпущена пятая. Первая, вторая и третья версии платформы не используются и не поддерживаются.

MetaTrader 4 Server – ядро системы, серверная часть. Предназначена для обработки запросов пользователей на совершение торговых операций, выставление и исполнение ордеров. Также транслирует котировки и новости, ведет протоколы и архивы. Работает в виде службы. Не имеет самостоятельного интерфейса. Производитель рекомендует организовывать выделенный сервер с платформой Windows Server, на котором кроме MetaTrader 4 Server больше ничего не запускается. Практика показывает, что параллельный запуск на этом же оборудовании любой другой программы резко снижает стабильность работы MetaTrader 4 Server. Использование каждой копии лицензируется отдельно.

jh

Рис. 1. MetaTrader 4 для PC

MetaTrader 4 Administrator предназначен для удаленного управления серверной частью в форме указания параметров настройки, настройками финансовых инструментов, баз данных и так далее. Имеет незначительные возможности операций с клиентскими счетами. Платформа – Windows Vista/XP/2000. Лицензия на использование неограниченного числа копий включена в лицензию сервера.

MetaTrader 4 Manager предназначен для обработки торговых запросов и управления счетами клиентов. Платформа – Windows Vista/XP/2000. Лицензия на использование неограниченного числа копий включена в лицензию сервера.

MetaTrader 4 Data Center представляет собой специализированный прокси-сервер, предназначенный для повышения масштабируемости и безопасности платформы, и может быть промежуточным звеном между серверной частью и клиентскими терминалами. Использование не обязательно, но становится целесообразным для локальных сетей с несколькими клиентами, позволяя минимизировать трафик котировок и их истории. Может устанавливаться на одном из рабочих мест. Так же может использоваться для уменьшения нагрузки на сервер. В этом случае рекомендуется использование на выделенном компьютере, и для клиентских терминалов он становится альтернативным сервером. Платформа – Windows Vista/XP/2000. Лицензирование не требуется.

MetaTrader 4 Client Terminal – клиентская часть, устанавливается на компьютере трейдера. Предназначена для проведения торговых операций и технического анализа в режиме реального времени. Несколько типов ордеров позволяет отдавать распоряжения на проведение операций немедленно либо с дополнительными условиями (при достижении оговоренной цены). Обеспечивается просмотр текущих новостей, трансляцию которых осуществляет серверная часть комплекса. Внутренний Си-подобный язык программирования MQL4 позволяет запрограммировать торговые стратегии, индикаторы, сигналы. Есть возможность обеспечить полностью автоматическую торговлю, когда программа-советник не только выводит изображение и сигналы, но и посылает команды на открытие/закрытие сделок [1]. Использование возможности программирования не обязательно – есть 50 базовых индикаторов, каждый из которых можно дополнительно подстраивать. Клиентский терминал обеспечивает работу с любым MetaTrader 4 Server без привязки к предустановленным адресам. Платформа – Windows Vista/XP/2000/98. Лицензирование не требуется.

MetaTrader 4 Mobile – управление торговым счётом посредством мобильных устройств, таких как сотовый телефон или портативный компьютер (мобильный трейдинг). Без лицензии возможна работа только с некоторыми серверами. Для каждого сервера используется отдельная версия программы, которая не имеет возможности сменить сервер. Платформа – Windows Pocket PC 2002/Mobile 2003. При покупке лицензии возможна работа с любым MetaTrader 4 Server без привязки к предустановленным адресам.

MetaTrader 4 для iPhone – управление торговым счётом со смартфонов на базе Apple iOS версии 4.0 и выше, поддержка iPhone, iPad и iPod Touch. Бесплатная установка из AppStore. Подключение возможно к торговым серверам только тех брокеров, которые оплатили разработчикам соответствующую услугу. Программа включает 30 технических индикаторов, все виды ордеров, звуковые сигналы (Alerts).

MetaTrader 4 для Android – управление торговым счётом со смартфонов на базе Android версии 2.1 и выше. Бесплатная установка из Google Play. Подключение возможно к торговым серверам только тех брокеров, которые оплатили разработчикам соответствующую услугу. Программа включает все виды ордеров, поддержку графиков 3 типов, 7 таймфреймов, поддержку планшетов.

Автоматизация электронной торговли

Автоматические советники работают по алгоритмам, которые создаются на основе знаний и опыта работы трейдеров всего мира. Таким образом, вы можете в любой момент пользоваться готовыми работающими схемами, которым не придется учиться в течение долгого времени. Также вы можете выбрать работающего на рынке трейдера и настроить программу так, чтобы она копировала его сделки. Не стоит, однако, думать, что машина все сделает за вас и простое копирование сделок успешных трейдеров сразу же приведет к успеху. Это ошибка, которая может обернуться проигрышем.

Торговые советники – это программы, которые производят анализ рынка по заданным вами параметрам, а торговые роботы – это программы, которые автоматически реализуют вашу текущую торговую стратегию. С их помощью вы сможете:

  • быстро создавать и отрабатывать новые стратегии;
  • сократить время нахождения за компьютером;
  • повысить скорость заключения сделок;
  • быстро производить нужные настройки валют и алгоритмов.

В автоматическом режиме можно улавливать колебания рынка буквально за несколько секунд и осуществлять куплю-продажу почти мгновенно. Человеку недоступно такое быстродействие, однако если алгоритм выбран неверно, подобная скорость может привести и к мгновенному поражению, которое будет невозможно предотвратить. В этой связи стоит тщательно подойти к выбору программного обеспечения.

Автоматические торговые системы Форекс, например, на основе MetaTrader4 или MetaTrader5, располагают встроенными торговыми советниками, торговыми роботами. Обращение с этими программами легко освоить, после чего остается только подписаться на достойные доверия торговые сигналы, чтобы по максимуму снять с себя рутинную работу и сосредоточиться на главном. К платформам семейства Meta Trader написано большое количество различных роботов и советников, цены на которые могут варьироваться от нескольких десятков долларов до десятков тысяч. Ваш выбор должен зависеть не только от стоимости программного обеспечения, но и от ваших целей на рынке.

MQL4. Язык программирования для автоматизации электронной торговли.

MetaQuotes Language 4 (MQL4) – встроенный язык программирования торговых стратегий, разработанный компанией “MetaQuotes Software Corp.” на основе своего многолетнего опыта в создании торгово-информационных платформ. Этот язык позволяет писать собственные программы-эксперты (Expert Advisors), автоматизирующие управление торговыми процессами и идеально подходящие для реализации собственных торговых стратегий. Кроме того, на MQL4 можно создавать собственные технические индикаторы (Custom Indicators), скрипты (Scripts) и библиотеки функций (Libraries).

В состав MQL4 включено большое количество функций, необходимых для анализа текущих и пришедших ранее котировок, встроены основные индикаторы и функции по управлению торговыми ордерами и контролю над ними. Для написания кода программы используется текстовый редактор экспертов MetaEditor, выделяющий цветом различные конструкции языка MQL4, что позволяет пользователю лучше ориентироваться в тексте экспертной системы.

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

Программы, написанные на MetaQuotes Language 4, имеют различные свойства и предназначение:

Советник – это механическая торговая система (МТС), имеющая привязку к определенному графику. Советник запускается на выполнение при возникновении события, которое он может обработать: события инициализации и деинициализации, событие прихода нового тика, событие от таймера, событие от изменения стакана цен, события от графика и пользовательские события. Советник может не только работать в режиме информирования о возможности совершить сделку, но и автоматически совершать сделки на торговом счете, направляя их прямо на торговый сервер. Советники хранятся в директории “каталог_терминала\MQL4\Experts”.

Пользовательский индикатор – технический индикатор, самостоятельно написанный пользователем в дополнение к индикаторам, уже интегрированным в клиентский терминал. Пользовательские индикаторы, также как и встроенные, не могут автоматически торговать и предназначены только для реализации аналитических функций. Пользовательские индикаторы хранятся в директории “каталог_терминала\MQL4\Indicators”.

Скрипт – программа, предназначенная для одноразового выполнения каких-либо действий. В отличие от экспертов, скрипты не обрабатывают никаких событий, кроме события запуска (для этого в скрипте должна быть функция-обработчик OnStart). Скрипты хранятся в директории “каталог_терминала\MQL4\Scripts”.

Библиотека – библиотека пользовательских функций, предназначенная для хранения и распространения часто используемых блоков пользовательских программ. Библиотеки не могут самостоятельно запускаться на выполнение. Библиотеки хранятся в директории “каталог_терминала\MQL4\Libraries”.

Включаемый файл – исходный текст часто используемых блоков пользовательских программ. Такие файлы могут включаться в исходные тексты экспертов, скриптов, пользовательских индикаторов и библиотек на этапе компиляции. Использование включаемых файлов более предпочтительно, чем использование библиотек, из-за дополнительных накладных расходов при вызове библиотечных функций.

Включаемые файлы могут находиться в той же директории, что и исходный файл, в этом случае используется директива #include с двойными кавычками. Другое место хранения включаемых файлов – в директории “каталог_терминала\MQL4\Include”, в этом случае используется директива #include с угловыми скобками.

Нейронные сети. Основные понятия, принципы.

Структура нейрона. Принцип работы нейрона.

Искусственный нейрон является аналогом биологического нейрона и состоит из следующих частей (Рис. 2):

  1. Набор синапсов или связей, каждая из которых имеет собственный вес. То есть сигнал xj на входе синапса j, связанного с k–ым нейроном, умножается на вес xkj. Следует обратить особое внимание на порядок индексов. Первый относится к рассматриваемому нейрону, а второй к синапсу, с которым связан данный вес. В отличие от головного мозга синаптический вес может иметь и положительные, и отрицательные значения.
  2. Сумматор. Его роль – складывать взвешенные значения синапсов. Эта операция обычно описывается как линейная комбинация.
  3. Функция активации или функция сжатия. Служит для ограничения выходного сигнала. Обычно её множество значений лежит в интервале [0;1] или [-1;1].

Порог. В некоторые модели нейрона может быть включена данная величина, отражающая увеличение или уменьшение входного сигнала.

rt

Рис. 3. Аффинное преобразование, вызванное наличием порога

Таким образом, потенциал активации изменяется в зависимости от значения порога так, как показано на рисунке 3.

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

Архитектура нейронных сетей

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

  1. Однослойные сети прямого распространения (Рис. 4). У такой сети существует входной слой, информация от которого передается на выходной слой нейронов, но не наоборот. При подсчете числа слоёв мы не учитываем узлы источника, т.к. они не выполняют вычислений0=Рис. 4. Однослойные сети прямого распространения
  2. Многослойные сети прямого распространения (Рис. 5). Этот класс характеризуется наличием скрытых слоёв со скрытыми нейронами, назначение которых – посредничество между входным и выходным слоями. Нейронная сеть называется полносвязной, если все нейроны каждого слоя соединены со всеми узлами смежных слоёв. В противном случае сеть неполносвязная. лгор

    Рис. 5. Многослойные сети прямого распространения

  3. Рекуррентные сети (Рис. 6). Рекуррентная сеть отличается от первых двух наличием хотя бы одной обратной связи. Например, рекуррентная сеть может состоять из одного слоя нейронов, каждый из которых связан с остальными нейронами в слое. Обратная сеть подразумевает наличие операторов единичной задержки, что приводит к нелинейному динамичному поведению.ор

    Обучение нейронных сетей

    Нейронные сети можно разбить на три типа по характеру обучения:

  4. Обучение с учителем. Один из способов обучения, принцип которого следующий: используя определенные ответы, мы настраиваем сеть так, чтобы получить уже известные нам ответы. На основе этих действий необходимо построить алгоритм, способный для любого объекта выдать достаточно точный ответ.
  5. Обучение без учителя. Такие сети называются самоорганизующимися, т.е. когда сеть учится решать поставленную задачу спонтанно, без вмешательства учителя. Как правило, это пригодно для задач, в которых известно описание множества объектов и требуется обнаружить некоторые взаимосвязи и закономерности. Обучение без учителя обычно противопоставляется обучению с учителем.
  6. Обучение с поддержкой. Этот тип обучения является частным случаем обучения с учителем, но в этом случае сеть взаимодействует не с учителем, а с некоторой средой. Также нужно иметь в виду, что правила подкрепления базируются на неявных учителях, поэтому этот тип можно также отнести к обучению без учителя.
  7. Временные ряды. Прогнозирование временных рядов. Временной ряд (или ряд динамики) – собранный в разные моменты времени статистический материал о значении каких-либо параметров (в простейшем случае одного) исследуемого процесса. Каждая единица статистического материала называется измерением или отсчётом, также допустимо называть его уровнем на указанный с ним момент времени. Во временном ряде для каждого отсчёта должно быть указано время измерения или номер измерения по порядку. Временной ряд существенно отличается от простой выборки данных, так как при анализе учитывается взаимосвязь измерений со временем, а не только статистическое разнообразие и статистические характеристики выборки.
  8. Примеры временных рядов: динамика курса валюты за некоторый период, ежемесячная прибыль предприятия за год, статистика по ежедневным продажам какого-либо товара за месяц и т.д. Каждый уровень временного ряда формируется под воздействием большого числа факторов, которые условно можно подразделить на три группы:

  9. факторы, формирующие тенденцию ряда (например, инфляция влияет на увеличение размера средней заработной платы);
  10. факторы, формирующие циклические колебания ряда (например, уровень безработицы в курортных городах в зимний период выше по сравнению с летним периодом);
  11. случайные факторы.
  12. Большинство временных рядов экономических показателей имеют тенденцию, характеризующую совокупное долговременное воздействие множества факторов на динамику изучаемого показателя. Все эти факторы, взятые в отдельности, могут оказывать разнонаправленное воздействие на исследуемый показатель. Однако в совокупности они формируют его возрастающую или убывающую тенденцию. На рисунке 7 показан гипотетический временной ряд, содержащий возрастающую тенденцию.

    рпТакже изучаемый показатель может быть подвержен циклическим колебаниям. Эти колебания могут носить сезонный характер, поскольку экономическая деятельность ряда отраслей экономики зависит от времени года (например, цены на сельскохозяйственную продукцию в летний период выше, чем в зимний; уровень безработицы в курортных городах в зимний период выше по сравнению с летним периодом). При наличии больших массивов данных за длительные промежутки времени можно выявить циклические колебания, связанные с общей динамикой конъюнктуры рынка. На рисунке 8 представлен гипотетический временной ряд, содержащий только сезонную компоненту.

    орпНекоторые временные ряды не содержат тенденции и циклической компоненты, а каждый следующий их уровень образуется как сумма среднего уровня ряда и некоторой (положительной или отрицательной) случайной компоненты. Пример ряда, содержащего только случайную компоненту, приведен на рисунке 9.лгр

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

    В большинстве случаев фактический уровень временного ряда можно представить как сумму или произведение трендовой, циклической и случайной компонент. Модель, в которой временной ряд представлен как сумма перечисленных компонент, называется аддитивной моделью временного ряда. Модель, в которой временной ряд представлен как произведение перечисленных компонент, называется мультипликативной моделью временного ряда. Основная задача эконометрического исследования отдельного временного ряда – выявление и придание количественного выражения каждой из перечисленных выше компонент с тем, чтобы использовать полученную информацию для прогнозирования будущих значений ряда или при построении моделей взаимосвязи двух и более временных рядов.

    Реализация торгового робота

    В качестве входов и выходов нейросети не следует выбирать сами значения котировок C(t). Действительно значимыми для предсказаний являются изменения котировок. Поскольку эти изменения, как правило, гораздо меньше по амплитуде, чем сами котировки, между последовательными значениями курсов имеется большая корреляция – наиболее вероятное значение курса в следующий момент равно его предыдущему значению: C(t+1)=C(t)+delta(C)=C(t).

    Между тем, для повышения качества обучения следует стремиться к статистической независимости входов, то есть к отсутствию подобных корреляций. Поэтому в качестве входных переменных логично выбирать наиболее статистически независимые величины, например, изменения котировок delta(С) или логарифм относительного приращения ln(C(t)/C(t+1)).

    Данные очень удобно можно получить стандартными средствами MetaTrader: Сервис -> Архив котировок -> Экспорт.

    В результате получаем файл в формате *.csv, который является первичным сырьем для подготовки данных. Для преобразования полученного файла в удобный для работы файл *.xls нужно произвести импорт данных из файла *.csv. Для этого в Excel нужно выполнить следующие действия:

    Данные -> Импорт внешних данных -> Импортировать данные и указать подготовленный первичный файл. В мастере импорта все необходимые действия выполняются в 3 шага (Рис. 10-12):njh

    На 3 шаге необходимо поменять разделитель целой и дробной части на точку, делается это при нажатии кнопки Подробнее…

    ANFIS Matlab

    ANFIS – это аббревиатура Adaptive-Network-Based Fuzzy Inference System – адаптивная сеть нечеткого вывода. Она была предложена Янгом (Jang) в начале 90-х годов. ANFIS является одним из первых вариантов гибридных нейро-нечетких сетей – нейронной сети прямого распространения сигнала особого типа. Архитектура нейро-нечеткой сети изоморфна нечеткой базе знаний. В нейро-нечетких сетях используются дифференцируемые реализации треугольных норм (умножение и вероятностное ИЛИ), а также гладкие функции принадлежности. Это позволяет применять для настройки нейро-нечетких сетей быстрые алгоритмы обучения нейронных сетей, основанные на методе обратного распространения ошибки. Ниже описываются архитектура и правила функционирования каждого слоя ANFIS-сети.

    ANFIS реализует систему нечеткого вывода Сугено (Sugeno) в виде пятислойной нейронной сети прямого распространения сигнала. Назначение слоев следующее:

  13. первый слой – термы входных переменных;
  14. второй слой – антецеденты (посылки) нечетких правил;
  15. Входы сети в отдельный слой не выделяются. На рисунке 13 изображена ANFIS-сеть с двумя входными переменными (x1 и x2) и четырьмя нечеткими правилами. Для лингвистической оценки входной переменной x1 используется 3 терма, для переменной x2 - 2 терма.

  16. третий слой – нормализация степеней выполнения правил;
  17. четвертый слой – заключения правил;
  18. пятый слой – агрегирование результата, полученного по различным правилам.e6

    Сеть работает следующим образом:

    Слой 1. Каждый узел первого слоя представляет один терм с колокообразной функцией принадлежности. Входы сети соединены только со своими термами. Количество узлов первого слоя равно сумме мощностей терм-множеств входных переменных.

    Слой 2. Количество узлов второго слоя равно m. Каждый узел этого слоя соответствует одному нечеткому правилу. Узел второго слоя соединен с теми узлами первого слоя, которые формируют антецеденты соответствующего правила. Следовательно, каждый узел второго слоя может принимать от 1 до n входных сигналов. Выходом узла является степень выполнения правила, которая рассчитывается как произведение входных сигналов.

    Слой 3. Количество узлов третьего слоя также равно m. Каждый узел этого слоя рассчитывает относительную степень выполнения нечеткого правила.

    Слой 4. Количество узлов четвертого слоя также равно m. Каждый узел соединен с одним узлом третьего слоя, а также со всеми входами сети (на рисунке 13 связи с входами не показаны).

    Слой 5. Единственный узел этого слоя суммирует вклады всех правил.

    Типовые процедуры обучения нейронных сетей могут быть применены для настройки ANFIS-сети, так как в ней используются только дифференцируемые функции. Обычно применяется комбинация градиентного спуска в виде алгоритма обратного распространения ошибки и метода наименьших квадратов. Алгоритм обратного распространения ошибки настраивает параметры антецедентов правил, т.е. функций принадлежности. Методом наименьших квадратов оцениваются коэффициенты заключений правил, так как они линейно связаны с выходом сети. Каждая итерация процедуры настройки выполняется в два этапа. На первом этапе на входы подается обучающая выборка, и по невязке между желаемым и действительным поведением сети итерационным методом наименьших квадратов находятся оптимальные параметры узлов четвертого слоя. На втором этапе остаточная невязка передается с выхода сети на входы, и методом обратного распространения ошибки модифицируются параметры узлов первого слоя. При этом найденные на первом этапе коэффициенты заключений правил не изменяются. Итерационная процедура настройки продолжается, пока невязка превышает заранее установленное значение.

    Эксперимент

    Из командной строки по команде anfisedit запускаем пакет ANFIS. Редактор (Рис. 14) состоит из четырех панелек: для данных (Load data), для генерации сети (Generate FIS), для тренировки (Train FIS) и для ее тестирования (Test FIS). Верхняя панель предназначена для просмотра структуры полученной нейросети (ANFIS Info).

    Для начала работы загружаем данные, подготовленные на предыдущих этапах. Для этого нажимаем кнопку Load Data и указываем файл с данными выборки. После этого создаем нейросеть нажатием кнопки Generate FIS.vj

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

    Лингвистическая переменная – в теории нечётких множеств переменная, которая может принимать значения фраз из естественного или искусственного языка. Фразы, значение которых принимает переменная, в свою очередь являются именами нечетких переменных и описываются нечетким множеством, например, множество «нормальная температура тела» может быть задано дискретно в следующем виде (Рис. 16):df

    Для обучения нейросетей в пакете AnfisEdit предусмотрено 2 алгоритма обучения: обратного распространения и гибридный. При гибридном способе обучения сеть обучается буквально за два-три прохода. На тренировочной выборке (70 значений) после обучения прогноз сети отличается от реального на несколько пунктов (Рис. 17).

    kjh

    В качестве данных вне выборки были взяты следующие 10 дней после данных внутри выборки. На данных вне выборки среднеквадратичная ошибка составила 32 пункта (Рис. 18).

    Результатом нашей работы является многослойная гибридная нейронная сеть (Рис. 19), которая способна прогнозировать абсолютные значения цен на небольшое будущее.kjkjh

    Большим плюсом пакета MatLab является его интегрируемость с другими программами, причем существует множество вариантов его интеграции: DDE, com-объекты, dll. Таким образом, можно не создавать инструмент с нуля, а воспользоваться готовым программным решением для работы с нейронными сетями и генетическими алгоритмами. Затем, после получения стабильных результатов прогнозирования, можно будет интегрировать полученную нейросеть в программу MetaTrader через dll.

     

    Взаимодействие MATLAB и MetaTrader

    Математический пакет MATLAB предоставляет возможность взаимодействия с внешними приложениями, чем заслужил положительную оценку пользователей за «гибкость» создания сложных вычислительных систем. Я рекомендую следующий способ взаимодействия – использование виртуальной рабочей машины MATLAB Engine. Этот способ гарантирует совместимость со всем пакетом MATLAB.

    Многие избегают данного способа из-за скорости работы. Основная задержка происходит из-за вызова библиотек, которые загружаются в адресное пространство процесса (MetaTrader 4).

    Почему я рекомендую данный способ:

  19. Самый надежный и независимый от версии MATLAB способ. Можно поменять версию MATLAB, а на индикаторы и советники это не повлияет.
  20. Быстрый способ разработки. Нет необходимости в отладчиках, необходимо лишь написать «dll-обертку».
  21. Общая среда для нескольких индикаторов и советников.
  22. Процесс интеграции проходит в три этапа:

  23. Разработка m-приложения в MATLAB, реализующего логику нашего советника;
  24. Разработка обертки, для связи MATLAB и MetaTrader;
  25. Создание MQL приложения.
  26. Первый этап уже проделан выше, перейдем сразу ко второму.

    DLL должна удовлетворять следующим условиям:

  27. Иметь функции для сбора мусора и очистки памяти после работы.
  28. По возможности поддерживать работу в несколько потоков.
  29. Функциями DLL обертки являются API-интерфейс MATLAB Engine и функции стандартной библиотеки ввода/вывода С++.

    API-интерфейс MATLAB Engine содержит всего восемь функций:

  30. Engine *pEng = engOpen(NULL) – функция вызова рабочего стола MATLAB, параметр всегда NULL, возвращает указатель на дескриптор рабочего стола.
  31. int exitCode = engClose(Engine *pEng) – функция закрытия рабочего стола, pEng указатель на дескриптор рабочего стола, возвращает число «пользователей» стола MATLAB.
  32. mxArray *mxVector = mxCreateDoubleMatrix(int m, int n, int ComplexFlag) – создает матрицу рабочего стола MATLAB, возвращает указатель на нее. Функция нужна для создания переменной совместимой с MATLAB. Обычные массивы данных или простые типы данных в MATLAB отправлять нельзя:
  33. mxArray *mxVector – указатель на переменную матрицу;
  34. int m – кол-во рядов;
  35. int n – кол-во колонок;
  36. ComplexFlag – тип комплексного числа, всегда mxREAL для правильной работы с MetaTrader4.
  37. mxDestroyArray(mxArray *mxVector) – функция уничтожает матрицу MATLAB, необходима для очистки памяти.
  38. int e = engPutVariable( Engine *pEng, char *Name, mxArray *mxVector) – функция отправки переменной в рабочий стол:
  39. Engine *pEng – указатель на “дескриптор” рабочего стола;
  40. char *Name – имя переменной в столе MATLAB, тип char.
  41. mxArray *mxVector = engGetVariable(Engine *pEng, char *Name) – функция получения переменной из рабочего стола:
  42. mxArray *mxVector – указатель на переменную матрицу;
  43. Engine *pEng – указатель на дескриптор рабочего стола;
  44. char *Name – имя переменной в столе MATLAB, тип char.
  45. double *p = mxGetPr(mxArray *mxVector) – функция получает указатель на массив значений, используется для копирования данных совместно с memcpy(…).
  46. int = engEvalString(Engine *pEng, char *Command) – функция отправки команды рабочему столу. Команда в строке Command будет выполнена рабочим столом MATLAB:
  47. Engine *pEng – указатель на дескриптор рабочего стола;
  48. char *Command – команда для MATLAB, строка тип char.
  49. #import "test.dll"

    void ViewAns ();

    bool TestDll ();

    bool Filter(double& nInVector[], int nSizeVector, double nSizeWind, double dAmplit);

    void MakeBuff (int nSize);

    void DestrBuff ();

     

    После сборки проекта, необходимо разместить файлы:

    *.dll и *.m – файлы библиотеки и m-функции в каталог ..\MetaTrader\experts\libraries. *.mql располагается в обычном месте, индикатор – в папке indicators, советник – experts, скрипт – в папке scripts.

     

    Работа с MetaTrader

    Для того чтобы начать торговать, необходимо произвести следующие действия:

  50. Скачать программу Alpari MetaTrader – http://www.alpari.ru/ru/platforms/#tab=pc&slide=metatrader4;
  51. Открыть личный счет – https://www.alpari.ru/ru/registration/?account=standard.mt4;
  52. Запустить программу и выполнить вход по данным личного счета.
  53. Рассмотрим подробнее процедуру регистрации.

    Процедура регистрации проходит в 2 этапа.

    На 1 этапе (Рис. 20) необходимо заполнить персональные и контактные данные, а также валюту счета. На второй странице (Рис. 21) необходимо ввести данные документа, удостоверяющего личность, так же указать данные о планируемых инвестициях. Затем необходимо ввести код, который придем вам на ваш почтовый ящик.

    Нам потребуется только одна функция из стандартной библиотеки языка С: void *pIn = memcpy (void *pIn, void *pOut, int nSizeByte) – функция копирования (клонирования) переменной (массива) pOut в pIn переменную размером nSizeByte байт.

    Для того чтобы MetaTrader мог использовать Matlab, необходимо написать функции-переходники. Функция, которая будет вызвана из MetaTrader4, должна быть __stdcall.

    bool __stdcall Funcion (<тип> <имя>) {

    //……

    }

     

    Также нужно создать файл с расширением .def. Это текстовый файл, описывающий имя библиотеки и имена экспортных функций.

    Пример файла .def:

    LIBRARY Dll

    EXPORTS

    FunctionA

    FunctionB

     

    Скелет DLL выглядит следующим образом:

    #include <windows.h>#include <memory.h>#include "engine.h"

    //---------------------------------------------------------------------------

    extern "C" __declspec(dllexport)<тип_переменной>__stdcall Funcion(<тип><имя>);

    //---------------------------------------------------------------------------

    int WINAPI DllEntryPoint(HINSTANCE hinst,unsigned long reason,void *lpReserved){

       /*    ** причина вызова DLL    */

       switch(reason)

         {

          case DLL_PROCESS_ATTACH:

             /* ** DLL загружена */

             break;

          case DLL_PROCESS_DETACH:

             /* **DLL выгружена */

             break;

         }

       return TRUE;

      }

    //---------------------------------------------------------------------------

    bool __stdcall Function(<тип><имя>)

      {

       ……

      }

    //---------------------------------------------------------------------------

     

    Перейдем к MQL. Нам необходимо импортировать созданную библиотеку и объявить необходимые функции. Пример MQL файла:

    #import "test.dll"

    void ViewAns ();

    bool TestDll ();

    bool Filter(double& nInVector[], int nSizeVector, double nSizeWind, double dAmplit);

    void MakeBuff (int nSize);

    void DestrBuff ();

     

    После сборки проекта, необходимо разместить файлы:

    *.dll и *.m – файлы библиотеки и m-функции в каталог ..\MetaTrader\experts\libraries. *.mql располагается в обычном месте, индикатор – в папке indicators, советник – experts, скрипт – в папке scripts.

     

    Работа с MetaTrader

    Для того чтобы начать торговать, необходимо произвести следующие действия:

  54. Скачать программу Alpari MetaTrader – http://www.alpari.ru/ru/platforms/#tab=pc&slide=metatrader4;
  55. Открыть личный счет – https://www.alpari.ru/ru/registration/?account=standard.mt4;
  56. Запустить программу и выполнить вход по данным личного счета.
  57. Процедура регистрации проходит в 2 этапа.

    На 1 этапе (Рис. 20) необходимо заполнить персональные и контактные данные, а также валюту счета. На второй странице (Рис. 21) необходимо ввести данные документа, удостоверяющего личность, так же указать данные о планируемых инвестициях. Затем необходимо ввести код, который придем вам на ваш почтовый ящик.

    Рассмотрим подробнее процедуру регистрации.gn

    Рис. 21. Второй этап регистрации

    На этом процесс регистрации окончен (Рис. 22).fgbНа панели «Обзор рынка» (Рис. 23) отображаются изменения цен валют по отношению одна к другой на данный момент времени. Также при помощи этой панели можно выбрать желаемое отношение для того, чтобы начать торговать.gjНа панели «Навигатор» (Рис. 24) отображается вся необходимая информация о программе: пользователи, советники, индикаторы, скрипты.fbМодельный советник показан на рисунке 24 (выше), его название – Sample. Также снизу есть панели состояния счета и новостей (Рис. 25).fftyhПосле соединения советника и выбранного отношения торговли, график выглядит следующим образом (Рис. 26).fnВ верхнем правом углу графика отображается имя советника, который ведет торговлю. Спустя неделю, советник принес прибыли со 100RUR до 263.43RUR (Рис. 27).

    h

    Заключение

    В заключение отметим, что нейронные сети являются мощным инструментом для работы на финансовых рынках.

    Основные проблемы, возникающие при работе с этой технологией – правильные данные, этот этап играет важную роль для прогнозирования данных.Для того чтобы освоить нейросети нужно очень много экспериментировать. Если инвесторы используют этот инструмент, то и рядовые трейдеры могут попытаться добиться успеха именно с помощью обученных нейросетей, Это показывает, что наш советник вполне успешно справился с поставленной задачей.

Список литературы

  1. Хайкин С. Нейронные сети. Полный курс: 2-е издание. Пер. с англ. – М.: Издательский дом «Вильямс», 2006 – 42-49 с.
  2. Мартынов Н.Н. Matlab 5.х вычисления, визуализация, программирование. – Издательство КУДИЦ-ОБРАЗ, 2000.
  3. Нечеткая логика [Электронный ресурс] // Wikipedia. URL: 
  4. Асаи К., Ватада Д., Иваи С. Прикладные нечеткие системы: Пер. с япон. / Под редакцией Тэрано Т., Асаи К., Сугэно М. – М.: Мир, 1993. 368 с.
  5. Андерсон Т. Статистический анализ временных рядов. – М.: Мир, 1976. 755 с.
  6. Розенблатт Ф. Принципы нейродинамики. Перцептрон и теория механизмов мозга. – М.: Мир, 1965. 480 с.

References

  1. Chaikin S. Neural networks. The full course: 2nd edition. Transl. from English. – M.: Publishing House "Williams", 2006. 42-49 pp.
  2. Martynov N. Matlab 5.x computation, visualization, programming. – Publishing Kudits-WAY, 2000.
  3. Fuzzy logic [electronic resource] // Wikipedia. URL: 
  4. Asai K., Vatada D., Ivai S. Application of fuzzy. – Publisher: Mir, 1993.
  5. Anderson T. Statistical analysis of time series. M.: Mir, 1976. 755 pp.
  6. Rosenblatt F. Principles of neurodynamics. Perceptron and the theory of brain mechanisms. – M.: Mir, 1965. 480 pp.