Новая версия платформы MetaTrader 4 build 1170 - страница 21

 
MetaQuotes Software Corp.:

Обновитесь до 1186, пожалуйста.

Извините за ошибки, пожалуйста. Мы активно апгрейдим общий MQL4/MQL5 компилятор и внесли ошибку.

А уже компилированные тоже перекомпилировать ?
 
Vladislav Andruschenko:
А уже компилированные тоже перекомпилировать ?
Да, скомпилированные в версиях 1180-1884, нужно пересобрать.
 
MetaQuotes Software Corp.:
Да, скомпилированные в версиях 1180-1884, нужно пересобрать.

обновился до 1188 :

 - меню терминала теперь корректно , в прошлых билдах было так https://www.mql5.com/ru/forum/295315/page19#comment_12880260

- тестовый эксперт который вызывал крэш терминал, работает вроде корректно, было так https://www.mql5.com/ru/forum/295315/page20#comment_12886274


PS: в примере https://www.mql5.com/ru/forum/295315/page20#comment_12887356

не было #property strict , добавил работает предупреждение в билде 1188

 

В новом редакторе включены множественные стили форматирования кода:


 
MetaQuotes Software Corp.:

В новом редакторе включены множественные стили форматирования кода:


Это интересно, а примеры есть где, что б понять в чем отличия?

 
MetaQuotes Software Corp.:

В новом редакторе включены множественные стили форматирования кода:


Зато теперь компилятор на вот такой код:

//+------------------------------------------------------------------+
//| Возвращает описание целочисленного свойства ордера               |
//+------------------------------------------------------------------+
string COrder::GetPropertyDescription(ENUM_ORDER_PROP_INTEGER property)
  {
   return
     (
   //--- Общие свойства
      property==ORDER_PROP_MAGIC             ?  CMessage::Text(MSG_ORD_MAGIC)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_TICKET            ?  CMessage::Text(MSG_ORD_TICKET)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          " #"+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_TICKET_FROM       ?  CMessage::Text(MSG_ORD_TICKET_FROM)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          " #"+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_TICKET_TO         ?  CMessage::Text(MSG_ORD_TICKET_TO)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          " #"+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_TIME_EXP          ?  CMessage::Text(MSG_ORD_TIME_EXP)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          (this.GetProperty(property)==0     ?  CMessage::Text(MSG_LIB_PROP_NOT_SET)+": "+CMessage::Text(MSG_LIB_PROP_NOT_SET)  :
          ": "+::TimeToString(this.GetProperty(property),TIME_DATE|TIME_MINUTES|TIME_SECONDS))
         )  :
      property==ORDER_PROP_TYPE              ?  CMessage::Text(MSG_ORD_TYPE)+": "+this.TypeDescription()   :
      property==ORDER_PROP_DIRECTION         ?  CMessage::Text(MSG_ORD_TYPE_BY_DIRECTION)+": "+this.DirectionDescription() :
      
      property==ORDER_PROP_REASON            ?  CMessage::Text(MSG_ORD_REASON)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+this.GetReasonDescription(this.GetProperty(property))
         )  :
      property==ORDER_PROP_POSITION_ID       ?  CMessage::Text(MSG_ORD_POSITION_ID)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": #"+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_DEAL_ORDER_TICKET ?  CMessage::Text(MSG_ORD_DEAL_ORDER_TICKET)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": #"+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_DEAL_ENTRY        ?  CMessage::Text(MSG_ORD_DEAL_ENTRY)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+this.GetEntryDescription(this.GetProperty(property))
         )  :
      property==ORDER_PROP_POSITION_BY_ID    ?  CMessage::Text(MSG_ORD_POSITION_BY_ID)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_TIME_OPEN         ?  CMessage::Text(MSG_ORD_TIME_OPEN)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+TimeMSCtoString(this.GetProperty(property))+" ("+(string)this.GetProperty(property)+")"
         )  :
      property==ORDER_PROP_TIME_CLOSE        ?  CMessage::Text(MSG_ORD_TIME_CLOSE)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+TimeMSCtoString(this.GetProperty(property))+" ("+(string)this.GetProperty(property)+")"
         )  :
      property==ORDER_PROP_TIME_UPDATE       ?  CMessage::Text(MSG_ORD_TIME_UPDATE)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(this.GetProperty(property)!=0 ? TimeMSCtoString(this.GetProperty(property))+" ("+(string)this.GetProperty(property)+")" : "0")
         )  :
      property==ORDER_PROP_STATE             ?  CMessage::Text(MSG_ORD_STATE)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": \""+this.StateDescription()+"\""
         )  :
   //--- Дополнительное свойство
      property==ORDER_PROP_STATUS            ?  CMessage::Text(MSG_ORD_STATUS)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": \""+this.StatusDescription()+"\""
         )  :
      property==ORDER_PROP_PROFIT_PT         ?  (
                                                 this.Status()==ORDER_STATUS_MARKET_PENDING ? 
                                                 CMessage::Text(MSG_ORD_DISTANCE_PT)  : 
                                                 CMessage::Text(MSG_ORD_PROFIT_PT)
                                                )+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(string)this.GetProperty(property)
         )  :
      property==ORDER_PROP_CLOSE_BY_SL       ?  CMessage::Text(MSG_LIB_PROP_CLOSE_BY_SL)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(this.GetProperty(property)   ?  CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO))
         )  :
      property==ORDER_PROP_CLOSE_BY_TP       ?  CMessage::Text(MSG_LIB_PROP_CLOSE_BY_TP)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(this.GetProperty(property)   ?  CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO))
         )  :
      property==ORDER_PROP_GROUP_ID          ?  CMessage::Text(MSG_ORD_GROUP_ID)+
         (!this.SupportProperty(property)    ?  ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) :
          ": "+(string)this.GetProperty(property)
         )  :
      ""
     );
  }
//+------------------------------------------------------------------+

говорит, что слишком сложное выражение:

expression is too complex       Order.mqh       1301    53

указывая на границу двух цветов.

В 1170 всё компилировалось. Да и в MetaTrader 5 Build 2093 с его MetaEditor'ом версии 2093 всё отлично компилируется - ведь это по сути простой тернарный оператор, а все методы в его условиях возвращают простой текст в зависимости от того, что в них передано. И условия булевы.

А так как версия редактора в MetaTrader 5 старее версии редактора в MetaTrader 4 (редактор в MetaTrader 4 теперь версии 2116), то есть подозрение, что после очередного обновления MetaTrader 5, и он перестанет компилировать код - скажет, что слишком сложно...

 
Artyom Trishkin:

говорит, что слишком сложное выражение

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

компилятор и раньше ругался на сложные выражения в if() - если чередовались && и || без скобок

check operator precedence for possible error; use parentheses to clarify precedence

теперь вот и до ? : добрались разработчики ;)

ЗЫ: написали бы сразу по человечески через swith - case было бы норм

:)

 
Igor Makanu:

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

компилятор и раньше ругался на сложные выражения в if() - если чередовались && и || без скобок

check operator precedence for possible error; use parentheses to clarify precedence

теперь вот и до ? : добрались разработчики ;)

ЗЫ: написали бы сразу по человечески через swith - case было бы норм

:)

Где предупреждения? Клик по картинке:

Если с кодами fxsaber спокойно разбираетесь, то, думаю, это был излишний наезд на простейшую конструкцию if-else.

 

Ребята такая проблема в МТ4 (МТ5 пока не было:)

есть символ у одного брокера моего пользоваться EURUSD (£)


В моем эксперте, как обычно, проверяется возможность торговать на этом символе:

      long symbolalowed=SymbolInfoInteger(SymbolNameCurrentChart,SYMBOL_TRADE_MODE);

И эксперт выдает 0, то есть торговля отключена. 


Я зашел на этот символ и вижу, что торговля разрешена


Но эксперт, чтобы не писать лишние лог файлы - проверяет это значение и получает 0! и отключается! 

Почему сервер выдает 0, хотя в свойствах FULL?  


Конечно же я снял ограничения проверки для пользователя и эксперт работает без этой проверки, но это неправильно! 

И после этого вижу, что эксперт неправильно читает символ:


 

куда копать?




Пробовал сохранять в UNICODE не помогает! 
 
 

куда копать?



Пробовал сохранять в UNICODE не помогает! 


Для начала, выясните пожалуйста, какая кодировка у пользователя и какая у Вас.

Достаточно сообщить языки систем.

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