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

В новом МТ4 Version : 4,00 Build 625 программные коды сохранили свою рабочую среду, но «Компилятор» выдаёт предупреждения о некорректности некоторых строк исходного кода в советниках.

Самые часто встречающиеся предупреждения : — return value of ‘OrderSelect‘ should be checked MACD Sample.mq4 92 7 на строку в коде —

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

-return value of ‘OrderClose’ should be checked MACD Sample.mq4 104 16 на строку в коде —

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

-return value of ‘OrderModify’ should be checked MACD Sample.mq4 115 22 на строку в коде —

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

и тому подобное…

Обращаюсь к знатокам за помощью, как это можно исправить? В чём корень недоразумения? Что нужно добавить в код или изменить?

Есть код:

void BuyOrder4()

{

double SL = Ask — BuyStoploss4*PipValue*Point;

if (BuyStoploss4 == 0) SL = 0;

double TP = Ask + BuyTakeprofit4*PipValue*Point;

if (BuyTakeprofit4 == 0) TP = 0;

int ticket = -1;

if (true)

ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, 0, 0, «My Expert», 1, 0, Blue);

else

ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, SL, TP, «My Expert», 1, 0, Blue);

if (ticket > -1)

{

if (true)

{

OrderSelect(ticket, SELECT_BY_TICKET); // вот здесь выдаёт предупреждение: return value of ‘OrderSelect’ should be checked

// Возвращаемое значение ‘OrderSelect «должны быть проверены

bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);

if (ret == false)

Print(«OrderModify() error — «, ErrorDescription(GetLastError()));

}

}

else

{

Print(«OrderSend() error — «, ErrorDescription(GetLastError()));

}

}

Компилятор выдаёт предупреждение: return value of ‘OrderSelect’ should be checked

Возвращаемое значение ‘OrderSelect «должны быть проверены

Как это сделать?

Так и не разобрался. Написал 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
  • Ответить

    Еще

в личку не могу писать, рейтинга не хватает (( я тут больше читатель, почту оставьте если не трудно, моя почта [email protected]

avatar

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

    Еще

avatar

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

    Еще

Понравилась статья? Поделить с друзьями:
  • Как исправить mov файл
  • Как найти профиль в инстаграме по фотке
  • Как составить договор на выполнение работ по предоплате
  • Как найти эссенцию биома
  • Как найти касательную неявно заданной функции