Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 33

 

Добрый вечер!  Совершенно уверен, что вот эта функция выдаст совершенно то и так, что я и хотел, ну почти. Однако машина не хочет компилировать, ругается так 

 '}' - not all control paths return a value htghtgfhthf.mq5 61 10   Это ей види те ли у меня мол что-то не так с логикой, там ретурны не все проставлены. Проставлены где надо! Напротив, если ставить их за каждым опиратором иф, будет ерунда, программа сразу выдаст неверный результат. Все вроде коротко и хорошо. Если можно, как ее заставить принять?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

Добрый вечер!  Совершенно уверен, что вот эта функция выдаст совершенно то и так, что я и хотел, ну почти. Однако машина не хочет компилировать, ругается так 

 '}' - not all control paths return a value htghtgfhthf.mq5 61 10   Это ей види те ли у меня мол что-то не так с логикой, там ретурны не все проставлены. Проставлены где надо! Напротив, если ставить их за каждым опиратором иф, будет ерунда, программа сразу выдаст неверный результат. Все вроде коротко и хорошо. Если можно, как ее заставить принять?  

 Совет: надо учить технический английский. Сейчас гляну  код.

По теме: Функция должна возвращать значение типа стринг. Внутри функции используется проверка оператором if, который и содержит операторы return. Вопрос: а если оператор if обнаружит, что Bull == false, что должна вернуть функция? 

 
Конечно же, Si="" !   Пустое значение.
 

Ага!! Спасибо!!!

Спасибо!!!! 

 
Dimka-novitsek:

Добрый вечер!  Совершенно уверен, что вот эта функция выдаст совершенно то и так, что я и хотел, ну почти. Однако машина не хочет компилировать, ругается так 

 '}' - not all control paths return a value htghtgfhthf.mq5 61 10   Это ей види те ли у меня мол что-то не так с логикой, там ретурны не все проставлены. Проставлены где надо! Напротив, если ставить их за каждым опиратором иф, будет ерунда, программа сразу выдаст неверный результат. Все вроде коротко и хорошо. Если можно, как ее заставить принять?

not all control paths return a value - нет полного контроля за возвратом значения.

Это означает что в string OrderType(), которая обязана иметь возвращаемое значение так как тип отличается от void, нет гарантированного выхода с возвратом значения.

Хотя вы и поставили целых 2 оператора return, но оба они защищены условием if. А что будет если оба условия будут false ??

тогда машине хоть в окно прыгай.

ЗЫ кстати в данной функции целесообразнее использовать счётчик switch, вместо кучи if которые по сути делают туже работу что и switch.

ЗЗЫ Плюс к этому не нужно забывать что позиция должна быть предварительно выбрана, как и ордер. А для перевода перечислений в стринги есть стандартная функция EnumToString, так что незачем изобретать велосипеды.

 
СПАСИБО!!!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


 

Никак непойму почему вызывается OnTick хотя цена неизменяется?????

 

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490   1.2787   1.2789  1.2788 300000

 
dentraf:

Никак непойму почему вызывается OnTick хотя цена неизменяется?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490   1.2787   1.2789  1.2788 300000

Время последнего обновления цен тоже не меняется?
 
Yedelkin:
Время последнего обновления цен тоже не меняется?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20   1.27841   1.27852  1.27841 2000000   2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19   1.27841   1.27852  1.27841 2000000   2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18   1.27841   1.27852  1.27841 2000000   2012.09.10 14:37:18

 

или

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6   1.27835   1.27845  1.27835 1000000   2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5   1.27835   1.27845  1.27835 1000000   2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4   1.27835   1.27845  1.27835 1000000   2012.09.10 14:37:10
 

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20   1.27841   1.27852  1.27841 2000000   2012.09.10 14:37:19 

Время изменения цен показывается по GMT+3, вроде. Это чей сервер?
Причина обращения: