Объектно-ориентированная нейросеть как универсальная предсказательная система

 

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

Если говорить в общем, программа Timing Solution основана на двух базовых концепциях. Первая относится к ULE, или Universal Language of Events (Универсальный Событийный Язык). Вторую мы намерены подробно обсудить теперь: это Объектно-Ориентируемая Нейросеть. Оба этих блока программы изначально разрабатывались для совместной работы. ULE в этой паре играет роль основания, базы. Данный модуль представляет собой ни что иное, как особый способ систематизирования и записи списков различных событий. В будущем, поскольку пользователи программы постоянно предлагают все новые типы событий для анализа, эта часть программы продолжит свое развитие. Блок разрабатывался таким образом, чтобы событийная основа из ULEлегко читалась программой, и ее записи могли бы служить в качестве входов для нашей особым образом устроенной Нейросети. Таким образом, в дуэте из ULE и OONN, нейросетевой блок выполняет роль ведомого, поскольку его работа невозможна без записей ULE.

Эта простая схема объясняет принципы работы программы:

Она означает, что мы анализируем некоторый процесс, главным образом, его историю, определяем главные событийные пункты, и затем записываем их, используя универсальный язык ULE. После этого помещаем списки этих событий в некоторый аналитический модуль (в данном случае, это будет Neural Net). Модуль (то есть, Neural Net) делает свою работу и выносит заключения. Основываясь на этих заключениях, мы можем сконструировать прогностическую модель, чтобы попытаться с ее помощью заглянуть в будущее. Эта простая схема позволяет решать широкое разнообразие различных проблем, возникающих во всякой работе по составлению прогнозов.

 

Нейросеть в первом приближении: модели на основе японских подсвечников

Давайте создадим простейшую прогностическую модель с помощью модуля Neural Net. Основана эта модель будет на методе японских подсвечников. 

Сделать это легко. Загрузите ценовые данные на ваш выбор (я остановился на нефтяных котировках с 1995 до май 2004):

Ценовая история разделена здесь на две части: на синюю и красную области. Данное разделение вызвано необходимостью, поскольку мы должны иметь некоторый массив данных, чтобы обучить нашу нейросеть. В обучение включена и оптимизация модели (производится на интервале оптимизации). Иногда в литературе обучение нейросети называют "процессом обучения", потому что Neural Net изучает существующие отношения между объектами в пределах данного интервала; отсюда, интервал оптимизации можно назвать "интервалом обучения". По сути, это лишь два разных наименования для одного и того же процесса.

Таким образом, синяя область это одновременно и обучение, и оптимизация, и интервал обучения для данной модели. Красная область - это нечто совсем другое. Ее можно назвать "тестируемым интервалом". Хотя обе эти части диаграммы имеют общую ценовую историю, их ценовые данные совершенно независимы друг от друга и никоим образом не имеют никаких точек соприкосновения. Это момент чрезвычайно важен - ведь в противном случае, мы могли бы всегда иметь очень хорошую корреляцию ценовых данных с прогностической линией из-за "утечек" данных. Это было бы то же самое, если бы кто-то пробовал "угадать" значение неких чисел, фактически имея перед глазами файл с этими значениями... Образно говоря, мы должны принудительно "завязать глаза" нашей модели, чтобы она не смогла "подсмотреть" туда, где содержатся ценовые данные, на которых строгий экзаменатор будет оценивать качество ее работы. Тестируемый интервал должен принадлежать тем же самым ценовым данным и брать свое начало точно в том пункте, где заканчивается интервал обучения. Линию разделения между интервалами обучения и тестирования называется границей обучающего интервала (Learning Border Cursor, или сокращенно LBC).

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

Тестируемый интервал является "точкой истины" для модели, поскольку показывает нам как эта модель фактически работает. И лишь в случае, когда результаты, полученные на тестируемом интервале, нас удовлетворяют, мы можем применить эту модель к прогностической работе.

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

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

Перед нами графическая иллюстрация идеи, что ценовой бар (который представляет собой некое соотношение между значениями High, Low, Open, Close) может иметь воздействие на будущие ценовые движения.  Иначе говоря, потенциал ценового бара до некоторой степени определяет и его будущее.

Теперь посмотрим, как эта простая идея ("структура конкретного ценового бара имеет воздействие на будущие цены") описывается посредством языка Neural Net:

 Neural Net Inputs   : Если поделить только что приведенную фразу на две половины, то первая ее часть  (структура ценового бара (она представляет отношения между ценовыми значениями High, Low, Open и Close ...)  будет описывать Входы в Neural Net. Это понятие отмечено значком (некая информация, которая входит в систему, чтобы быть проанализированной). Это можно назвать событийной основой, или иначе, информационно-событийным рядом, с явлениями которого мы знакомы; последнее является той причиной, почему мы можем использовать данный событийный ряд в прогнозе. Важно, что его можно выразить через Universal Language of Events (ULE), поскольку именно это блок делает понятной эту информацию для нейросети.  

 Neural Net Outputs   Вторая часть предложения (... имеет воздействие на будущие цены) имеет прямое отношение к тому, что мы называем выходом нейросети. Данное понятие отмечено значком  (некоторое заключение, являющееся конечным продуктом прогностической системы, или иначе, ее выходом). Это и есть наш прогноз, тот итог, к которому мы стремимся.

Как видим, мы имеем здесь дело с двумя видами информационных потоков: 1) поток, который входит в систему (он всегда принадлежит внешнему миру и обеспечивается внешним миром); и 2) информационный поток, которые является конечным продуктом системы, ее выходом (это относиться к заключениям, сделанным Neural Net относительно процессов во внешнем мире). Нейронная сеть - универсальный инструмент (я бы сказал  - невероятный инструмент), она позволяет пользователю выявлять взаимосвязи между этими двумя информационными полями; и можно сказать, что нейросеть это средняя часть того самого предложения: ( "структура конкретного ценового бара имеет воздействие на будущие цены"). В качестве входов в нее мы можем использовать информационную палитру, выраженную в языке Universal Language of Events: здесь и астрономические/астрологические явления, и неподвижные циклы, и модели авторегрессии, и фундаментальные параметры и т.д. Все, что действительно может улучшить способность Timing Solution к прогнозированию уже включено или будет добавлено к программе.  

Давайте посмотрим, как это работает.

Нажмите на эту кнопку :. Откроется вот такое окно :


 


Две кнопки, отмеченные на рисунке стрелками, служат инструментами для определения, что ляжет в основу Входов и Выходов.  

Нажмите на кнопку, которая соответствует "Выходам":. Откроется вот такое окно:


Здесь вы можете определиться с тем событийным рядом, поведение которого Вы хотели бы предсказать. В нашем примере это ценовые события. Программа позволяет создавать модели, которые спрогнозируют поведение непосредственно ценового значения Close, или же таких популярных индикаторов, как MACD, RSI, Volatility. В нашем примере, мы будем пробовать создать прогноз на один осциллятор, который рассчитан как: (Close - MA (Close, Period=10)) / MA (Close, Period=10).

В данной формуле MA это индикатор Moving Average. Мы выбираем этот осциллятор, потому что он позволяет оптимизировать работу с относительными изменениями цен. Это особенно важно, когда мы имеем данные с длительной ценовой историей.

Выбрав эти параметры (указанные цифрой "1"), нажмите на кнопку (2) "Try" и затем щелкните OK (3). Осциллятор создан:


Итак, с выходами мы определились. (Помните, наша цель - поиск "вероятных изменений цен"). Теперь давайте определимся с кругом событий, которые будут использоваться для прогнозов, или со Входами. Нажмите на кнопку. Откроется вот такое окно:


Здесь можно увидеть наборы клавиш, соответствующих различным категориям событий, которыми можно оперировать при создании прогностических моделей. Все это относится к стандартным блокам ULE (Universal Language of Events).

Далее мы можем действовать в двух направлениях:

Для тех, кто выбирает второе направление, имеется три главных группы событийных явлений:

В нашем примере, мы более заинтересованы в "Price Bar Proportions". Набор необходимых параметров для работы с этим явлением представлен в этом окне:



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


После 4.000-5.000 шагов (это занимает примерно минуту), нажмите "Stop". Взглянем на главный экран:

Это - информационная панель Neural Net.  Верхняя часть окна представляет ценовую диаграмму. Нижнее окно показывает выбранную часть верхней диаграммы более детально (кликните мышкой, и растяните мышью ту часть диаграммы, которую Вы хотели бы увеличить). Обычно, увеличивается область вокруг Learning Border Cursor (LBC):

Черная кривая линия представляет выбранный нами Ценовой Осциллятор (поведение которого мы хотим предсказать). Иногда мы называем это "целью". Красная кривая линия - линия прогноза, рассчитанная Neural Net.

Часть линии в красной области диаграммы - это уже реальный прогноз. Мы не используем ценовые бары красного интервала для обучения Neural Net, таким образом, любые "информационные утечки" исключены. LBC устанавливает границу между прошлым и будущим, Neural Net не ведомо ничего из того, что имеется после LBC. Это один из самыз важных принципов процедуры обучения.

Взглянув на диаграмму, мы можем сказать, что эта модель дает довольно неплохие результаты для нескольких пунктов после LBC (эта область отмечена желтым овалом). Черная (цена) и красная (прогноз) линии хорошо коррелируются - именно этого мы и добивались.

Данная специфическая модель дает прогноз только на неделю вперед, и это - ее максимум. Это является следствием того, что при ее создании  в параметрах было установлено следующее:

. Итак, программа делает прогноз на неделю вперед после LBC. Эту зону называют:

 Горизонт Предсказания. Эта зона имеет на диаграмме дополнительную подкраску цветом:

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

 Цвета линий. В среднем окошке, справа от этой строчки : вы увидите кнопку с "цветовой палитрой". Здесь можно определиться с цветовыми настройками линий, используемыми в данной диаграмме:

 Определите цвета  вы можете сами определиться с цветовой палитрой линий на диаграмме, кликнув на эту самую кнопку:

В данном окне просто активируйте соответствующие кнопки:


NN Results - это линия прогноза нейросети.

Linear model - линейная модель, ее показания можно дополнительно учитывать в прогнозе (но это не нейросеть).

Target - это цель, то, поведение цего мы прогнозируем (то, что мы задавали в Step 1).


Подкрасить их разными цветами особенно важно, если вы используете в работе несколько различных индикаторов, например RSI +Volatility (то есть у нас здесь две цели для прогнозирования):

 


Neural Net: знакомимся ближе

Когда модель Neural Net создана, и ее работа принесла приемлемые результаты, Вы можете сохранить эту модель. Сохранить модель можно через эту кнопку:


Позже вы сможете загружать эту модель всякий раз, как это потребуется. Для этого нажмите на кнопку:

Появится окно со списком всех предварительно сохраненных вами моделей. Выберите любую из них для работы.


Кнопка позволит Вам активировать/деактивировать Рабочую Панель Neural Net:



В работе с моделями Neural Net, результат обучения можно вывести на основной экран. Для этого:

1)  Нажмите на эту кнопку: . Линия прогноза, произведенная этой моделью Neural Net появится в основном Окне программы.

2)  Потом нажмите на эту кнопку, чтобы деактивировать Рабочую Панель NN и сделать видимым Главное Окно.

 

Некоторые подробности

Теперь приступим к описанию других кполезных особенностей, доступных через окно Neural Net:

 запуск модуля для бэктестинга (Back Testing).  Главная цель этого модуля состоит в том, чтобы обеспечить процедуру поиска лучшей модели для выбранных ценовых данных.

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

Кнопки, связанные с Выходами нейросети

Следующие кнопки позволяют управлять выходами или outputs (целями прогноза):

 - удаление любого выбранного индикатора (осциллятора) из списка. К примеру, в маленьком окне выше, мы удаляем RSI из списка целей;

 - очистить список индикаторов;

 - чтение/сохранение списка индикаторов в отдельном файле. Например, если Вы привыкли работаеть с вашими собственными списками целей, просто сохраните их в специальный файл и используете свой набор для работы с другой моделью Neural Net.


 

Кнопки, связанные со Входами нейросети

Следующие кнопки позволяют управлять входами (то, что подаем на вход для обучения нейросети):

 - открытие или сохранение входов (событийной основы) в отдельный файл .

Опции Neural Net При активации данной кнопки появится окно, в котором вы сможете установить параметры для Neural Net:

 

Мы не рекомендуем изменение этих параметров без нашего совета.

В целях общей информации, ниже описание этих параметров:

Learning Rate - это скорость процесса оптимизации. Меньшая скорость делает процесс более гладким и более медленным. Большее значение ускоряет процесс оптимизации, хотя иногда это может привести к эффекту "подскакивания" линии и, наконец, к ее хаотическому поведению.

Momentum, Noise - мы не рекомендуем изменение этих параметров.

Train Neural Net и Train Simple Linear Model - программа может работать с двумя прогностическими методиками одновременно: нейросеть (нелинейный прогноз) и обычная линейная модель. Показывая обе линии прогноза вместе, мы можем понять уровень нелинейности для ценовых данных, которые анализируем.

 Мы рекомендуем использовать данную опцию. Она активирует специальную процедуру оптимизации, улучшающей качество прогноза.

Number of Hidden Units  Данный параметр также может изменить качество линии прогноза Neural Net:

Мы рекомендуем эксперименты с изменением параметра только после того, как хорошо поработали с моделью, и получены удовлетворительные результаты. Например, мы создали модель, которая работает с событиями Price Bar Proportions и дает хорошую линию прогноза. Только после этого, на заключительной стадии, вы можете изменять параметр Number of Hidden Units, используя для этого, например, процедуру Back Testing.

Здесь можно добавить дополнительный слой и больше (по умолчанию один), но это сильно замедлит процесс работы.

 

Настройка визуальных опций 

Вкладка View позволяет Вам изменять визуальные характеристики Информационной панели Neural Net:

Show NN Model - активация/деактивация линии прогноза Neural Net;

Show Linear Model - активация/деактивация линейной  линии прогноза (то есть, линия прогноза, созданной с использованием линейных методик) ;

Show Price Chart - показать ценовую диаграмму в Информационной панели Neural Net;

Show Price Events - активация/деактивация такого параметра, как ценовые события

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

Кроме того, в этом окне можно установить толщину рабочих линий.

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

 

Когда остановить процесс обучения? 

Управлять процессом обучения нейросети поможет информационная панель Neural Net. Важнейшая ее функция - визуализация происходящих процессов: у нас есть возможность видеть, насколько хорошо в данный момент линия прогноза соответствует ценовым данным. Чтобы остановить процесс обучения, нажмите на эту кнопку:

Когда же нажимать на эту кнопку или как понять, где находится этот самый "пункт остановки"? В существенной мере это зависит от установленных нами параметров нейросети (иначе говоря, от того, что мы загрузили на ее входах и выходах), и от ценовых данных, которые мы анализируем. Здесь нет никаких правил.  Имеются лишь общие рекомендации, когда остановить учебный процесс:

Нажмите на кнопку "Stop", если совпали два этих условия:

1) вы наблюдаете хорошую корреляцию между линией прогноза (в нашем примере она красная ) и ценовыми данными (черная линия) в пределах учебного интервала (синяя область);

2) линия прогноза хорошо коррелирует с ценовыми данными и на тестируемом интервале (красная область).

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

Она автоматически появляется на Рабочей панели нейросети после запуска обучения:


Левая ячейки таблицы в этой панели отображают цель обучения (в двух вариантах - для нейросетевого прогноза и простого линейного), срединные - показывает текущий достигнутый результат обучения для данной цели, правые ячейки (изначально они пусты) - для выставления желаемого результата обучения (данный результат - пункт остановки обучения). Остановите обучение, выставите здесь нужный процент (активируйте ячейку курсором), в данном примере - 87%, и программа остановит обучение сразу, как только это процент будет достигнут.

Программа вычисляет корреляцию между ценовыми данными (target/price index) и линией прогноза Neural Net (красная линия) и также корреляцию между ценовыми данными и простой линейной моделью (синяя линия).  Процент в срединных ячейках показывает, как эти коэффициенты корреляции изменяются в течение учебного процесса. Когда  модель достигает заданного предела корреляции,  программа автоматически останавливает учебный процесс.  


 

Режимы обучения   

Откройте вкладку "Train". Здесь мы имеем дело с ценовыми данными учебного интервала.

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

Мы можем использовать в работе как все доступные данные, так и лишь какую-то их часть.  Наши варианты: чтобы выбрать участок с ценовыми данными вручную, используйте бары вблизи LBC, и чем ближе, тем лучше, поскольку они распределяются линейно.

Кликните по кнопке:  .

Различные режимы оптимизации интервала выбираются через выпадающий список.

Давайте рассмотрим каждый из них. 

Manually

В данном режиме вы сможете вручную определить интервалы, являющихся более или менее важными в процессе обучения нейросети. Рассмотрим пример выше. Здесь мы анализировали индекс Доу-Джонс в период 1900-2004 годов.

Если мы решили, что время Великой Депрессии, а также последние 4 года (2000-2004) самые важные при анализе данного ценового ряда, как мы должны донести эту информацию до Neural Net. Как? Очень просто: нажмите на кнопку "Emphasize" и выберите эти два интервала, растягивая их мышью. Таким образом, мы отметили особую важность этих периодов для американской экономики, а главное, об этом узнала и программа. Она обучит Neural Net, используя все ценовые пункты учебного интервала, и в то же самое время, этим двум интервалам уделит специальное внимание. Мы можем сделать и прямо противоположность: "преуменьшить роль" каких-либо интервалов, неважно по какой причине.  Например, мы могли бы исходить из предположения, что во время Второй мировой войны американская экономика жила по другим правилам.  В этом случае, мы рекомендуем уменьшить роль этого временного интервала через "De-Emphasize". Программа рассмотрит весь диапазон данных, но при этом исключит "неважные" периоды из своего анализа. В итоге, программа будет использовать какие-то временные периоды более интенсивно, другие же исключит совсем.

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

Use last %x price bars

При таких настройках, независимо от длительности ценовой истории, программа будет использовать для обучения лишь последние 1000 ценовых баров до Learning Border Cursor (LBC). Все данные до этих 1000 баров для программы перестают существовать.  Мы ввели возможность подобных настроек в программу, поскольку знаем примеры, когда варьирование с таким  значениями  приводило к улучшению результатов прогноза. Это особенно верно для объемных массивов данных.  Вывод здесь лежит на поверхности - вновь появляющиеся факторы изменяют воздействие предварительно вовлеченных факторов. И это хорошая причина обратить особое внимание на ценовые данные вблизи LBC.

Примечание : "%x" означает число (количество) ценовых баров .

Use last %x  Linear Distributed points

Это другая вариация только что рассмотренного метода. Здесь программа также использует для обучения нейросети лишь последние 1000 ценовых баров (перед LBC), но в их использовании применяет методику линейного распределения: чем ближе ценовые бары к LBC,  тем более интенсивно они используются. Таким образом мы дает понять Neural Net, что последние ценовые бары более важны в создании модели прогноза.


Данная опция:

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

Быстрый доступ к выбору этих режимов - через эти кнопки:

 

Финальная оптимизация 

При финальной оптимизации процесс используются ВСЕ доступные ценовые данные для создания прогностической линии. В этом случае Learning Border Cursor должен быть установлен на последнем ценовом баре (нажмите на кнопку).  Эту кнопку вы найдете здесь:

После этого обучите Neural Net еще раз (то есть, повторите процесс обучения).

 

Как вывести результаты обучения в Главное окно 

После всех процедур обучения, Вы можете вывести прогностическую кривую в Главное Окно.

Чтобы сделать это:

1) Кликните по кнопке ;

2) Данная кнопка  делает ценовую диаграмму информационной панели Neural Net невидимой: мы видим лишь содержание Главного Окна.


В правом углу основного окна вы увидите клавиши управления Neural Net:

Эта панель позволяет управлять линией прогноза NN.

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

Кнопка позволяет вновь активизировать окно, связанное с только что обученной нейросетью. Это важно, когда в работе одновременно несколько моделей NN.


Объектно-ориентированная нейросеть - Событийная основа

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

Как следствие, при выработке прогноза важны:

1) по крайней мере, два различных типа событий где A это некоторое событие, предположительно, влияющее на ценовой график (на котировки) и B - событие самого ценового графика (событие котировок).

2) выявление взаимосвязи между событиями одного и другого ряда.

Если мы знаем, что некоторая связь имеет место, мы всегда можем  предсказать то, что случится с B, если события некоего плана реализуются в A. Это основная идея относительно любого прогноза. И модель прогноза есть ничто иное, как каркас, выявляющий взаимосвязь между двумя типами событий.

Почему мы применяем  для создания прогностических моделей именно Нейросеть? Главная причина этого в том, что все еще много процессов, с которыми мы имеем дело в нашей жизни, и которые не имеют никакого адекватного теоретического объяснения. В этой ситуации, все, что мы можем предпринять, это сделать предположения и проверить их действенность; другими словами, мы должны найти связь между различными типами событий. Любая Нейросеть работает следующим образом: берется некоторое количество начальной информации (мы можем назвать это входом), и сравнивается с некоторыми другими факторами (это называется выходом). Конечная цель - выявить взаимосвязь между двумя этими типами событий. Neural Net в программе Timing Solution особого вида: мы используем в качестве входов именно события, а не числа, как в классической Neural Net. Из-за этого наша Neural Net назвается "Объектно-Ориентируемой Нейросетью", поскольку только события являются объектом нашего интереса.

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

Давайте рассмотрим в деталях, как работает наша нейросеть.

Мы начинаем с событийной основы, или со входов.   

Щелкните этой клавишей:, под Step 2: Criteria, на экране появится следующее окно:


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

Давайте рассмотрим каждое из них по отдельности.


Библиотека Стандартных моделей

Кнопка "Standard Models Library" позволяет загружать в программу созданные и сохраненные ранее модели:


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

 

Извлечение циклов из Spectrum

Активируйте клавишу:. Сейчас вы попадаете в главное окно модуля Spectrum, который извлекает из ценовых данных самые действенные неподвижные циклы и далее преобразовывает их в формат ULE  (ULE это сокращение от "Universal Language of Events").

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

 

По умолчанию, программа извлекла важные циклы (см. список в левом нижнем окошке), и поместила их и с дополнительной разбивкой в "Cycles Box". Эта процедура может производится также вручную. Вы можете работать с любой комбинацией циклов: со всеми из них или только с "хорошими". Рассмотрим две иллюстрации:

                                    

Цикл на первой из этих двух картинок (слева), можно признать "хорошим", в то время как у второго все не столь блестяще; линии, в которой он визуализирован, не помешало бы быть и повыше и поуже, насколько это возможно.

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

  1. Нажмите на кнопку "Clear" , чтобы очистить окошко от уже загруженных циклов.
  2. Далее, чтобы выбрать любой цикл, щелкните мышью на пике, который ему соответствует:
  3.                 

  4. Когда все интересующие циклы отобраны, и вы хотели бы использовать результаты в моделях Neural Net, щелкните на  кнопке :

     

Таким образом, вы помещаете все эти циклы, а также их подразбивку (overtones), в окошко "Cycles Box".

 

Сезонные Циклы

Эта кнопка  позволяет Вам использовать различные сезонные (натуральные) циклы для моделирования в Neural Net.

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

 

Астрономические Циклы

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

В подобном предположении нет ничего мистического, наш интерес к этим явлениям чисто математический. Иначе говоря, мы просто рассматриваем планетарные положения и углы между планетами как дополнительную событийную основу для моделей Neural Net.

Почему мы используем астрономические циклы? Самая привлекательная их особенность - строгая регулярность этих явлений. Подобную цикличность очень трудно провести через спектральный анализ.

Перед Вами окно, в котором устанавливаются параметры для астрономических моделей:

Здесь следует определиться с планетами, циклическое взаимодействие которых Вас интересует. (Примечание: символы на клавишах - это графические обозначения планет. При активации клавиш откроется окошко, в котором Вы увидите фактические наименования планет. Те из них, что активированы "галочкой" проявляются в виде символов на кнопках).

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

Параметром Step устанавливается шаг обработки событийной астрономической информации, это своеобразное разрешение моделей. Вы можете экспериментировать с этим параметром, но, пожалуйста, не увлекайтесь - если он будет слишком маленьким, что у программы может проявиться эффект "перетренировки". Самые "ходовые" здесь значения - 8, 12, 15  градусов.

Aspects between planets - Этот модуль работает с двумя разновидностью циклов: планетарными положениями (периодическими возвращениями космических тел в какую-либо точку), либо с углами (аспектами) между планетами. См. Глоссарий для получения дополнительной информации об аспектах и планетарных положениях.

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

По умолчанию, здесь используются модели с плавающими углами (Floating Angle Model, данная идея была предложена и развита нашей командой).

 

Модель авторегресии (Fuzzy+OONN)

Кнопка   позволяет создавать  прогностические модели на основе явления авторегрессии.

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

Поскольку самый простой вариант модели регрессии это линейная регрессия (ее еще называют моделью максимальной  энтропии), из этого вытекает следующее:

Цена сегодняшнего дня = A1 x Цену вчерашнего дня + A2 x Цену двухдневной давности +....

Timing Solution обеспечивает абсолютно новый подход к моделированию процессов авторегрессии.  Прежде всего,  к процессу моделирования применяется  математика нечеткой логики. Плюс к этому наша объектно-ориентируемая нейросеть производит специальную процедуру оптимизации (названную подоптимизацией), что увеличивает прогностическую точность модели и уменьшает возможность возникновения "эффекта перетренировки".

Back Testing этой модели определенно указывает на то, что данный подход увеличивает ее прогностические возможности.

В данном окне устанавливаются параметры авторегрессии:


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

Далее мы переходим к настройкам для этих моделей:


Эти настройки тесно связаны с параметром.  Последнее показывает, как долго после LBC работает прогноз, основанный на этой модели.


На экране это будет выглядеть следующим образом:


Мы рекомендуем следующие настройки:

 

Модели, основанные на пропорциях ценовых баров (Fuzzy Logic+OONN)

Данные модели основаны на идее, что определенные значения конфигураций ценовых баров имеют взаимосвязь с будущими ценовыми изменениями. Они рассчитываются тем же математическим блоком, что и модели авторегрессии  (т.е., в расчетах используются Fuzzy Logic + Object Oriented Neural Network).

Активируйте клавишу. Покажется окно установки параметров:

Информация относительно каждого параметра настройки описывается в самом окне. Вы можете поэкспериментировать со всеми из них.


Модели авторегрессии и параметров ценового бара - математические прогнозы строятся на основе законов нечеткой логики.


Astrology

Если ваша версия Timing Solution включает в себя астрологический инструментарий, используйте его возможности в качестве возможной событийной основы для Neural Net. Чтобы приступить к работе, активируйте кнопку::


В этом окне перед вами откроется некоторое разнообразие вкладок. Каждая из них соответствует определенной категории астрологического инструментария (планеты в Зодиаке, Аспекты, и т.д.). Предполагается, что у вас есть понимание, как работает на рынке то или иное событие. Пользователи, имеющие определенную подготовку, могут использовать весь этот инструментарий - выберите категорию, которую вы хотели бы использовать в работе, и нажмите на кнопку "Add to List".




Объектно-ориентированная нейросеть - Работа с индикаторами 

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

Активировав эту кнопку:, Вы получите такое окно:

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

 

Ценовые индикаторы

Это одна из наиболее используемых опций программы. Здесь Вы можете выбрать различные ценовые индикаторы для работы Neural Net. 

Здесь вы выбираете осциллятор: остановитесь на соответствующем пункте и нажмите на кнопку "Try": 

Вы найдете здесь большое разнообразие индикаторов - например, вы можете выбрать для анализа Relative Strength Index:

Или же Volatility Index:

 

Опция "Standard" позволяет выбрать различные индикаторы из списка. К примеру, я выбрал  значение true range (родственное ему): 

После того, как выбор сделан, щелкните кнопкой "OK": 

Теперь выбранное можно использовать в анализе Neural Net:

В программе можно не ограничиваться лишь одним типом индикатора. Можно произвести прогностическую работу одновременно с несколькими ценовыми индикаторами. Например, возможно создать модель Neural Net, которая выработает линию прогноза для выбранного осциллятора и значения true range сразу. Мы можем видеть это на изображении:

Здесь вы видите две прогностические линии: одна для стандартного осциллятора и другая для значения True Range.  Данная особенность может быть очень полезной, поскольку позволяет использовать максимум информации относительно динамики цен.

 

Критические ценовые движения

Перед вами другой тип ценовых событий. В "Price-Events Master" откройте вкладыш "Up/Down Percent": 

Установите значение изменения цены на минимуме и нажмите на кнопку "Try".

Если Вы приступите к анализу таким путем (как это показано на диаграмме), то Neural Net спрогнозирует самые сильные восходящие движения. В этом случае прогностическая линия Neural Net будет выглядеть следующим образом:

 

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

 

Верхние и нижние поворотные точки

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


Выберите вкладыш "Turning Points":


Нажмите на кнопку "Try"; откроется окно для настроек параметров волны "Зигзага":



При работе с прогностической кривой действует следующее правило: чем выше прогностическая кривая, тем сильнее вероятность для ВЕРХНИХ ПОВОРОТНЫХ ТОЧЕК; чем она ниже, тем сильнее вероятность для НИЖНИХ ПОВОРОТНЫХ ТОЧЕК.



Как избежать эффекта перетренированности нейросети?

Эффект перетренировки является наиболее типичной проблемой при создании моделей на основе нейронных сетей. Эта проблема возникает, когда вы загрузили слишком много "входов" или инпутов для нейронной сети и у вас при этом недостаточно ценовой истории (слишком малый период котировок; маловато баров для анализа).

Вот пример: вы загрузили ценовую историю DJIA с 1885 по 2011 год. Это около 35 тыс. ценовых баров, мы можем создать нейронную сеть, содержащую 10 тыс. входов. Возникает вопрос: "хороша ли это модель?".

Соотношение между количеством ценовых баров и количеством входов в нашей нейронной сети составляет 2.8 (35 000 ценовых баров делим на 10 0000 входов). Это значение слишком низкое, т.е. у нас слишком много входов, и этот факт может вызвать чрезмерный тренировочный эффект. Что такое перетренировка сети, как она выглядит в рабочем процессе? Этот эффект работает следующим образом: нейронная сеть обеспечивает отличную корреляция с данными до LBC, в то время как после LBC ее прогноз совершенно провальный.

Вот типичная картинка перетренированности сети:

Математически этот факт вполне очевиден: у нас слишком много событий на входе; мы перекормили этими событиями нейросеть. Их чрезмерное многообразие позволяет описать любое движение фондового рынка в прошлом, и она попросту не смогла разобраться, как бы захлебнулась в этом разнообразии. Однако, когда мы пытаемся предсказать будущее движение рынка, нам нужно иметь дело с реальными входными данными, которые на самом деле связаны с прогнозом по финансовому рынку. Другими словами, если мы хотим что-то объяснить в прошлом - мы можем использовать что угодно, тут сойдет любой фактор, который попался по руку; но если мы действительно заинтересованы в прогнозировании, мы должны очень строго оценивать загружаемые в нейросеть факторы, т. е. мы выбираем только самые важные события; только те из них, которые реально имеют отношении к событию. Не следует поступать по принципу "загружу-ка я в нейросеть вот это, и вот это, и вот это - пусть нейросеть сама разбирается, что работает, а что нет".

Специалисты нейросети называют этот эффект перетренировки как GIGO (от "Garbage in, garbage out"; "Мусор (вошел) внутрь, мусор (вышел) наружу").

Как распознать перетренировку? Если у вас отличная корреляция, под 100%, на данных до LBC - это, скорее, повод для тревоги, чем радости; очень вероятно, что вы просто перекормили нейросеть, отсюда и "выдающиеся" результаты.

Вот наши рекомендации, как избежать GIGO:

1) Держите соотношение между количеством ценовых баров и количеством входов примерно 10 к 1. Т.е. если у нас есть 35 000 ценовых баров, сумма факторов, что вы подаете на вход нейросети, не должна превышать 3 500. При этом это соотношение разнится, оно зависит от глубины котировок. Например, для 1000-2000 баров ценовой истории можно использовать 300-600 входов (здесь не так все строго), т. е. здесь используем соотношение 3:1 для баров/входов; однако для более объемных ценовых исторических данных используйте соотношение 10:1 и даже 20:1.

2) Анализируйте, делайте фильтрацию событий. Надо самому понимать, хотя бы в первом приближении, что может сработать, а что нет.

3) Не нужно увлекаться обучением нейросети, оставлять компьютер на ночь - "пусть обучает", здесь стоит обойтись без фанатизма. 10 000 - 20 000 шагов тренировки будет вполне достаточно для нейросети.