"Другие Нейросети." Размышления наивного дилетанта.

 

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


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

Среди всех архитектур я не нашел ничего лучше, чем "Самоорганизующаяся карта Кохонена (англ. Self-organizing map — SOM) — соревновательная нейронная сеть с обучением без учителя, выполняющая задачу кластеризации". В качестве программы для "анализа" выбрал "Viscovery SOMine" аж 1999года.


(Сразу скажу все популярно-околонаучные книжкам читал, даже не безызвестную "Курсовую работу" :). На всех сайтах "побывал".)

Вопреки всем изложенным в этих вумных работах посылкам, решил нАчать с индикаторов.

Наваял простенький скрипт - во вложении. Прогнал на 30 минутках по Евро с 2004 по начало апреля 2008г. В дальнейшем работал с файлом за 2007г.

Суть скрипта - на текущем баре смотрю вперед и ищу в пределах окна "максимум Хая" и "минимум Лова". Вычитаю их из текущего Клоза и условно называю BUY и SELL (вариант оооочень упрощенный, но для начала).

  BarHigh = iHighest(NULL, 0, MODE_HIGH, WinSize, i - WinSize);
  BarLow = iLowest(NULL, 0, MODE_LOW, WinSize, i - WinSize);
...
  FileWrite(handle,
...
            iHigh(NULL, 0, BarHigh), 
            iHigh(NULL, 0, BarHigh) - iClose(NULL, 0, i), 
            iLow(NULL, 0, BarLow), 
            iLow(NULL, 0, BarLow) - iClose(NULL, 0, i)
           );

Надеюсь не ошибся :)

Рядышком вывожу разные индикаторы с неизменными!!! параметрами. Загружаю в Эксель и обрабатываю в SOMine.

И вот что получилось по данным 2007г.


Т.е. выделены области, когда было движение не менее 70 пунктов в течении следующих 20 баров.

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

В итоге наваял примитивнейший советник, который выставляет отложенные ордера по обе стороны от цены с фиксированным TP и SL и временем жизни 20 раз по 30 минут.

Условие выставления ордеров - согласно полученным диапазонам:

   && (indRSI > 26 && indRSI < 77)
   && (indAC > -0.0011 && indAC < 0.0014)
   && (indAO < 0.005)
   && (indMomentum > 99.7 && indMomentum < 100.3)
   && (indADX_MAIN  < 30)
   && (indADX_MINUSDI > 7 && indADX_MINUSDI < 24)
   && (indADX_PLUSDI < 27)
   && (indATR < 0.001)

Оптимизировал 2 параметра (TP=SL и отступ от цены) за 2007 год и, с полученными параметрами

extern int     TPSL     = 85;
extern int     Delta    = 23;

, прогнал за 2008г.


Получил на OOS=2008г.

Баров в истории        4270
Смоделировано тиков        657831
Качество моделирования        90.00%
Ошибки рассогласования графиков        0
Начальный депозит        10000
Чистая прибыль        424.32
Общая прибыль        1108.08
Общий убыток        -683.76
Прибыльность    1.62    
Матожидание выигрыша        20.21
Абсолютная просадка        219.93
Максимальная просадка    379.38    -3.73%
Относительная просадка    3.73%    -379.38
Всего сделок    21

Стал "упрощать" условия.... В итоге без изменения результатов прогона, у меня остались

//   && (indRSI > 26 && indRSI < 77)
//   && (indAC > -0.0011 && indAC < 0.0014)
//   && (indAO < 0.005)
//   && (indMomentum > 99.7 && indMomentum < 100.3)
   && (indADX_MAIN  < 30)
   && (indADX_MINUSDI > 7 && indADX_MINUSDI < 24)
   && (indADX_PLUSDI < 27)
   && (indATR < 0.001)

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


Зачем пишу - а фиг знает. Вдруг кто-то проговорится про свои наработки :) или по другому интерпретирует данные. Опять же "онлайновая записная книжка". :)

Почему здесь, а не на Пауке - все-таки чуть-чуть ближе к MQL4, да и здесь живее будет


ЗЫ. Пока из индикаторов смотрел только

            iRSI(NULL, 0, 14, PRICE_MEDIAN, i),
            iMomentum(NULL, 0, 14, PRICE_MEDIAN, i),
            iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_MAIN, i),
            iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_PLUSDI, i),
            iADX(NULL, 0, 14, PRICE_MEDIAN, MODE_MINUSDI, i),
            iAC(NULL, 0, i),
            iAD(NULL, 0, i),
            iATR(NULL, 0, 14, i),
            iAO(NULL, 0, i),
            iCCI(NULL, 0, 14, PRICE_MEDIAN, i),

Да еще "Клотовского Фурье от Клоза"

    for(iF=0; iF<=N-1; iF++)
    {
      sig=Close[iF+i];
      aa[iF]=sig;
    }
    realfastfouriertransform(aa, tnn1, false); 
    InSigNormalize(aa); //Нормализация значений 
   
    //--- Вывод спектрограммы на экран
    OutStr = "";
    for(iF=0; iF<=N-1; iF++)
    {
     OutStr = OutStr + " " + DoubleToStr(aa[iF*2],8) + " " + DoubleToStr(aa[iF*2+1] ,8);
    }
Файлы:
csvrstat.mq4  6 kb
 

Собственно советник

Файлы:
 

Прошу прощения. Я не разбираюсь в нейросетях, но как и всем присутствующим, тож хочется погонять советник и хоть чуть вникнуть.

При компиллировании эксперта выдается, что нет в папке INCLUDE

'TradeLib.mqh' - cannot open the program file

Где взять этот файл?

 
rid:

Прошу прощения. Я не разбираюсь в нейросетях, но как и всем присутствующим, тож хочется погонять советник и хоть чуть вникнуть.

При компиллировании эксперта выдается, что нет в папке INCLUDE

'TradeLib.mqh' - cannot open the program file

Где взять этот файл?

Все время забываю прикреплять.

Но в советнике и в скрипте - только "результаты", а вся "обработка" в SOMine.

Я вообще считаю, что "каждому овощу свой фрукт" и нейросети "обрабатывать" лучше в соответствующих/специализированных программах и/или подключать dll'ки.

Файлы:
tradelib.mqh  13 kb
 
SergNF:

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

Критерий истины - практика. Ты самых горячих фанатов попроси показать стейтменты со счета, где их НС торгует, и всё будет ясно. :-)


Среди 2х тем на этом сайте мне не нравится то, что все (и я в том числе) упорно пытаются предсказать/предугадать будущую цену вплоть до 4го знака после запятой.

Предсказать, я считаю, можно.


Но зачем? Ведь все прогнозы носят вероятностный характер и справедливы лишь на текущий момент. Выставишь ты T/P на спрогнозированную цену. А потом придет новый тик, ситуация немного поменяется, и твой прогноз немного скорректируется. А ты оставишь T/P на месте, без учета новых данных? Из принципа, что ли? :-)


Разумней постоянно корректировать свою ценовую цель. А такой процесс по своему результату равняется процессу, в котором мы постоянно определяем лишь направление ордера... Так что в базовом функциональном смысле оба способа равноценны.


Отличия могут проявляться лишь в структуре сети (ее надо грамотно подобрать индивидуально под каждый способ) и в дополнительных фичах, которые сеть даст торговой системе. Например, НС, прогнозирующая направление, фактически выдает на своем выходе еще и степень уверенности в своем прогнозе, и это можно задействовать для управления размером ордеров с целью уменьшения глубины просадок и повышения стабильности прибыли... А НС, дающая цену, позволяет торговой системе выставлять адекватный T/P на случай обрыва связи.


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


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

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


Среди всех архитектур я не нашел ничего лучше, чем "Самоорганизующаяся карта Кохонена" . В качестве программы для "анализа" выбрал "Viscovery SOMine"

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

 
SergNF:

Среди 2х тем на этом сайте мне не нравится то, что все (и я в том числе) упорно пытаются предсказать/предугадать будущую цену вплоть до 4го знака после запятой.


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

Все нижесказанное ИМХО.

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

Со вторым пунктом тоже согласен :-)

Не вижу смысла использовать для этого НС. Т.е. смысл есть, но не больше чем от любого индикатора. Ведь на вход подавать кроме приращений нечего. Других параметров кроме (+) и (-) нету (точнее, имеются, но они не доступны). (да, еще паттерны, но то что они работают с вероятностью 50/50 мало распространяются, а те которые работают, и так видны невООруженным :-) взглядом). Не агитирую, но загляните на эту ветку Там подняты аналогичные вопросы (тренд/флэт), но решение другое и результаты интересные.

 
Xadviser:

...Не агитирую, но загляните на эту ветку Там подняты аналогичные вопросы (тренд/флэт), но решение другое и результаты интересные.

Смотрю/читаю, но ... последний Ваш рисунок, на котором показан желтым участок флета нарисован и РАСПОЗНАН после прошествия 6 баров.

Одним из ключевых ... "пожеланий" komposter'а на 10й странице было убедиться в том, "какой процент этих трендов не исчезает".

Извините, но похоже конечно не на поиск грааля, но "граального индикатора". Были уже разные Супертренды и т.п.

Да и ... на Вашем же последнем рисунке ... у меня другое представление о флете :)

 
ds2:

Критерий истины - практика. Ты самых горячих фанатов попроси показать стейтменты со счета, где их НС торгует, и всё будет ясно. :-)

+
Предсказать, я считаю, можно.

:)


Но зачем? Ведь все прогнозы носят вероятностный характер и справедливы лишь на текущий момент. Выставишь ты T/P на спрогнозированную цену. А потом придет новый тик, ситуация немного поменяется, и твой прогноз немного скорректируется. А ты оставишь T/P на месте, без учета новых данных? Из принципа, что ли? :-)

Получается, практически, из принципа. Я не понимаю какой смысл прогноза, если его надо корректировать на каждом баре. Особеенно, когда пытаются это делать на 15ти минутках. Получается, что-то типа ... будет 1.5936, нет 38, нет 32 и т.д. - грош цена такому прогнозу. А если говорить еще и о сигме в 3%, то ....

Отличия могут проявляться лишь в структуре сети (ее надо грамотно подобрать индивидуально под каждый способ) и в дополнительных фичах, которые сеть даст торговой системе. Например, НС, прогнозирующая направление, фактически выдает на своем выходе еще и степень уверенности в своем прогнозе, и это можно задействовать для управления размером ордеров с целью уменьшения глубины просадок и повышения стабильности прибыли... А НС, дающая цену, позволяет торговой системе выставлять адекватный T/P...

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


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

Не совсем. Я имел ввиду ... выставлять "пробойники" или "отбойники". Ну и закрываться при изменении ... предсказания.

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

Пока "тыкаю пальцами" коли все мои советники выставили взаимные локи :):):):)


Суть, но оооочень на пальцах.

Берутся входные вектора, одним из которых является "будущее движение". Ищутся кластеры наиболее близких входных векторов и рисуется ... "топологическая карта". (Лучше прочитать научно популярные книжки, сайт basegroup, "тора центр" и т.п.)

В итоге получается (на первом рисунке), что "приличное" падение цен в 2007году ... сгруппировано в "правом кружочке" в окошке "SELL" (чем синее, тем лучше :) ). Этому "кружочку" соответствуют аналогичные "кружочки" у других индикаторов. Вот только ярко выраженного разделения цветов между "кружочком" и "горочкой" (будущий рост цен - на первом рисунке красенькая область в окошке BUY) в окнах индикаторов нет. Из чего я делаю выводы, что ни один из моих индикаторов не просигнализировал с достаточной долей вероятности о будущем росте/падении. Но я сделал вывод, что некоторые индикаторы были в определенном диапазоне значений перед самим движением, что позволило бы при будущем (эта критичная оговорка - камень преткновения любого трейдера работающего по любой технологии) показании этих индикаторов встать в бай или селл :), т.е. на пробой ... чего-нибудь.

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

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

А вообще есть и dll'ки и разработки klot'а на mql "метода Кохонена". Вот только как автоматически распознавать "кружочек" и "горочку" и, еще сложнее, автоматически, в МТС, отсеивать "пестрые" индикаторы в этих "кружочках" и "горочках".... Все это и приводит в "группы фанатов соответствующих программ" из начала поста.


Все очень общё и на пальцах


:)

 
SergNF:
Xadviser:

...Не агитирую, но загляните на эту ветку Там подняты аналогичные вопросы (тренд/флэт), но решение другое и результаты интересные.

Смотрю/читаю, но ... последний Ваш рисунок, на котором показан желтым участок флета нарисован и РАСПОЗНАН после прошествия 6 баров.

Одним из ключевых ... "пожеланий" komposter'а на 10й странице было убедиться в том, "какой процент этих трендов не исчезает".

Извините, но похоже конечно не на поиск грааля, но "граального индикатора". Были уже разные Супертренды и т.п.

Да и ... на Вашем же последнем рисунке ... у меня другое представление о флете :)

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

1. Не ставилась задача распознавания никоим образом. Ставилась - выяснить пребывание цены в тренде и флэте при заданных критериях тренда и флэта В ИСТОРИИ. Применительно к рисунку, в том случае указано на смену направления, а не на флэт, а вот будет это флэтом или нет, станет известно еще позднее, когда сформируется новый сегмент. Поэтому о предсказании и речи быть не может (к тому же я не верю в такую возможность и у меня есть простые тому подтверждения). Полученные сведения планировалось использовать для подтверждения работоспособности ТС (в частности меня интересовал % трендовой составляющей, д.б. близко к 50%), что и подтвердилось исследованиями.

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

3. Поиск Грааля и граального индикатора не ведётся (см. что написано выше). Это уже по ходу сделались выводы о том, что (применимо к некоторым парам) направление тренда есть направление (преимущественно) движения цены.

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

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

 
Xadviser:
Смотрели/читали, но не очень внимательно :-) (без обид, надеюсь).

Я и не отпираюсь

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

Не всегда. У меня сейчас на демо и реале крутятся куча советников, в т.ч. и "настоянных" на разных веяниях. И Гридеры и ТА и НС. (По некоторым я даже забыл что они из себя представляют :) )


1. Не ставилась задача распознавания никоим образом. Ставилась - выяснить пребывание цены в тренде и флэте при заданных критериях тренда и флэта В ИСТОРИИ.

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


Наверное в связи с тем, что "Смотрели/читали, но не очень внимательно" - изюминки то для практикующего трейдера и не прочувствовал. А статистика ... "Лженаука" :):):)


Да даже если в будущем и будет

% трендовой составляющей, д.б. близко к 50%

Это Н И Ч Е Г О не значит. Это не означает, что надо выкинуть трендовые (флетовые) ТС и использовать флетовые (трендовые). (А это еще одна мысль, которую, как мне показалось, Вы хотели "вложить" в ветку)
 
SergNF:
Я понял (увидел для себя) возможность подхода описанного в той ветке только как ....... упорядочивание/группировку индикаторов и советников на трендовые и флетовые. Т.е. прогнать советник на истории, отобразить его сделки построить "тот индикатор" и наглядно убедиться, что он флетовый, а на тренде сливает и т.п. Но это все слева от нулевого бара, а вот что справа.... :(

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

А статистика ... "Лженаука" :):):)

Не знаю, что вы имели ввиду, но для меня это не наука, а СПОСОБ.

Это Н И Ч Е Г О не значит. Это не означает, что надо выкинуть трендовые (флетовые) ТС и использовать флетовые (трендовые). (А это еще одна мысль, которую, как мне показалось, Вы хотели "вложить" в ветку)

Это верно подмечено :)


Если мне всё же удалось вас убедить провести статисследование на наличие тренда/флэта по вашему критерию (и мне всё равно каким способом вы его получите НС или по другому), то я буду признателен, если вы выложите (лучше на той ветке) свои результаты. Всегда полезно сравнить решения различными методами.

С наилучшмими пожеланиями.