Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Neuroshell2
NoName
сообщение 25.4.2007, 17:02
Сообщение #1





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



NeuroShell2
http://www.tradersforum.net.ru/modules/fil...file.php?lid=31
(возможно, понадобиться зарегистрироваться)
там же есть русский help к ней.
В этой программе заложено множество архитектур нейронных сетей. Принцип работы совершенно другой, нежели в NS DT4. Для этой программы нужно подготовить файл с данными для тренировки сети и выходами, затем выделяются тестовый и экзаменационный наборы, выбирается архитектура и параметры сети, и осуществляется тренировка. Дальше можно получить исходник сети на С++ или в виде *.def файла (это будут самодостаточные нейронные сети).
Лично я делал *.def файл, а за тем использовал его в советнике. Таким образом решается проблема интрадея.
Не уверен, но вроде бы есть возможность совмесного использования NS2 и NS DT4.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
helena
сообщение 25.4.2007, 17:20
Сообщение #2





Группа: Активный участник
Сообщений: 194
Регистрация: 27.7.2006
Пользователь №: 802
Спасибо сказали: 4 раз(а)



пример прогноза индикатора на основе предикшена


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mick Jagger
сообщение 25.4.2007, 18:48
Сообщение #3





Группа: Активный участник
Сообщений: 58
Регистрация: 20.4.2006
Пользователь №: 34
Спасибо сказали: 0 раз(а)



Цитата(NoName @ 26.4.2007, 0:02) *

NeuroShell2
http://www.tradersforum.net.ru/modules/fil...file.php?lid=31
(возможно, понадобиться зарегистрироваться)
там же есть русский help к ней.
В этой программе заложено множество архитектур нейронных сетей. Принцип работы совершенно другой, нежели в NS DT4. Для этой программы нужно подготовить файл с данными для тренировки сети и выходами, затем выделяются тестовый и экзаменационный наборы, выбирается архитектура и параметры сети, и осуществляется тренировка. Дальше можно получить исходник сети на С++ или в виде *.def файла (это будут самодостаточные нейронные сети).
Лично я делал *.def файл, а за тем использовал его в советнике. Таким образом решается проблема интрадея.
Не уверен, но вроде бы есть возможность совмесного использования NS2 и NS DT4.

Спасибо за ссылку. русскую справку я скачал, а вот сам нейропакет...."Ошибка 404 - файл не найден".
Может где то ещё можно скачать эту программу. судя по твоему описанию, это то, что как раз мне необходимо.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 25.4.2007, 18:52
Сообщение #4





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Значит умерла ссылка, жаль.
Знаю что точно есть на пауке, вроде бы сам оттуда и качал.

P.S. Вот, нашлась ссылка: http://forex.kbpauk.ru/showflat.php/Cat/0/...age/0#Post95126
Только там нужно зарегистрироваться, а то ссылок на скачивание не увидишь.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mick Jagger
сообщение 25.4.2007, 19:26
Сообщение #5





Группа: Активный участник
Сообщений: 58
Регистрация: 20.4.2006
Пользователь №: 34
Спасибо сказали: 0 раз(а)



Вот нашёл ссылку NeuroShell2 : http://a.myneuro.net.ru/archive/NeuroShell2.zip

Без всяких регистраций на сайте.
Кстати, на пауке регистрация просто сумашедшая! И кто же там такое придумал....
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mick Jagger
сообщение 29.4.2007, 13:49
Сообщение #6





Группа: Активный участник
Сообщений: 58
Регистрация: 20.4.2006
Пользователь №: 34
Спасибо сказали: 0 раз(а)



Цитата(NoName @ 26.4.2007, 0:02) *

NeuroShell2
http://www.tradersforum.net.ru/modules/fil...file.php?lid=31
(возможно, понадобиться зарегистрироваться)
там же есть русский help к ней.
В этой программе заложено множество архитектур нейронных сетей. Принцип работы совершенно другой, нежели в NS DT4. Для этой программы нужно подготовить файл с данными для тренировки сети и выходами, затем выделяются тестовый и экзаменационный наборы, выбирается архитектура и параметры сети, и осуществляется тренировка. Дальше можно получить исходник сети на С++ или в виде *.def файла (это будут самодостаточные нейронные сети).
Лично я делал *.def файл, а за тем использовал его в советнике. Таким образом решается проблема интрадея.
Не уверен, но вроде бы есть возможность совмесного использования NS2 и NS DT4.


Привет Андрей!
Скачал, установил, разобрался с программой NeoruShell2. Хорошая программа!!! Дошёл до создания .def файлов. А вот как импортировать функции в МТ4 понять не могу.
Ну вот на пример из описания функций из NSHELL2.DLL:

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

FireNet - После того, как сеть подготовлена функцией OpenNet, функция FireNet используется для передачи значений входов сети и для
получения от нее значений выходов. И те, и другие должны представлять собой массивы двойной точности с плавающей запятой, объявленные в
Вашей программе. При использовании FireNet пропущенные данные не заменяются автоматически, как это делается, когда Вы указываете условия
в модуле Параметры тренировки и критерии остановки в NeuroShell 2. Это происходит потому, что нет никакого способа отличить пропущенные
данные от данных, равных нулю.


CloseNet - Вызовите эту функцию, когда Вам больше не надо будет использовать сеть. Она освободит всю память, занятую сетью. В следующий
раз, когда Вашей программе понадобится использовать эту сеть, ей потребуется снова вызвать OpenNet.

Прототипы и полные описания функций DLL для языка Си

OpenNet


int far PASCAL _export OpenNet(char far *defpath, int far *netnumber, int far *inputs, int far *outputs);



*defpath - это указатель на строку символов, содержащую путь к .DEF-файлу. Если путь содержит только имя файла, то этот файл должен быть
в текущем каталоге.

*netnumber - это указатель на целое число в Вашей программе, куда OpenNet поместит номер сети, который Вы будете использовать для
указания на сеть в функциях FireNet и CloseNet.

*inputs - это указатель на целое число в Вашей программе, куда OpenNet поместит ожидаемое сетью количество входов.

*outputs - это указатель на целое число в Вашей программе, куда OpenNet поместит ожидаемое количество выходов сети.


Если код возврата OpenNet отличен от нуля, это обычно происходит потому, что OpenNet не смогла найти действительного .DEF-файла в месте,
указанном переменной defpath.

В функцию OpenNet передаются 4 параметра. Первый параметр имеет тип char, в MQL4 типа char нет. Потом все параметры в эту функцию передаются через указатели. Видишь * в прототипе. А указателей в MQL4 нет. Ссылки (&) вот есть, а указателей нет. Но ссылки и указатели совсем разные вещи. Как ты решил эту проблему. ты же как то решил это, раз пишешь что использовал .def файлы в советнике?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 29.4.2007, 15:29
Сообщение #7





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Привет!
Да, в MQL нет адресной арифметики, но тут можно обыграть таким образм - передавать в функцию массив размером в один элемент, тогда всё проходит отлично. Вместо типа char используй string, этим параметром там задаётся путь к *.def файлу.

Извини, сейчас нет времени, но ближе к ночи я выложу заготовку эксперта. Там всё ясно и понятно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 29.4.2007, 16:09
Сообщение #8





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Вот нашёл у себя советник klot'а! Тут достаточно вставить свою начинку в нужные места. К сожалению самой сети я не нашёл.

Код

#import "NS2-32.dll"
int OpenNet(string defpath, int& netnumber[1], int& n_input[1], int& n_out[1]);
int FireNet(int& netnumber[1], double& inarray[], double& outarray[]);
int CloseNet(int& netnumber[1]);
#import

// StopLoss level
extern double sl = 85;
extern double tp = 252;
extern double Lots = 1;
extern int MAGICEXP = 888;
//---
static int prevtime = 0;
//----
int ret_O,ret_F;
int M=64;
string defpath="E:\Program Files\NeuroShell2\NewFolder\MACD\macd1.def";
int netnumber[1], N_in[1], N_out[1];
double inarray[],outarray[],aa[64];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   ret_O=OpenNet(defpath, netnumber, N_in, N_out);
  
     Print("netnumber[1]= ",netnumber[0], " N_in[1]= ",N_in[0], " N_out[1]= ",N_out[0]);
     ArrayResize(inarray,N_in[0]);
     ArrayResize(outarray,N_out[0]);

//----
   return(0);
  }

//-------------------------------------------------------------------+
void innet()
{
        int shift=0;
        
        inarray[0]=High[shift+4]-High[shift+3];
        inarray[1]=Low[shift+4]-Low[shift+3];
        inarray[2]=Close[shift+4]-Close[shift+3];
        inarray[3]=High[shift+3]-High[shift+2];
        inarray[4]=Low[shift+3]-Low[shift+2];
        inarray[5]=Close[shift+3]-Close[shift+2];
        inarray[6]=High[shift+2]-High[shift+1];
        inarray[7]=Low[shift+2]-Low[shift+1];
        inarray[8]=Close[shift+2]-Close[shift+1];
        inarray[9]=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,shift+1);
        inarray[10]=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,shift+2);
        inarray[11]=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift+1);
        inarray[12]=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift+2);
        inarray[13]=iOsMA(NULL,0,12,26,9,PRICE_CLOSE,shift+1);
        inarray[14]=iOsMA(NULL,0,12,26,9,PRICE_CLOSE,shift+2);

}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   if(Time[0] == prevtime) return(0);
   prevtime = Time[0];
  
   //---
   int poz=Check_for_open_pos();
  
   innet();
  
   ret_F=FireNet(netnumber, inarray, outarray);

   double sum=outarray[0]+outarray[1]+outarray[2];
   Comment (outarray[0], " ", outarray[1], " ", outarray[2]);
  
   outarray[0]=outarray[0]/sum;
   outarray[1]=outarray[1]/sum;
   outarray[2]=outarray[2]/sum;
  
   Comment("ret_F= ",ret_F, " outarray[0]= ",DoubleToStr(outarray[0],8),
   " outarray[1]= ",DoubleToStr(outarray[1],8)," outarray[2]= ", DoubleToStr(outarray[2],8));
  
   if( outarray[0]>outarray[2] && outarray[0]>outarray[1] && poz!=1) { buy_open( Bid-sl*Point,Bid+tp*Point); close_order(-1); }
   if( outarray[2]>outarray[0] && outarray[2]>outarray[1] && poz!=-1) { sell_open( Ask+sl*Point,Ask-tp*Point); close_order(1); }

   if( outarray[1]>outarray[2] && outarray[1]>outarray[0] && poz==1 ) close_order(1);
   if( outarray[1]>outarray[2] && outarray[1]>outarray[0] && poz==-1 ) close_order(-1);

//--- exit
   return(0);
  }
//===================================================================+
// Торговые функции                                                  |
//===================================================================+
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void buy_open(double SL, double TP)
  {
   int ticket, lasterror;
   RefreshRates();
   ticket = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits),5,
                        SL,TP,0,MAGICEXP,0,Aqua);
   if(ticket > 0)
     {
       if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           Print("BUY order opened : ", OrderOpenPrice());
//---  
     }
   else
       Print("Error opening BUY order : ", ErrorDescription(GetLastError()));
   return;
  }
//===================================================================+
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void sell_open(double SL, double TP)
  {
   int ticket, lasterror;
   RefreshRates();
  
   ticket = OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits),5,
         SL,TP,0,MAGICEXP,0,Red);
   if(ticket > 0)
     {
       if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           Print("Sell order opened : ", OrderOpenPrice());
//---
     }
   else
       Print("Error opening Sell order : ", ErrorDescription(GetLastError()));
   return;
  }
//===================================================================+
//+------------------------------------------------------------------+
//|   Закрытие ордеров n=1 - закрыть Buy, n=-1 - закрыть Sell        |
//+------------------------------------------------------------------+
void close_order(int n = 0)
{
   int nGetLastError;
   int nOrdersTotal =OrdersTotal();
   int i;
//----
  if(nOrdersTotal>0)
  {
   for( i=nOrdersTotal-1; i>=0; i--)
     {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       //nGetLastError = GetLastError();
       //----
       if(nGetLastError != 0)
         {
           Print("1_Error selecting order : ", ErrorDescription(nGetLastError)," i= ", i," OrdersTotal()= ",OrdersTotal());
           continue;
         }
       //----
       if(OrderMagicNumber() != MAGICEXP || OrderSymbol() != Symbol())  continue;
       //---- check order type
       if(OrderType() == OP_BUY && n == 1)
         {
           //----
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(),NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits), 3, Aqua);
               nGetLastError = GetLastError();
               if(nGetLastError != 0)
                  Print("2_Error closing BUY order : ", ErrorDescription(nGetLastError));
         }
       //----
       if(OrderType() == OP_SELL && n==-1 )
         {
           //----
               RefreshRates();  
               OrderClose(OrderTicket(), OrderLots(),NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits), 3, Yellow);
               nGetLastError = GetLastError();
               if(nGetLastError != 0)
                   Print("3_Error closing SELL order : ", ErrorDescription(nGetLastError));        
         }
     }
   }
return;
}
//===================================================================+
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Check_for_open_pos()
{
   int ticket,cnt,pos;
   int nGetLastError;
   //---
   pos=0;
   if (OrdersTotal()>0)
   {
      for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
         {
            OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
            //nGetLastError = GetLastError();
            //----
            if(nGetLastError != 0)
               {
               Print("5_Check_for_open_pos : ", ErrorDescription(nGetLastError)," i= ", cnt," OrdersTotal()= ",OrdersTotal());
               continue;
               }
            //---
            if(OrderMagicNumber()!=MAGICEXP || OrderSymbol()!=Symbol()
                                            || OrderCloseTime()!=0 ) continue;
            //---
            if(OrderType()==OP_SELL ) pos=-1;
            //---
            if(OrderType()==OP_BUY )  pos=1;
         }
   }
return(pos);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
  //---
  CloseNet(netnumber);  // close the network
  //----
  return(0);
}



P.S. Если ты планируешь и дальше копать по этой теме, то предлагаю открыть отдельную ветку по Нейрошелу2. Мне эта программа тоже интересна.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mick Jagger
сообщение 29.4.2007, 20:40
Сообщение #9





Группа: Активный участник
Сообщений: 58
Регистрация: 20.4.2006
Пользователь №: 34
Спасибо сказали: 0 раз(а)



Цитата(NoName @ 29.4.2007, 23:09) *

Вот нашёл у себя советник klot'а! Тут достаточно вставить свою начинку в нужные места. К сожалению самой сети я не нашёл.

P.S. Если ты планируешь и дальше копать по этой теме, то предлагаю открыть отдельную ветку по Нейрошелу2. Мне эта программа тоже интересна.


Спасибо большое за код! Я разобрался, теперь у меня всё работает. Жаль только, что разработчики MQL подстраиваются по синтаксис С, а возможность использования указателей не сделали. Поэтому и приходится так выкручиваться. Возможно и не надо такие объектно-ориентированные вещи как классы из С++, но указатели всё таки могли бы ввести, тем более это незаменимая штука при работе с динамическими библиотеками.
Да я планирую "копать" smile.gif по этой теме. Поэтому полностью поддерживаю тебя по отдельной ветки форума. Хотя NS2 и NST4 родственные программы, всё-таки NS2 выполняет задачи несколько по другому. Да и потом, подкупает русский интерфейс и классная справка с учебником, тоже кстати на русском языке. Написано просто и доступно, даже для новичков в нейросетях. Так что остаётся решить, кто же создаст отдельную ветку?smile.gif

Сообщение отредактировал Mick Jagger - 29.4.2007, 22:07
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 29.4.2007, 21:36
Сообщение #10





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Что-то не понял, где это русский интерфейс ??? У меня она на вражем языке, русская только справка smile.gif
Ветку создам завтра, и наверное попрошу КОТа что бы перенёс сообщения туда.

P.S. У меня просьба, подотри, пожалуйста, код из цитаты, а то пара сообщений целую страницу занимаютsmile.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему

 



- Текстовая версия Сейчас: 11.5.2024, 19:08