Программные продукты от Piligrimm - страница 4

 

to Piligrim

Спасибо!
Хорошо разъяснили.
Вполне достаточно чтобы программно реализовать Ваши методы.

 

В качестве примера использования индикаторов для создания торговых систем приведу, в упрощенном варианте, стратегию, которую я реализовал в торговой системе на нейронной сети, описанной в разделе “ Пример построения торговой системы “. После выходных я приступлю к отладке этой торговой системы, и по завершению выставлю в этой теме в качестве примера использования индикаторов. В написанной торговой системе я использовал несколько индикаторов, в качестве примера, приведу стратегию только на двух из них, "Kristi_GrafModelWav", "Indicator Trend". Но в начале скажу несколько слов о принципах построения этих индикаторов.

"Kristi_GrafModelWav" – построен на основе полиномов следующего вида:

GR1[i][0] = 0.6*(0.5*(-0.00000808108 +1.64312*(SD[i+5][4]-SD[i][4]) -0.387988*(SD[i][1]-SD[i][2]) +0.598535*(SD[i][2]-SD[i][3])

-0.468099*(SD[i+1][3]-SD[i][2])-0.461584*(SD[i+1][4]-SD[i][1])+SD[i][3])+0.5*((SD[i+2][1]-SD[i][3])-(SD[i+3][1]

-SD[i][4])+0.00000000861016*(SD[i][2]-SD[i][3])+(SD[i+19][3]-SD[i][4])+0.3*SD[i][3]+0.7*SD[i][4]))+0.4*((SD[i][1]

-SD[i+10][3])-(SD[i][1]-SD[i+10][4])+0.00000000861016*(SD[i][2]-SD[i+10][3])+(SD[i][3]-SD[i+10][4])+SD[i][4]);.

Сигналы SD получены по принципу “скользящего окна” сканирующего историю котировок на заданную глубину и меняющего свою ширину. Обучение полиномов проводилось на сигналах полученных на основе истории котировок EURUSD M1. Сигналы SD были пропущены через группу вейвлет преобразований настроенных по разным параметрам. Обучение велось по алгоритмам линейной регрессии и формализованных нейронных сетей приведенных к виду полиномов. Целью обучения полиномов было усилить информативность входного сигнала за счет включения запаздывающих аргументов из прошлой истории, и фильтрации второстепенных и мешающих факторов. Еще одной из целей обучения полиномов, - создать группу синтезированных на основе котировок сигналов, несущих в себе дочерние признаки основного сигнала, и перекрывающих спектр его возможных изменений. Это сделано с целью, чтобы у нейронных сетей, на вход которых эта группа сигналов будет подаваться, была возможность “зацепиться“ за разные гармоники входящие во входной сигнал, и пройти качественное обучение. Хотя обучение проводилось на EURUSD M1, индикатор работает на любых инструментах, любых периодах, любых рынках. Индикатор формирует группу из 40 синтезированных сигналов.

"Indicator Trend" – использует в основе своей работы разработанный мною алгоритм пороговой дискретизации с перестраиваемым шагом пропорционально динамике изменения котировок. В результате такой дискретизации получаются отсчеты соответствующие только экстремальным точкам сигнала, происходит компрессия сигнала, осуществляется глубокая фильтрация за счет устранения помех, незначительных колебаний. Восстановления сигнала на каждом баре осуществляется путем интерполяции между двумя соседними точками дискретизации. На приведенных картинках, красная линия, Вы можете видеть восстановленный сигнал на каждом баре, а точки перелома соответствуют точкам дискретизации. По этому же принципу построены и индикаторы "Indicator Power" и "Indicator Channel". Подобная компрессия сигнала позволяет получить глубокую проработку истории котировок при относительно небольшом количестве точек дискретизации, что существенно сокращает время и увеличивает точность обучения нейронных сетей при подаче на вход выборки дискретных отсчетов.

Суть стратегии построения торговой системы на основе двух индикаторов состоит в следующем. Индикатор "Kristi_GrafModelWav" использовать в качестве источника входных сигналов, а индикатор "Indicator Trend", в качестве источника сигнала относительно которого будет производиться обучение нейронной сети. Цель обучения – сделать прогноз будущей точки дискретизации, что позволит определить направление движения цен и их примерный уровень. Для синхронизации работы этих индикаторов зададим одинаковую длину входной выборки LengthSample. В настройках индикаторов установим разрешение сохранения данных на диск с направлением индексации от начала массива. В настройках индикатора "Indicator Trend" установим режим сохранения дискретных отсчетов, тогда в файл на диск будут писаться уровни цен в точках дискретизации (точках перелома на рисунке) и порядковый номер отсчета от начала выборки LengthSample, зададим статический режим работы индикатора. При этом по приходу каждого нового бара будет пересчитываться вся история и формироваться массив охватывающий всю длину выборки LengthSample. В массиве созданном индикатором "Indicator Trend", мы получили отсчеты, которые будем использовать в качестве данных относительно, которых будет обучаться нейронная сеть. Теперь нам надо сформировать массив, который будем подавать на вход нейронной сети. Индикатор "Kristi_GrafModelWav" пишет на диск массив состоящий из 40 столбцов, соответствующих его выходным сигналам, и длиной LengthSample. Нам нужно из этого массива выбрать строки соответствующие точкам дискретизации индикатора "Indicator Trend". Это легко сделать, воспользовавшись массивом полученным с помощью индикатора "Indicator Trend", второй его столбец содержит порядковые номера отсчетов точек дискретизации. Так, как длина входной выборки для обоих этих индикаторов одинаковая, эти номера будут соответствовать и массиву индикатора "Kristi_GrafModelWav", выбрав соответствующие этим номерам строки массива индикатора "Kristi_GrafModelWav", мы осуществим тем самым дискретизацию данных индикатора "Kristi_GrafModelWav" синхронную данным индикатора "Indicator Trend". Таким образом мы получили входной массив для обучения нейронной сети. Проводим обучение нейронной сети. Теперь нам надо на основе обученной нейронной сети проводить расчет и давать прогнозы в реальном режиме времени. Для этого в настройках индикатора "Kristi_GrafModelWav" установим LengthSample = 1. При этом по приходу каждого нового бара на диск будет писаться массив состоящий из одной строки содержащей все 40 значений сигнала. Расчет нейронной сетью мы должны делать в моменты формирования новой точки дискретизации индикатора "Indicator Trend", в соответствии с алгоритмом обучения. Для определения этих моментов нам достаточно воспользоваться двумя глобальными переменными, которые формирует индикатор "Indicator Trend". Как только значение в этих двух глобальных переменных изменятся относительно друг друга, это значит произошло формирование новой точки дискретизации. В этот момент мы должны считать с диска массив данных индикатора "Kristi_GrafModelWav", подать его на вход обученной нейронной сети, и произвести расчет. Мы получим прогноз следующей точки дискретизации в момент, когда сформировалась последняя. Вот такова стратегия торговой системы на основе предлагаемых мною индикаторов в самом простом варианте. Можно строить и более сложные стратегии, с использованием всех индикаторов, это повысит точность и надежность прогнозов.

 

Для более полного представления функциональных взможностей индикаторов, в качестве примера, привожу инструкцию к использованию индикатора "Indicator Trend" . Если есть какие замечания, предложения что-то скорректировать или дополнить, с признательностью выслешаю. Если будет интерес с Вашей стороны, могу выставить и инструкции к использованию других индикаторов.

=======================================================================================================

Индикатор "Indicator Trend".

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

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

Индикатор производит обработку данных по приходу нового бара. Индикатор работает в двух режимах, статическом и динамическом. В статическом режиме индикатор строит модель тренда на всю длину заданной выборки истории и пересчитывает ее на всей длине по приходу нового бара, создавая шаблоны заданной длины, которые можно выводить на график, а также сохранять на диск. В динамическом режиме индикатор рассчитывает значение только на вновь поступившем баре, постепенно накапливая рассчитанные значения по мере поступления новых данных. Длина обрабатываемой истории определяется переменной “LengthSample” на вкладке «Свойства – Входные параметры», длина истории может быть любой.

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

1). Сохранение значений сигнала на каждом баре;

2). Сохранение значений только точек дискретизации (перелома тренда).

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

Визуализация расчета осуществляется на графике инструмента в окне, которого установлен индикатор.

Параметры работы задаются на вкладке «Свойства – Входные параметры» при установке индикатора на график в окне MetaTrader 4.


Индикатор "Indicator Trend" имеет следующие входные параметры:

1). LengthSample – длина обрабатываемой истории;

2). Threshold – коэффициент порога;

3). DynamicMode – режим работы индикатора динамический/статический.

4). SaveFileData – флаг разрешения записи данных рассчитанных индикатором на диск;

5). FileNameData – имя файла, в котором будут сохраняться данные;

6). SaveFilePointsFracture – флаг разрешения записи точек дискретизации рассчитанных индикатором на диск;

7). FileNamePointsFracture – имя файла, в котором будут сохраняться точки дискретизации;

8). Subscripting_MT4 – направление индексации записываемых на диск массивов.

9). NameGlobalVariable0 – имя глобальной переменной сохраняющей значение последней точки дискретизации;

10). NameGlobalVariable1 – имя глобальной переменной сохраняющей значение предпоследней точки дискретизации.


1). Длина обрабатываемой истории определяется переменной “LengthSample”. Максимальный размер не ограничен. При этом необходимо, чтобы в окне и в истории по инструментам, с которыми работает индикатор, было не меньшее количество баров, чем “LengthSample + 1” .

2). Коэффициент порога, задает порог дискретизации в “пунктах”.

3). DynamicMode – флаг, определяющий выбор динамического или статического режима работы индикатора, при DynamicMode = 1 – динамический режим, при DynamicMode = 0 – статический режим. Динамический режим позволяет ускорить работу индикатора за счет того, что не будет пересчитываться вся история, а будут обрабатываться только вновь поступающие бары. При этом будет осуществляться накопление рассчитанных значений. Выводиться на график, а также при разрешении записи на диск, сохраняться в файл будут только накопленные в результате расчета данные. При статическом режиме работы по приходу нового бара будет пересчитываться вся история на глубину “LengthSample”. Выводиться на график, а также при разрешении записи на диск, сохраняться в файл будут данные по всей длине обработанной истории.

4). Флаг SaveFileData запрещает запись данных рассчитанных индикатором на диск при значении равном 0, если последующая обработка данных не нужна. При необходимости последующей обработки и сохранении данных на диск, значение SaveFileData нужно установить равным 1.

5). FileNameData – имя файла, в котором будут сохраняться данные на диске. Можно устанавливать любое имя, но расширение файла должно сохраняться неизменным .csv, иначе будет возникать ошибка при записи файла. Максимальный размер сохраняемого массива определяется LengthSample”, но количество строк в нем может быть и меньше “LengthSample”, на количество баров отделяющих последнюю точку дискретизации от нулевого бара.

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

7). FileNamePointsFracture – имя файла, в котором будут сохраняться значения цен в точках дискретизации, и порядковый номер бара от начала обрабатываемой истории “LengthSample”, соответствующий каждой точке дискретизации. Количество записей в этом файле при статическом режиме работы индикатора будет определяться количеством точек дискретизации полученных на длине истории равной “LengthSample” при установленном коэффициенте порога. При динамическом режиме работы – количеством сформировавшихся точек дискретизации с момента начала работы индикатора. При этом порядковый номер бара, соответствующий каждой точке дискретизации, будет рассчитываться также с момента начала работы индикатора.

8). Переменная Subscripting_MT4 – определяет направление индексации записываемого на диск массива, если установить значение равное 1, то индексация будет соответствовать принятой для MetaTrader 4, от старшего разряда к нулю, если установить значение равною 0, то будет стандартная индексация от нуля к старшему разряду. Это относится как FileNameData, так и к FileNamePointsFracture.

9). NameGlobalVariable0 – имя глобальной переменной сохраняющей значение цены в последней точке дискретизации.

10). NameGlobalVariable1 – имя глобальной переменной сохраняющей значение цены в предпоследней точке дискретизации.


При работе индикатора на графике в верхнем левом углу будет выводиться информация о длине обрабатываемой истории LengthSample”, коэффициент порога Threshold, и количестве отработанных индикатором циклов "AmountRunning".


Распакуйте все содержимое архива Indicator Trend.rar и установите индикатор Indicator Trend.ex4 в папку \experts\indicators, перезагрузите терминал MetaTrader 4, после этого индикатор "Indicator Trend" появится в окне пользовательских индикаторов \Навигатор\Индикаторы\Пользовательские индикаторы\,его можно устанавливать на графике в окне MetaTrader 4.

 

Если нет вопросов по приведенной инструкции для работы индикатора "Indicator Trend", то инструкции для других индикаторов приводить не буду, а приведу лишь выдержки, касающиеся принципа их работы. Для индикаторов Kristi_GrafModelWav,"Indicator Trend",я это сделал в примере торговой стратегии, приведу для "Indicator Power" и "Indicator Channel" .

=====================================================================================================

Индикатор "Indicator Power".

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

Индикатор "Indicator Channel".

На рынке существуют две тенденции, восходящая – бычья, и нисходящая – медвежья. Характер этих тенденций несколько отличен друг от друга, но, тем не менее, они зависимы между собой, и влияют одна на другую. В основу этого индикатора заложена идея, выделить из общего потока котировок эти две тенденции, формализовать их характер в виде временного ряда, отражающего их развитие и взаимное влияние, а также результат их борьбы между собой. Индикатор "Indicator Channel" создает канал тренда и отражает динамику его поведения, экстраполируя направление развития тенденции рынка. Верхняя линия отражает характер бычьей тенденции под влиянием медвежьей, нижняя линия отражает характер медвежьей тенденции под влиянием бычьей, средняя линия – результат их борьбы, и фактически является одной из гармоник тренда соответствующей заданному уровню дискретизации потока котировок. Разный уровень порога дискретизации позволяет выделить разные по амплитуда – частотным характеристикам гармоники. "Indicator Channel" – использует в основе своей работы разработанный мною алгоритм пороговой дискретизации с перестраиваемым шагом пропорционально динамике изменения котировок. В результате такой дискретизации получаются отсчеты соответствующие только экстремальным точкам сигнала для каждой из тенденций в отдельности. При этом уровень сигнала, каждой из трех линий индикатора, определяется динамикой соответствующей тенденции и медленно меняется пропорционально силе тенденции, и характеру преобладания одной над другой, пока не будет сформирована следующая точка дискретизации и не зафиксирует этот уровень.

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

 

Параллельные темы где идут обсуждения индикаторов:

http://forum.alpari-idc.ru/showthread.php?p=1094576#post1094576

http://onix-trade.net/forum/index.php?showtopic=81881

 

Решил Piligrimm небольшой камушек тоже кинуть.На мой взгляд предлогаемая тобой цена мягко говоря завышена в силу того что она почти соизмерима с ценой извесных програмных продуктов за которыми имя,возможно твои разработки гениальны,но об этом мы знаем только с твоих слов,а покупать закрытый код за такие деньги да ешё рекомендуется приобретение всех индикаторов выходит цена которая порождает сомнения и жажду гарантий эфективности.Это раз,а вот два.Ранее был предложен для опытов индикатор Кristi из которого можно сделать вывод что с математикой у автора все впорядке,но если предлагаемые к покупке индикаторы написаны в том же духе то для построения эксперта на их основе, которое требует на мой взгляд большое количество экспериментов,требуется наверное как минимум ЭВМ "Эльбрус" :)).Я пытался простейший эксперт потестить на его основе так бросил т.к. мой не совсем уж слабый комп еле еле пыхтел,а тестить на всей истории сам понимаеш,а оптимизация.

 
lovova:

Решил Piligrimm небольшой камушек тоже кинуть.На мой взгляд предлогаемая тобой цена мягко говоря завышена в силу того что она почти соизмерима с ценой извесных програмных продуктов за которыми имя,возможно твои разработки гениальны,но об этом мы знаем только с твоих слов,а покупать закрытый код за такие деньги да ешё рекомендуется приобретение всех индикаторов выходит цена которая порождает сомнения и жажду гарантий эфективности.Это раз,а вот два.Ранее был предложен для опытов индикатор Кristi из которого можно сделать вывод что с математикой у автора все впорядке,но если предлагаемые к покупке индикаторы написаны в том же духе то для построения эксперта на их основе, которое требует на мой взгляд большое количество экспериментов,требуется наверное как минимум ЭВМ "Эльбрус" :)).Я пытался простейший эксперт потестить на его основе так бросил т.к. мой не совсем уж слабый комп еле еле пыхтел,а тестить на всей истории сам понимаеш,а оптимизация.

Спасибо за камушек. Стандартов цен на программные продукты для трейдинга нет. Я ценю свой вложенный труд, и считаю, что установленные мной цены вполне отвечают содержанию. Как должно быть ясно из того, что я написал об индикаторах, они не относятся к разряду примитивных, и хотя код оптимизирован, и не очень большой, алгоритм их работы достаточно сложен, я не один год доводил их до ума. Если сравнивать, например, с советниками хорошего уровня, то цены соизмеримы, а написать советник, где большую часть занимают стандартные блоки, гораздо проще, чем создать эффективный алгоритм анализа рынка. У меня нет еще "имени", но по статье и нескольким темам в которых я участвовал можно судить, что в этой область деятельности я человек не случайный и у меня есть некоторый опыт. Я не говорю, что эти индикаторы необходимо покупать все вместе, я говорю, что они разрабатывались как дополняющие друг друга инструменты для разностороннего анализа по разным алгоритмам рынка и наиболее эффективны при совместном использовании. Но работать они могут и отдельно, или парами, как показано в примере. Что касается гарантий, это отельный вопрос, я могу гарантировать, что их работа будет соответствовать тому, что я написал, но получите ли Вы прибыль с их использованием, это зависит от стратегии, которую Вы на них будете строить, и если сочтете нужным, можете обсудить со мной стратегию, чтобы я мог что-либо порекомендовать, лучше представляя возможности индикаторов. Если возникнут какие-то проблемы и сложности с освоением их работы, я естественно, буду оказывать тех поддержку.

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

 

На e-mail мне поступают письма с просьбой прислать демо версии индикаторов, чтобы посмотреть их работу. К сожалению, у меня нет демо версий. Для частичной компенсации этого, чтобы дать представление о работе 3 индикаторов - "Indicator Trend", "Indicator Power" и "Indicator Channel" в динамике, я решил в течении нескольких дней проводить демонстрацию работы в виде слайдов снятых с работающего на демо терминала. Чтобы не перегружать тему рисунками, буду показывать только слайды отражают какие-либо изменения в рыночной ситуации и изменение показаний индикаторов. Разница во времени терминала и форума 2 часа. Первый рисунок:

 

Второй слайд, я немного увеличил порог индикатора "Indicator Trend", так лучше, больше ничего корректировать не буду.