Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте уважаемые господа.
Надеюсь Erics на меня не обидется за то что я без его разрешения вылаживаю его сетку.
Но там по его словам не хватает блока предобработки и нормализации данных, а также нет входов.
Не могли бы вы привести простой пример полного исполнения данной сетки,чтоб работала,открывала и закрывала ордера.
Сам я ламер пока, но очень хочется учится,а разабраться на рабочем примере гораздо проще.
Помогите пожалуйста если вас не затруднит.
//+------------------------------------------------------------------+
//| PNNdayCandle.mq4 |
//| Copyright © 2007, Erics |
//| erics.fx@tut.by |
//+------------------------------------------------------------------+
#property copyright "Erics"
#property link "erics.fx@tut.by"
extern int Inputs = 36;
extern int Patterns = 400;
extern double sigma = 0.04;
extern double Treshold = 0.0;
extern int fcastbars=10;
double w[][36];
int b[];
double x[];
double Class[2];
double Neurons[2];
double D;
bool Buy, Sell, CloseBuy, CloseSell;
int time2close, time2study;
void init() {
D=2.0*MathPow(sigma, 2);
ArrayResize(w, Patterns);
ArrayResize(b, Patterns);
ArrayResize(x, Inputs);
}
void deinit() {
}
int start()
{
int ords, teacher;
if(Bars-1 < Patterns+fcastbars+1) return(0);
if (TimeCurrent()>Time[0]) return(0); // на сформировавшихся барах
// обучение
if (time2study<Time[0]) {
Neurons[0] = 0; Neurons[1] = 0;
for(int br=fcastbars+1; br<=Patterns+fcastbars; br++) {
for(int i=0; i<Inputs; i++) {
w[br-fcastbars-1][i] = Input(i, br);
}
// учитель
teacher = (Close[br-fcastbars] - Open[br-1]) > 0; // класс 1 при +закрытии, 0 - при -закрытии
b[br-fcastbars-1] = teacher;
Neurons[teacher]++;
}
time2study = Time[0] + Period()*60*fcastbars;
}
// классификация
// входы
for(i=0; i<Inputs; i++)
x[i] = Input(i, 1);
// радиальная функция
double Yi, d;
int inp;
Class[0]=0.0; Class[1]=0.0;
for(int p=0; p<Patterns; p++) {
for(Yi=0.0, d=0.0, inp=0; inp<Inputs; inp++)
d += MathPow(w[p][inp] - x[inp], 2.0);
Yi = MathExp(-d/D);
// принадлежность классу
Class[b[p]] += Yi;
}
// выход
if (Neurons[0]>0) Class[0]/=Neurons[0];
if (Neurons[1]>0) Class[1]/=Neurons[1];
double OUT = (Class[1] - Class[0])/(Class[1] + Class[0]);
// 0<OUT<=1 = Class1, -1<=OUT<=0 = Class0
ords = CalculateCurrentOrders(Symbol());
// торговые решения
Sell=False; Buy=False; CloseSell=False; CloseBuy=False;
if (OUT < -Treshold) Sell=True;
if (OUT > Treshold) Buy=True;
if (OUT > 0 ) CloseSell=True;
if (OUT < 0 ) CloseBuy=True;
if (ords>0) CheckForClose();
if (ords<1) CheckForOpen();
return(0);
}
double Input(int inp, int shift)
{
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{ double lot=0.1;
double sl=0, tp=0;
RefreshRates();
if (Sell) {
if(tp!=0) tp=Bid-tp*Point;
if(sl!=0) sl=sl*Point+Ask;
OrderSend(Symbol(),OP_SELL,lot,Bid,0,sl,tp,"",0,0,Red);
}
if (Buy) {
if(tp!=0) tp=tp*Point+Ask;
if(sl!=0) sl=Bid-sl*Point;
OrderSend(Symbol(),OP_BUY,lot,Ask,0,sl,tp,"",0,0,Green);
}
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
RefreshRates();
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{Print(GetLastError()); break; }
if(OrderType()==OP_BUY && CloseBuy)
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
if(OrderType()==OP_SELL && CloseSell)
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
int CalculateCurrentOrders(string symbol)
{
int buys=0, sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())// && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP) buys++;
if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) sells++;
}
}
return(buys+sells);
}