Помогите исправить ошибку в советнике (голову сломал не найду и все!)

 

Советник компилируется, но не открывает сделки в тестере

 extern int MAGICMA                      = 777;    // магик советника

extern double lot                       = 0.1;    // торговий лот

extern double SL                        = 0.0000; // стоп 

extern double TP                        = 0.0000; // тейк 

extern int Vistavlat_SL                 = 0;      // виставлять стоп да=1, нет=0

extern int Vistavlat_TP                 = 0;      // виставлять стоп да=1, нет=0

extern int WPR_period                   = 50;     // период WPR

extern int Moving_55                    = 55;     // МА аналізу відкриття/закриття

extern int Moving_1                     = 1;      // МА відкриття ордеру

extern int Moving_89                    = 89;     // МА тренда 

extern int Moving_21                    = 21;     // МА ордеру

extern double Pip                       = 0.0030; // тейк 

extern int MovingShift                  = 0;      // Сдвиг МА

extern bool QQQ                         = true;   // последнее место WPR если в зоне 0 - 20 то true если в зоне -80 - 100 то false


//+------------------------------------------------------------------+

bool opnbuy;

string parabuy ;

string parasell ;

int res;

string A1;

string A2;

string A3;

string A4;

string A5;

string D1;

string D2;

string D3;


//+------------------------------------------------------------------+

//| Відкриття сделок                                  |

//+------------------------------------------------------------------+

void CheckForOpen(bool QQ)

  {

   if(OrdersTotal()>0) return;

//---- Торговля на першому тіку нового бара

   if(Volume[0]>1) return;

//---- Moving Average 

 double  ma1_0=iMA(0,0,Moving_1,MovingShift,MODE_EMA,PRICE_CLOSE,0);

 double  ma1_1=iMA(0,0,Moving_1,MovingShift,MODE_EMA,PRICE_CLOSE,1);

 double  ma55_0=iMA(0,0,Moving_55,MovingShift,MODE_EMA,PRICE_CLOSE,0);

 double  ma55_1=iMA(0,0,Moving_55,MovingShift,MODE_EMA,PRICE_CLOSE,1);

 double  ma89_0=iMA(0,0,Moving_89,MovingShift,MODE_EMA,PRICE_CLOSE,0);

 double  ma89_1=iMA(0,0,Moving_89,MovingShift,MODE_EMA,PRICE_CLOSE,1);

//---- умова відкриття sell 

   if(ma55_0<ma89_0 && ma1_1>ma55_1 && ma1_0<ma55_0 && QQ==true)  

     {

      res=OrderSend(0,OP_SELL,lot,Bid,3,(Bid+SL)*Vistavlat_SL,(Bid-TP)*Vistavlat_TP,"",MAGICMA,0,Red);

      return;

     }

//---- умова відкриття buy

   if(ma55_0>ma89_0 && ma1_1<ma55_1 && ma1_0>ma55_0 && QQ==false)  

     {

      res=OrderSend(0,OP_BUY,lot,Ask,3,(Ask-SL)*Vistavlat_SL,(Ask+TP)*Vistavlat_TP,"",MAGICMA,0,Blue);

      return;

     }

//----

  }

//+------------------------------------------------------------------+

//| Закриття сделок                            |

//+------------------------------------------------------------------+

void CheckForClose()

  {

//---- Торговля на першому тіку нового бара

//   if(Volume[0]>1) return;

//---- Moving Average 

   for(int i=0;i<OrdersTotal();i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;

//---- Moving Average 

 double  ma1_1=iMA(0,0,Moving_1,MovingShift,MODE_EMA,PRICE_CLOSE,1);

 double  ma55_1=iMA(0,0,Moving_55,MovingShift,MODE_EMA,PRICE_CLOSE,1);


 

      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

      //---- check order type 

      if(OrderType()==OP_BUY)

        {

        if(ma55_1>ma1_1) 

        {

         OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

        }

         break;

        }

      if(OrderType()==OP_SELL)

        {

        if(ma55_1<ma1_1) 

        {

         OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

        }

         break;

        }

     }

//----

  }

//+------------------------------------------------------------------+

//| Start function                                                   |

//+------------------------------------------------------------------+

void start()

  {

//---- check for history and trading

   if(Bars<100 || IsTradeAllowed()==false) return;

//---- 

OrderSend(0,OP_SELL,lot,Bid,3,(Bid+SL)*Vistavlat_SL,(Bid-TP)*Vistavlat_TP,"",MAGICMA,0,Red);

 double WPR = iWPR(0,0,WPR_period, MovingShift) ;

 if (WPR<-20.00 && WPR>-80.00) QQQ = QQQ;

 if (WPR>-20.00 || WPR<-80.00)

 {

 if (WPR>-20.00) QQQ = true;

 if (WPR<-80.00) QQQ = false;

 }

   CheckForOpen(QQQ);

   CheckForClose();

//----

 return;

  }

//+------------------------------------------------------------------+

 

Извините, но кнопку SRC (для вставки кода в пост) вы так же не нашли?

P./S.: Вопросы по кодам для МТ4 логичнее задать на форуме по  МТ4.

MQL4: форум по механическим торговым системам и тестированию стратегий
  • www.mql5.com
MQL4: форум по механическим торговым системам и тестированию стратегий
 
Vahtan:

Советник компилируется, но не открывает сделки в тестере

В наименовании инструмента нужно указать явно NULL (или Symbol()) вместо числа 0.

Замените iMA(0,...) на iMA(NULL,...). Аналогично в iWPR и OrderSend.

P.S. Во избежание ошибок при вызове OrderSend для вычисленных уровней Stop Loss/Take Profit нужно использовать нормализованные цены.

 
Automated-Trading:

В наименовании инструмента нужно указать явно NULL (или Symbol()) вместо числа 0.

Замените iMA(0,...) на iMA(NULL,...). Аналогично в iWPR и OrderSend.

P.S. Во избежание ошибок при вызове OrderSend для вычисленных уровней Stop Loss/Take Profit нужно использовать нормализованные цСсС

 

Спасибо все работает

 

Причина обращения: