МТ4 или МТ5. Какие преимущества и недостатки? - страница 5

[Удален]  
Nikolai Semko:

улыбнуло. Спасибо за юмор.


он имел ввиду эти ветки

https://www.mql5.com/ru/forum/6343

https://www.mql5.com/ru/forum/160587

 
George Merts:

С чего бы это ?

МТ4 и МТ5 - это абсолютно одинаковый язык, и говорить, что "МТ4 проще" - это все равно, что говорить, что "Язык СССР проще, чем язык РФ".

Выше верно отметили всю разнницу - для МТ4 все еще предлагаются более привлекательные условия, чем для МТ5. С точки зрения программирования - разницы никакой.


Взял робота написанного на MQL5, скомпилировал в редакторе MQL4: 100 error(s), 13 warning(s).

И ошибки не только в работе с ордерами, вот например:

'iMA' - wrong parameters count

'IndicatorRelease' - function not defined

'CopyBuffer' - function not defined





 
Aliaksandr Yemialyanau:

Взял робота написанного на MQL5, скомпилировал в редакторе MQL4: 100 error(s), 13 warning(s).

И ошибки не только в работе с ордерами, вот например:

'iMA' - wrong parameters count

'IndicatorRelease' - function not defined

'CopyBuffer' - function not defined





А зачем вы ключ от соседской квартиры тыкаете в свою замочную скважину?
Все ошибки на раз правятся.
 
Aliaksandr Yemialyanau:

Взял робота написанного на MQL5, скомпилировал в редакторе MQL4: 100 error(s), 13 warning(s).

И ошибки не только в работе с ордерами, вот например:

'iMA' - wrong parameters count

'IndicatorRelease' - function not defined

'CopyBuffer' - function not defined





Прям с рабочего кода скопировал.


     #ifdef __MQL5__
          if(BarsCalculated(m_handle_macd) < iBarLook+1) return;
    
          if(  CopyBuffer( m_handle_macd, 0, 0, iBarLook+1, m_buff_MACD_main ) == iBarLook+1 &&
               CopyBuffer( m_handle_macd, 1, 0, iBarLook+1, m_buff_MACD_signal ) == iBarLook+1 )
          {
               MacdCurrent    = m_buff_MACD_main[0];
               MacdPrevious   = m_buff_MACD_main[iBarLook];
               SignalCurrent  = m_buff_MACD_signal[0];
               SignalPrevious = m_buff_MACD_signal[iBarLook];
              
               ArrayFree(m_buff_MACD_main);
               ArrayFree(m_buff_MACD_signal);
          }
     #else
          MacdCurrent    = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_MAIN, 0);
          MacdPrevious   = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_MAIN, iBarLook);
          SignalCurrent  = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_SIGNAL, 0);
          SignalPrevious = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_SIGNAL, iBarLook);
     #endif

И ни каких ошибок компиляции в обоих версиях.
 
Artyom Trishkin:
А зачем вы ключ от соседской квартиры тыкаете в свою замочную скважину?
Все ошибки на раз правятся.

Если "МТ4 и МТ5 - это абсолютно одинаковый язык", то и ошибок быть не должно.

 
Konstantin Nikitin:

Прям с рабочего кода скопировал.


     #ifdef __MQL5__
          if(BarsCalculated(m_handle_macd) < iBarLook+1) return;
    
          if(  CopyBuffer( m_handle_macd, 0, 0, iBarLook+1, m_buff_MACD_main ) == iBarLook+1 &&
               CopyBuffer( m_handle_macd, 1, 0, iBarLook+1, m_buff_MACD_signal ) == iBarLook+1 )
          {
               MacdCurrent    = m_buff_MACD_main[0];
               MacdPrevious   = m_buff_MACD_main[iBarLook];
               SignalCurrent  = m_buff_MACD_signal[0];
               SignalPrevious = m_buff_MACD_signal[iBarLook];
              
               ArrayFree(m_buff_MACD_main);
               ArrayFree(m_buff_MACD_signal);
          }
     #else
          MacdCurrent    = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_MAIN, 0);
          MacdPrevious   = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_MAIN, iBarLook);
          SignalCurrent  = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_SIGNAL, 0);
          SignalPrevious = iMACD(Symbol(), 0, MACDfastEMA, MACDslowEMA, MACDsigLine, MACD_Price, MODE_SIGNAL, iBarLook);
     #endif

И ни каких ошибок компиляции в обоих версиях.

Этот код как раз опровергает утверждение что "МТ4 и МТ5 - это абсолютно одинаковый язык"

 
Aliaksandr Yemialyanau:

Если "МТ4 и МТ5 - это абсолютно одинаковый язык", то и ошибок быть не должно.

Если писать код, и при этом ещё и думать, то всё работает. А если тупо пытаться использовать отсутствующие функции из mql5, и никак их не определить для mql4, то да, тяжело будет...
Только дело не в языках, а в кодере.

[Удален]  

человеку наврали, что 4 и 5 это одинаковые языки. он проверил, что это не так. а потом его еще и обосрали. )))

 
Aliaksandr Yemialyanau:

Этот код как раз опровергает утверждение что "МТ4 и МТ5 - это абсолютно одинаковый язык"

В некоторых мелких нюансах, но если сразу учитывать разницу, то вполне хватает

#ifdef __MQL5__
     #include <Trade_MQL5.mqh>
#else
     #include <Trade_MQL4.mqh>
#endif
CTrade trade;


с одноименными функциями и вполне дальше можно писать один код не заморачиваясь на некоторые отличия.

Например в Trade_MQL5.mqh

class CTrade
{
public:
     CTrade(){};
     ~CTrade(){};


     // Информация по ордеру
     int       Orders_Total()      { return( PositionsTotal() ); }
     string    Order_Symbol()      { return( PositionGetString(POSITION_SYMBOL) ); }
     int       Order_Ticket()      { return( (int)PositionGetInteger(POSITION_TICKET) ); }
     int       Order_Type()        { return( (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) ); }
     double    Order_OpenPrice()   { return( (double)PositionGetDouble(POSITION_PRICE_OPEN) ); }
     double    Order_Lots()        { return( (double)PositionGetDouble(POSITION_VOLUME) ); }
     double    Order_StopLoss()    { return( (double)PositionGetDouble(POSITION_SL) ); }
     double    Order_TakeProfit()  { return( (double)PositionGetDouble(POSITION_TP) ); }
     double    Order_Profit()      { return( (double)PositionGetDouble(POSITION_PROFIT) ); }
     double    Order_Swap()        { return( (double)PositionGetDouble(POSITION_SWAP) );}
     double    Order_Commission()  { return( (double)PositionGetDouble(POSITION_COMMISSION) ); }
     int       Order_MagicNumber() { return( (int)PositionGetInteger(POSITION_MAGIC) ); }
     bool      Order_Select(const int cnt){ return( PositionSelect( PositionGetSymbol(cnt) ) ); }
};

и в Trade_MQL4.mqh

class CTrade
{
public:
     CTrade(){};
     ~CTrade(){}


     // Информация по ордеру
     int       Orders_Total()      { return( OrdersTotal() ); }
     string    Order_Symbol()      { return( OrderSymbol() ); }
     int       Order_Ticket()      { return( OrderTicket() ); }
     int       Order_Type()        { return( OrderType() ); }
     double    Order_OpenPrice()   { return( OrderOpenPrice() ); }
     double    Order_Lots()        { return( OrderLots() ); }
     double    Order_StopLoss()    { return( OrderStopLoss() ); }
     double    Order_TakeProfit()  { return( OrderTakeProfit() ); }
     double    Order_Profit()      { return( OrderProfit() ); }
     double    Order_Swap()        { return( OrderSwap() );}
     double    Order_Commission()  { return( OrderCommission() ); }
     int       Order_MagicNumber() { return( OrderMagicNumber() ); }
     bool      Order_Select(const int cnt){ return( OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ); }

};

и по коду в дальнейшем использую trade.функция(); все проблем ни каких.

Подключаю данный Class в начале скрипта и спокойно пишу.

Например:

for(int cnt=0; cnt<trade.Orders_Total(); cnt++)
{
     if( !trade.Order_Select(cnt) ) continue;
     if( trade.Order_Type()!=ORDER_TYPE_BUY && trade.Order_Type()!=ORDER_TYPE_SELL ) continue;
     if( trade.Order_MagicNumber()!= 111 ) continue;
                   
     switch( trade.Order_Type() )
     {
         case ORDER_TYPE_BUY:
              break;
         case ORDER_TYPE_SELL:
              break;
     }
}


P.S. Код конечно моего класса подрезан, но сам принцип думаю понятен.

 
Максим Дмитриев:

человеку наврали, что 4 и 5 это одинаковые языки. он проверил, что это не так. а потом его еще и обосрали. )))

Нет, просто "человек" пришел сюда продвигать глупости.

Ему очень хочется.