Нейронная сеть в виде скрипта - страница 4

 
rip:
YuraZ:

нормализовывать не всегда нужно, кто сказал что сеть МОЖЕТ и ДОЛЖНА работать только с 0 и 1 ?


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

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

к сожалению это не исходник


впрочем пример который я дал! он как бы уже нормализован

условие есть два диапазона


1 0-100

2 10-30


необходимо просто найти отношение положения в одном диапазоне - которое известно к

по сути это масштабирование

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

В скрипте сигмоид [-1;+1]. Если заменить скажем на экспоненциальную ... или квадратный корень.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


вот пример создания сети ... на вход подается LOW т е нет нормализации

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


вот пример создания сети ... на вход подается LOW т е нет нормализации


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

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


Кстати, там в статье нигде не отображено какая ф-ция активации используется. Судя по всему, что-то с областью определения [-inf;+inf] or [0;+inf] ...

 

немного изменил программу!

чуточку изменил формат вывода на экран


теперь СКРИПТ считает своим долгов вычислить с высокой точностью выходные данные

программа конечно не универсальная уже получилась а заточенная под кол входов и выходов

но размер скрытого слоя! подбирается в процессе обучения



следующий релиз - попробую сделать гибким по количеству входов и выходов

и если получится добавлю генетическим алгоритмом

цель которого будет убийство НЕЙРОНОВ с большим количеством ошибок

и размножение нейронов с малым количеством ошибок!

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

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


1 Скорость обучения на текущий момент низкая

2 изменение - количества нейронов скрытого 1-го уровня случайное без логики

3 остановка обучения при полученни высокой точности по образцу данных на входе и выходе


Файлы:
 

Как пользоваться этим? Наложил на график скрипт, кучи цифр начали переписываться... Что они говорят эти цифры?

 
Blast:

Как пользоваться этим? Наложил на график скрипт, кучи цифр начали переписываться... Что они говорят эти цифры?

А Вам зачем ? Я, имея свой собственнй алгоритм тренировки сети по ГА и то с трудом в коде разобрался - время надо на это тратить, понять куда входы пихнуть, как из этого выхода вывести и когда бай-сел делать и вообще можно ли ? Или Вы тут за граалем пробегали ?

 
Loknar:
Blast:

Как пользоваться этим? Наложил на график скрипт, кучи цифр начали переписываться... Что они говорят эти цифры?

А Вам зачем ? Я, имея свой собственнй алгоритм тренировки сети по ГА и то с трудом в коде разобрался - время надо на это тратить, понять куда входы пихнуть, как из этого выхода вывести и когда бай-сел делать и вообще можно ли ? Или Вы тут за граалем пробегали ?

Blast не ищите тут советника или индикатора - до этого еще далеко


это скоре изучение принципов работы нейросети причем на MQL4

---

вообще разумно это писать на C++ в виде DLL если цеплять к MT, или иных языках - быстрых


Loknar - это лишь модификация скрипта выложенного в начале с попыткой получить более точные данные на выходе

--

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


---

хочу попробовать что то типа

3 выхода

на выходе не тупо 0 или 1 или -1 0 +1 а некий диапазон

x 0 0 - бай удержание бай

0 x 0 флет ( выход из бай или селл )

0 0 x селл удержание селл

где х не является 0 или 1 а имеет некую девитацию в неком диапазоне к примеру -1.000 0.000 +1.000

т е может принимать значение скажем 0.1122 или -0.012


комбинация 3 выходов анализируется на предмет пересечения границ


входы 9 на каждом ТФ - берем M1 M5 M15 M30 H1 H4 итого 54 входа

подаем разницу между средними 3 5 8 13 21 34 55 89 144 233 по каждому тф

итого 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 итого 9 на каждом тф

получаем что то типа ВЕЕРА СРЕДНИХ в представлении сетки... :-) в матрице

когда имеем что то типа паттерн 2 3 4 5 6 7 8 9 10 11 веер полностью раскрылся вверх судя по всему селл

когда имеем паттерн -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 веер полностью раскрылся вниз - БАЙ

циферки условные бывает и такой паттерн -1 -3 -7 - 10 -15 -20 -30 -40 -80 на большем тф



---

обучающая выборка что то типа


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

Подготовка данных для обучения





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
Blast:

Как пользоваться этим? Наложил на график скрипт, кучи цифр начали переписываться... Что они говорят эти цифры?

А Вам зачем ? Я, имея свой собственнй алгоритм тренировки сети по ГА и то с трудом в коде разобрался - время надо на это тратить, понять куда входы пихнуть, как из этого выхода вывести и когда бай-сел делать и вообще можно ли ? Или Вы тут за граалем пробегали ?

Изначально мне нравится сама идея нейронных сетей. О ней знаю только лишь, что имея 1000 точек каким-то образом сеть сойдется в одну точку... и что автотрейдинг был выйгран с советником на алгоритме сетей. У меня есть планы создать свой вариант такой сети, но на данном этапе я непонимаю ничего, ни в mql4 ни в нейронных сетях.

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

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

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

 

ЭТА ЖЕ СЕТЬ

YuraZ:

немного изменил программу!

чуточку изменил формат вывода на экран

теперь СКРИПТ считает своим долгов вычислить с высокой точностью выходные данные

программа конечно не универсальная уже получилась а заточенная под кол входов и выходов

но размер скрытого слоя! подбирается в процессе обучения



следующий релиз - попробую сделать гибким по количеству входов и выходов

и если получится добавлю генетическим алгоритмом

цель которого будет убийство НЕЙРОНОВ с большим количеством ошибок

и размножение нейронов с малым количеством ошибок!

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

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


1 Скорость обучения на текущий момент низкая

2 изменение - количества нейронов скрытого 1-го уровня случайное без логики

3 остановка обучения при полученни высокой точности по образцу данных на входе и выходе


ЭТА ЖЕ СЕТКА но написанная на Microsoft Visual C++ 6.0

скорость работы на порядки выше чем на MQL4

алгоритм не менялся, перенос с MQL4 на C++ максимально прямой, без применения объектов - классов

Файлы:
yzpnn.zip  63 kb
 

Еще вариант но на MQL


просто попытка работы на M1 показывает текущее направление тренда

выход 3 числа, по идее можно не обучать при пуске - а сразу взять готовые Веса - обучить заранее


---

9 входов на которые подается нормализованная разность мувингов

---

out-1 out-2 out-3 выход

0.9 0.01 0.01 trend up

0.01 0.9 0.01 flet

0.01 0.01 0.9 trend Down



---

планирую добавить 3-4 таймфрейма и обсчитывать из сразу!

PNN когда уже веса накрутила работает очень быстро

---


код тестовый эксперементальный - прошу не пинать






Файлы:
Причина обращения: