Neuroshell2 |
Здравствуйте, гость ( Вход | Регистрация )
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 раз(а) |
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 раз(а) |
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 раз(а) |
Вот нашёл у себя советник klot'а! Тут достаточно вставить свою начинку в нужные места. К сожалению самой сети я не нашёл. P.S. Если ты планируешь и дальше копать по этой теме, то предлагаю открыть отдельную ветку по Нейрошелу2. Мне эта программа тоже интересна. Спасибо большое за код! Я разобрался, теперь у меня всё работает. Жаль только, что разработчики MQL подстраиваются по синтаксис С, а возможность использования указателей не сделали. Поэтому и приходится так выкручиваться. Возможно и не надо такие объектно-ориентированные вещи как классы из С++, но указатели всё таки могли бы ввести, тем более это незаменимая штука при работе с динамическими библиотеками. Да я планирую "копать" по этой теме. Поэтому полностью поддерживаю тебя по отдельной ветки форума. Хотя NS2 и NST4 родственные программы, всё-таки NS2 выполняет задачи несколько по другому. Да и потом, подкупает русский интерфейс и классная справка с учебником, тоже кстати на русском языке. Написано просто и доступно, даже для новичков в нейросетях. Так что остаётся решить, кто же создаст отдельную ветку? Сообщение отредактировал Mick Jagger - 29.4.2007, 22:07 |
NoName |
29.4.2007, 21:36
Сообщение
#10
|
Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) |
Что-то не понял, где это русский интерфейс ??? У меня она на вражем языке, русская только справка
Ветку создам завтра, и наверное попрошу КОТа что бы перенёс сообщения туда. P.S. У меня просьба, подотри, пожалуйста, код из цитаты, а то пара сообщений целую страницу занимают |
Текстовая версия | Сейчас: 11.5.2024, 19:08 |