Return value of orderclose should be checked mql4 как исправить

I get this warning for OrderClose()return value of 'OrderClose' should be checked...

However, It does not close my open orders

//+------------------------------------------------------------------+
//|                                                 functiontest.mq4 |
//|                                                 function testing |
//|                      Function Testing                            |
//+------------------------------------------------------------------+
#property copyright "Open Function Testing"


//---- input parameters
extern double LotSize=0.1;
extern int    TakeProfit=20;
extern int    StopLoss=10;
extern int    AB_distance=10;
extern int    MagicNumber=123486;

//+++++ user can change retrace and/or extension:
extern double fibo_retrace=0.500;  //Got something screwed up here
extern double fibo_extension=0.618;  //Got to fix this too
  
//reference: http://www.forexfibonacci.com/calculate_fibonacci_levels/04/

double val1;
double val2;

//+------------------------------------------------------------------+
//| put custom functions here first                                   |
//+------------------------------------------------------------------+




//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
double mlots = AB_distance*10; //A to B distance normalizer

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
  
  
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   static datetime PreviousTime=0;
      if(PreviousTime==Time[0])
         return(0);
      else PreviousTime=Time[0]; // Should prevent another this bar if it runs through and returns back to the top of start.
      
  macdclosetrade();
  macdsignaltrade(); 
                      

//+------------------------------------------------------------------+
//| end start function                                               |
//+------------------------------------------------------------------+                
   return(0);
   }    


//+------------------------------------------------------------------+
//|     My Functions (testing)                                       |
//+------------------------------------------------------------------+

void macdsignaltrade()
{
   double faster=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);//MODE_MAIN
   double slower=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
   double prevfaster=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);//MODE_MAIN previous faster
   double prevslower=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2); //MODE_SIGNAL previous slower
   //make one for shift 3 and 4 to evaluate the fractals
   
   if(prevfaster < prevslower && faster > slower)OrderEntry(0);
      //Print(" MACD UP");
   if(prevfaster > prevslower && faster < slower)OrderEntry(1);
      //Print(" MACD DOWN");
 
}


void engulfingsignal() //Bullish Engulfing Candle
{
   if(Open[2] > Close[2]        //bear candle identified
      && Open[1] < Close[1]  //bull candle identified
      && Open[1]<= Close[2]  //bull engulfing condition
      && Open[2] < Close[1]) Print(Close[1]," Bullish Engulfing Candle "," and engulfingsize = ",DoubleToStr(Close[1]-Open[1],Digits));  
      //DoubleToStr( Close[1]-Open[1],Digits) forums help
     
   if(Open[2]<Close[2]//bull candle identified
      && Open[1]>Close[1]//bear candle identified
      && Open[1]>= Close[2]  //bear engulfing condition
      && Open[2] > Close[1]) Print(Close[1]," Bearish Engulfing Candle "," and engulfingsize = ",DoubleToStr(Close[1]-Open[1],Digits));  
      //DoubleToStr( Close[1]-Open[1],Digits) forums help);
}

void martingale()
{
//future function
// to double lot sizes each time a trade loses
}

int fractaltrade()
{
//future function
// needs to determine the ABDC's and trade entries
return(0);
}


void macdclosetrade()
{
   
   double faster=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);//MODE_MAIN
   double slower=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
   double prevfaster=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);//MODE_MAIN previous faster
   double prevslower=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2); //MODE_SIGNAL previous slower
   

   for(int i = OrdersTotal()-1; i >= 0 ; i--)
   int result;
      { 
      if(OrderSelect(i, SELECT_BY_POS))  
         if(OrderMagicNumber() == MagicNumber)        
            if(OrderSymbol()== Symbol())
               if(OrderType() == OP_BUY)          
                  if(prevfaster > prevslower && faster < slower) //if direction goes down on a buy order then close the order
                     {
                      result = OrderClose(OrderTicket(), OrderLots(), Bid, 3*pips2points, Blue);
                        if(result == false)
                           Print("Order",OrderTicket(),"failed to close Error",GetLastError());   
                           Print(" MACD DOWN CLOSE");
                     }
                     
                     
                  if(OrderType() == OP_SELL)           
                     if(prevfaster < prevslower && faster > slower) //if direction goes up on a sell order then close the order     
                        {
                         result = OrderClose(OrderTicket(), OrderLots(), Bid, 3*pips2points, Blue);
                           if(result == false)
                              Print("Order",OrderTicket(),"failed to close Error",GetLastError());   
                              Print(" MACD UP CLOSE");
                        }   
                          
      }


} //end macdclosetrade()



int OrderEntry(int direction)
{     
   int ticket;
   if(direction==0)
      if(OrdersTotal()==0)
         ticket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,3*pips2points,Ask-(StopLoss*pips2dbl),Ask+(TakeProfit*pips2dbl),NULL,MagicNumber,0,Green);
         if(ticket<0) Alert("OrderSend Failed: ", GetLastError());
         
   if(direction==1)
      if(OrdersTotal()==0)
         ticket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,3*pips2points,Bid+(StopLoss*pips2dbl),Bid-(TakeProfit*pips2dbl),NULL,MagicNumber,0,Green);
         if(ticket<0) Alert("OrderSend Failed: ", GetLastError());
         
return(0);
}      

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

Так и не разобрался. Написал 4 советника с разными тралами. У всех в тесте ошибка 130. Не знаю почему она возникает и как сделать так, чтобы ее не было. Еще трал по фракталам вроде работает, но когда тестируешь с визуализацией — тест дальше первой сделки не идет( отрывается первый ордер и все, дальше никаких признаков жизни). А трала по pSAR заметил такую вещь. Советник открыл БАЙ, но цена тут же пошла вниз. А значения то индикатора получается сверху свечи, то есть стоплосс не может быть больше текущей цены. И у нас открыта позиция на долгое время без стоплосса. На скрине отметил это красной стрелкой. Подскажите как быть в данной ситуации?

Вот поправленный трал с фракталами:

void Trailing()
{
SL = 0;
fractal_down = NormalizeDouble(iFractals(NULL,0,MODE_LOWER,5),Digits);
fractal_up = NormalizeDouble(iFractals(NULL,0,MODE_UPPER,5),Digits);
for (int i =0;i {
if (OrderSelect(i,SELECT_BY_POS))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
if (OrderType()==OP_BUY)
{
if(fractal_down>0)
{
SL=NormalizeDouble(fractal_down,Digits);
if (OrderStopLoss()!=SL)
{
if(SL bool rez = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType()==OP_SELL)
{
if(fractal_up>0)
{
SL=NormalizeDouble(fractal_up,Digits);
if (OrderStopLoss()!=SL)
{
if(SL > Ask + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
bool rez = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
}

}

}

Ошибка 130 — это неправильные стопы.Возможно просто стоп-лосс который Вы хотите разместить находится слишком близко
от текущей цены.
Сделайте проверку

if(SL > Ask + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)


Изменено 4 августа, 2015 пользователем Konstebl

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
     
      
      int Counted_bars;                       // Количество просчитанных баров 
      Counted_bars=IndicatorCounted(); // Количество просчитанных баров    
      int i=Bars-Counted_bars-1;           // Индекс первого непосчитанного   
      if (i>History-1)                 // Если много баров то ..      
      i=History-1;                     // ..рассчитывать заданное колич.
      while(i>=0)                      // Цикл по непосчитанным барам     
      {    
         double MA_l_0 = iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i);
         double MA_l_1 = iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i+1);
         
         double MA_g_0 = iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i);
         double MA_g_1 = iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i+1);
         
         double STD_0 = iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i);
         double STD_1 = iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i+1);
         
         //double ELR_1=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i);  
         //double ELR_2=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i+1);
         
         //Buy
         if(MA_l_0 > MA_l_1 && 
            MA_g_0 > MA_g_1 && 
            STD_0 > STD_1)
            
            if(Hour() < 9   || Hour() > 20) UPBuffer[i] = 0;
            else UPBuffer[i] = Low[i];
        else
         //Sell   
         if(MA_l_0 < MA_l_1 && 
            MA_g_0 < MA_g_1 && 
            STD_0 > STD_1 )
            
            if(Hour() < 9   || Hour() > 20) DNBuffer[i] = 0;
            else DNBuffer[i] = High[i];   
      i--;
      
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Блог им. andresh

    • 10 июня 2014, 16:55
    • |
    • Андрэ
  • Еще

попробовал запустить советник в МТ4 на MQL4:

 
extern int H = 14;
extern int M = 25;
int start()
{
if(OrdersTotal()==0 && Hour( )==H && Minute( ) ==M)
   OrderSend(«USDJPY», OP_SELL,0.1,Bid,0,Ask+200*Point,Ask-200*Point,»»,123,0,Red);
}

 
и никак не могу разобраться, чего не хватает. ошибок нет, но есть 2 предупреждения: 

return value of ‘OrderSend’ should be checked
not all control paths return a value 

не могу понять, что ещё нужно… Пожскажите пожалуйста, а?

  • Ключевые слова:
  • MQL4,
  • советники
  • хорошо

  • 0

25 комментариев

avatar

  • 10 июня 2014, 17:08
  • Ответить

    Еще

Язык недавно сильно переработали, возможно поэтому.

avatar

  • 10 июня 2014, 17:11
  • Ответить

    Еще

The0bald, пасип. да туповат я, видимо. не могу там найти. ща ещё раз попробую.)

avatar

  • 10 июня 2014, 17:13
  • Ответить

    Еще

5й параметр — проскальзывание может добавить, чтобы больше нуля.
а если это весь код то должен быть последним оператор return(0);

avatar

  • 10 июня 2014, 17:12
  • Ответить

    Еще

Бартоломей Цигенбальг, Ура, второе замечание исчезло!!! Осталось только: return value of ‘OrderSend’ should be checked

avatar

  • 10 июня 2014, 17:14
  • Ответить

    Еще

Андрэ, это про return. про 5-й параметр соображаю…

avatar

  • 10 июня 2014, 17:15
  • Ответить

    Еще

Бартоломей Цигенбальг, это про return. про 5-й параметр соображаю… не поясните?

avatar

  • 10 июня 2014, 17:16
  • Ответить

    Еще


так красивее и все всех устраивает )))
проскальзывание дает шанс открыться по рынку при худшей цене на заданное отклонение именно этим параметром.

avatar

  • 10 июня 2014, 17:17
  • Ответить

    Еще

Бартоломей Цигенбальг, ух ты!!! ошибок нет! Спасибо большое! )))) буду ковыряться дальше! )

avatar

  • 10 июня 2014, 17:24
  • Ответить

    Еще

Андрэ, не совсем правильно в коде, потому что он за минуту пока удовлетворяет условиям может кучу ордеров наоткрывать )))

avatar

  • 10 июня 2014, 17:26
  • Ответить

    Еще

не не норм. там есть проверка на количество открытых ордеров

avatar

  • 10 июня 2014, 17:35
  • Ответить

    Еще

Бартоломей Цигенбальг, тоже присмотрелся, сообразил! )))) спасибо огромное! плюсануть не могу, плюсовалка не позволяет)

avatar

  • 10 июня 2014, 17:37
  • Ответить

    Еще

имхо, лучше с mql5 начать изучение. 4 недавно сильно переделали — книга не актуальна, справка не доделана, не понятно какие функции заменили на аналог из мт5 какие старые оставили, косяки наверняка есть после серьезной переработки.

avatar

  • 10 июня 2014, 17:44
  • Ответить

    Еще

The0bald, логично, НО, эти советники на МТ4 не работают, насколько я знаю. это придётся и платформу менять, а не хотелось бы.

avatar

  • 10 июня 2014, 17:46
  • Ответить

    Еще

Андрэ, На новой МТ4 старые исходники все равно придется переделывать.

avatar

  • 10 июня 2014, 18:24
  • Ответить

    Еще

The0bald, возможно. просто у меня сейчас 2 робота на МТ4 работают, я доволен. вот, взялся сам изучать роботописательство. пока я «БЛИЖЕ» к МТ4. ) вы пишете сами? успешно?

avatar

  • 10 июня 2014, 18:28
  • Ответить

    Еще

Андрэ, Пишу давно, правда индикаторы в основном

avatar

  • 10 июня 2014, 18:30
  • Ответить

    Еще

The0bald, Привет, можно обращятся с просьбой по поводу mql если не трудно?

avatar

  • 10 июня 2014, 21:00
  • Ответить

    Еще

нужно посмотреть на один индюк, выдает сигнал не всегда а нужно чтобы всегда выдал, если вам удобно можно в скайп общятся, мой скайп dimii1000

avatar

  • 10 июня 2014, 22:17
  • Ответить

    Еще

в личку не могу писать, рейтинга не хватает (( я тут больше читатель, почту оставьте если не трудно, моя почта trader-profit@mail.ru

avatar

  • 10 июня 2014, 22:42
  • Ответить

    Еще

avatar

  • 10 июня 2014, 22:53
  • Ответить

    Еще

Понравилась статья? Поделить с друзьями:
  • Return to castle wolfenstein ошибка could not load opengl subsystem
  • Return to castle wolfenstein ошибка cannot write to hunkusage dat
  • Return to castle wolfenstein как изменить язык
  • Return to castle wolfenstein как изменить разрешение экрана
  • Return to castle wolfenstein как изменить разрешение 1920 1080