www.timingsolution.ru

     Документация по работе с программой

 

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

Содержание

 

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

Если говорить в общем, программа 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. Мы выбираем этот осциллятор, потому что он позволяет оптимизировать работу с относительными изменениями цен. Это особенно важно, когда мы имеем данные с длительной ценовой историей.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это особенно важно, если Вы используете в работе несколько различных индикаторов, например RSI +Volatility:

 

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

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

Появится следующее окно. Данная форма поможет сохранить важную информацию, связанную с этой моделью:

 

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

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

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

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

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

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

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

 

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

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

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

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

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

Процесс создания выходов описан здесь.  Следующие кнопки позволяют управлять выходами:

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

- удалите все выходы из списка;

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


 

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

Процесс создания входов описан здесь.  Следующие кнопки позволяют управлять входами:

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

Manually

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

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

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

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.

 


Copyright © 2003-2007 www.timingsolution.com