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

В крайнем случае если нет возможности привести код эксперта посмотрите. В принципе каких-то грубых ошибок, которые бы не дали возможность советнику работать. то код станет таким Здесь тоже далеко до совершенства

AZIK_REDKO:
вот

В принципе каких-то грубых ошибок, которые бы не дали возможность советнику работать, нет. Хотя, конечно, много, чего не учтено (проверок почти нет). Если немного подрихтовать код, чтобы видеть реальные ошибки, то код станет таким:

#property copyright "TO"

extern int TYPE=0;
extern int TP = 20;
extern int SL = 50;
extern double lot=0.01; // сумма ставки в $
extern int Magic_Number=639713;

int init(){   return(0);}
int deinit(){   return(0);}
//===================================================================

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double SPREAD=MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   if(Orders_Total(Magic_Number,Symbol())==0)
     {
      //Установка ордеров
      if(TYPE<=0)
        {
         // Здесь установим STOP-ордера
         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD-STOPLEVEL>Ask)
         {
            int ticket = OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+SPREAD,3,iHigh(Symbol(),PERIOD_D1,1)-SL*Point,iHigh(Symbol(),PERIOD_D1,1)+TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
            if (ticket < 0)
               Alert("Ошибка установки ордера Buy Stop: ", GetLastError());                      // Сообщение об ошибке
         }
         else
            Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1)+STOPLEVEL<Bid)
         {
            ticket = OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1),3,iLow(Symbol(),PERIOD_D1,1)+SPREAD+SL*Point,iLow(Symbol(),PERIOD_D1,1)+SPREAD-TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
            if (ticket < 0)
               Alert("Ошибка установки ордера Sell Stop: ", GetLastError());                      // Сообщение об ошибке
         }
         else 
            Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");
        }
      if(TYPE>=1)
        {
         // Здесь установим LIMIT-ордера
         if(iHigh(Symbol(),PERIOD_D1,1)-STOPLEVEL>Bid)
         {
            ticket = OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1),3,iHigh(Symbol(),PERIOD_D1,1)+SPREAD+SL*Point,iHigh(Symbol(),PERIOD_D1,1)+SPREAD-TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
            if (ticket < 0)
               Alert("Ошибка установки ордера Sell Limit: ", GetLastError());                      // Сообщение об ошибке
         }
         else 
            Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1)+STOPLEVEL<Ask)
         {
            ticket = OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+SPREAD,3,iLow(Symbol(),PERIOD_D1,1)-SL*Point,iLow(Symbol(),PERIOD_D1,1)+TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
            if (ticket < 0)
               Alert("Ошибка установки ордера Buy Limit: ", GetLastError());                      // Сообщение об ошибке
         }
         else 
            Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");
        }
     }
   return(0);
  }
//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//
int Orders_Total(int mn,string sym)
  {
   int num_orders=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      bool check = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==mn && sym==OrderSymbol())
         num_orders++;
     }
   return(num_orders);
  };
//+------------------------------------------------------------------+

 Здесь тоже далеко до совершенства, но работать во многих случаях будет (у меня работает).

Просто смотрите, какие ошибки выдает эксперт. 

You have to analyze the result to see if the action was successful or not.

//+------------------------------------------------------------------+
//| Opening Buy position                                             |
//+------------------------------------------------------------------+
void Buy(int magicnumber,string symbol,double lots,double tp,double sl)
{
//--- declare and initialize the trade request and result of trade request
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
//--- parameters of request
   request.action    = TRADE_ACTION_DEAL;                     // type of trade operation
   request.symbol    = symbol;                                // symbol
   request.volume    = lots;                                  // volume
   request.type      = ORDER_TYPE_BUY;                        // order type
   request.price     = SymbolInfoDouble(symbol,SYMBOL_ASK);   // price for opening
   request.deviation = 3;                                     // allowed deviation from the price
   request.sl        = sl;                                    // Stop Loss of the position
   request.tp        = tp;                                    // Take Profit of the position
   request.magic     = magicnumber;                           // MagicNumber of the order
//--- send the request
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());       // if unable to send the request, output the error code
//--- information about the operation
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
}
//+------------------------------------------------------------------+
//| Opening Sell position                                            |
//+------------------------------------------------------------------+
void Sell(int magicnumber,string symbol,double lots,double tp,double sl)
{
//--- declare and initialize the trade request and result of trade request
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
//--- parameters of request
   request.action    = TRADE_ACTION_DEAL;                     // type of trade operation
   request.symbol    = symbol;                                // symbol
   request.volume    = lots;                                  // volume
   request.type      = ORDER_TYPE_SELL;                       // order type
   request.price     = SymbolInfoDouble(symbol,SYMBOL_BID);   // price for opening
   request.deviation = 3;                                     // allowed deviation from the price
   request.sl        = sl;                                    // Stop Loss of the position
   request.tp        = tp;                                    // Take Profit of the position
   request.magic     = magicnumber;                           // MagicNumber of the order
//--- send the request
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());       // if unable to send the request, output the error code
//--- information about the operation
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
}
//+------------------------------------------------------------------+

Блог им. 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
  • Ответить

    Еще

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);
  }

советник 111

добрый день! прошу помочь в написании советника. Опишу как он должен работать. Пример: пользователь советника заранее выбирает, будет советник торговать только в бай или только селл. Допустим выбрали селл. Свеча закрылась бычья, советник на открытии следующей свечи продает, следующая свеча опять бычья, советник опять продает, следующая свеча закрылась медвежья:) советник ничего не делает) но есть одно условие, если тело свечи меньше 5пп и свеча закрылась бычья советник тоже ничего не делает, при достижении стоп лосса, закрываются все орде сразу, и при достижении тейк профита, также закрываются все ордера разом. Настраеваемые параметры: 1) выбор торговли: Бай/селл. 2) лот 3) стоп лосс от первого ордера( при его достижении закрываются все ордера, если будут открыты) 4) тейк профит от первого ордера ( закрываются так же все ордера при его достижении) 5) размер тела свечи в пунктах ( если торгуем бай, то условие для покупки: тело медвежьей свечи больше 5пп, для продаже обратное)

Аватар пользователя
111111
 
Сообщений: 245
Зарегистрирован: 06 ноя 2013, 14:51
Средств на руках: 7.60 Доллар
Группа: Базовая
Благодарил (а): 148 раз.
Поблагодарили: 15 раз.


Re: советник 111

Сообщение Рэндом » 04 апр 2014, 13:07

В понедельник сделаю.

Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3172 раз.

Каждый заблуждается в меру своих возможностей.


Re: советник 111

Сообщение Рэндом » 07 апр 2014, 03:00

Что делать если после появления противоположного сигнала (когда сделка не открывается) появиться новый сигнал?
Сколько позиций открывать? А то может так получиться что позиции будут открыты на весь депозит.

Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3172 раз.

Каждый заблуждается в меру своих возможностей.


Re: советник 111

Сообщение 111111 » 07 апр 2014, 10:50

Рэндом писал(а):Что делать если после появления противоположного сигнала (когда сделка не открывается) появиться новый сигнал?
Сколько позиций открывать? А то может так получиться что позиции будут открыты на весь депозит.

продолжать открывать позиции, можно ввести еще один параметр, мах число открытых позиций. допустим 5.

Аватар пользователя
111111
 
Сообщений: 245
Зарегистрирован: 06 ноя 2013, 14:51
Средств на руках: 7.60 Доллар
Группа: Базовая
Благодарил (а): 148 раз.
Поблагодарили: 15 раз.


Re: советник 111

Сообщение Рэндом » 07 апр 2014, 11:02

Теперь завтра с утра будет готово.

Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3172 раз.

Каждый заблуждается в меру своих возможностей.


Re: советник 111

Сообщение Рэндом » 08 апр 2014, 03:29

Вот.
Параметры:
Diapozon — минимальный диапазон свечи в пунктах
SL — стоп лосс в пунктах
TP — тэйк профит в пунктах
Lot — лот
Slipage — проскальзывание в пунктах
Count — максимальное количество сделок
TBuy — true открывать длинные позиции
TSell — true открывать короткие позиции

Вложения
BarsEx.mq4
(2.78 KB) Скачиваний: 34
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3172 раз.

Каждый заблуждается в меру своих возможностей.


Re: советник 111

Сообщение 111111 » 08 апр 2014, 16:57

Рэндом писал(а):Вот.
Параметры:
Diapozon — минимальный диапазон свечи в пунктах
SL — стоп лосс в пунктах
TP — тэйк профит в пунктах
Lot — лот
Slipage — проскальзывание в пунктах
Count — максимальное количество сделок
TBuy — true открывать длинные позиции
TSell — true открывать короткие позиции

советник выдает ошибку:return value of ‘OrderSend’ should be checked BarsEx.mq4 76 10
точнее четыре таких.

Аватар пользователя
111111
 
Сообщений: 245
Зарегистрирован: 06 ноя 2013, 14:51
Средств на руках: 7.60 Доллар
Группа: Базовая
Благодарил (а): 148 раз.
Поблагодарили: 15 раз.


Re: советник 111

Сообщение mfcoder » 08 апр 2014, 19:04

111111 писал(а):
советник выдает ошибку:return value of ‘OrderSend’ should be checked BarsEx.mq4 76 10
точнее четыре таких.

это не ошибка, а предупреждение..
с некоторых пор умный компилятор делает замечание о том, что правильно было бы присваивать возвращаемое значение функции OrderSend()
типа int res = OrderSend(…);
в принципе это необязательно делать

Аватар пользователя
mfcoder
 
Сообщений: 1531
Зарегистрирован: 29 июл 2013, 11:55
Средств на руках: 26.85 Доллар
Группа: Базовая
Благодарил (а): 78 раз.
Поблагодарили: 423 раз.


Re: советник 111

Сообщение Рэндом » 09 апр 2014, 05:21

Вот, исправил.

Вложения
BarsEx.mq4
(2.8 KB) Скачиваний: 39
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3172 раз.

Каждый заблуждается в меру своих возможностей.


Re: советник 111

Сообщение 111111 » 09 апр 2014, 17:05

Рэндом писал(а):Вот, исправил.

прошу прощения, но на билде 625, советник даже не отображается в списке советников. В чем может быть дело?

Аватар пользователя
111111
 
Сообщений: 245
Зарегистрирован: 06 ноя 2013, 14:51
Средств на руках: 7.60 Доллар
Группа: Базовая
Благодарил (а): 148 раз.
Поблагодарили: 15 раз.



Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

  • Форум посвящен форекс-трейдингу, изучению MQL и правилам инвестирования

Понравилась статья? Поделить с друзьями:
  • 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