Вот нашёл у себя советник
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. Мне эта программа тоже интересна.