Ошибка изменения размера массива в бета-версии сборки 530 - страница 3

 
RaptorUK:

Я не знаком с MT3, но я предполагаю, что код, который работает на MT3, работает и на MT4 ... это проблема MT4 --> MT5 и именно поэтому ситуация отличается.

Большинство пользователей MT4 не умеют кодить, и если их любимые индикаторы на MT4 не существуют на MT5, то они не будут использовать MT5.

Насколько я знаю, код MT3 не работает на MT4, язык очень разный. Этот спор о MT4/MT5 бесконечен, есть много факторов, которые привели к выживанию MT4, я даже не уверен, что MT5 был предназначен для полной замены MT4.

В любом случае, по поводу новой версии, Metaquotes заявила, что она будет обратно совместима на уровне ex4, но не совсем на уровне mq4.

 

Я бегло просмотрел справку по новому метаэдитору, новая версия mql4 выглядит намного более отличной от старой версии, чем я думал.

 
angevoyageur:

Насколько я знаю, код MT3 не работает на MT4, язык очень отличается. Эти дебаты о MT4/MT5 бесконечны, есть много факторов, которые привели к выживанию MT4, я даже не уверен, что MT5 был предназначен для полной замены MT4.

В любом случае, по поводу новой версии, Metaquotes заявила, что она будет обратно совместима на уровне ex4, но не совсем на уровне mq4.

Совместимость с текущими индикаторами, скриптами и советниками .ex4 - это не только язык, но и терминал и изменения в его работе. Например, изменения в тестере стратегий могут сломать советника, разработанного для использования в основном в тестере стратегий, в то время как тот же советник будет нормально работать на живом графике, он больше не будет выполнять свою основную функцию....
 
angevoyageur:

Насколько я знаю, код MT3 не работает на MT4, язык очень отличается. Эти дебаты о MT4/MT5 бесконечны, есть много факторов, которые привели к выживанию MT4, я даже не уверен, что MT5 был предназначен для полной замены MT4.

В любом случае, о новой версии, Metaquotes заявила, что она будет обратно совместима на уровне ex4, но не совсем на уровне mq4.

Для меня это выглядит так, как будто она должна быть обратно совместима на уровне mq4, включенные пользовательские индикаторы - это оригинальные версии mql4 с измененным названием функции init(), они компилируются в новом компиляторе и запускаются на новом терминале, это должно означать, что мы все еще можем кодировать индикаторы, используя IndicatorCounted(), если мы хотим ...

init() теперь называется int OnInit(void) и она действительно возвращает(INIT_SUCCEEDED);

 
SDC:

Для меня это выглядит так, как будто он должен быть обратно совместим на уровне mq4, включенные пользовательские индикаторы являются оригинальными версиями mql4 с изменением названия функции init(), они компилируются в новом компиляторе и запускаются на новом терминале, это должно означать, что мы все еще можем кодировать индикаторы, используя IndicatorCounted(), если мы хотим ...

init() теперь называется int OnInit(void) и она действительно возвращает(INIT_SUCCEEDED);

Извините, но обратной совместимости на уровне mq4 не будет, см. анонс первой бета-версии.

Отличия от старой версии MQL4:

  • Изменен приоритет логических операций AND/OR. Теперь все аналогично стандартному C/C++.

  • Введена сокращенная оценка логических выражений. Теперь, когда логическое выражение оценивается, не дойдя до конца, остальные последующие выражения не оцениваются, как в C/C++.

  • В операторе switch теперь используются только целочисленные значения. Вещественные значения могли использоваться и раньше

  • Символ точки больше не может быть использован в именах переменных. Также в именах переменных нельзя использовать символы '@', '$' и '?

  • Ужесточены требования к функции start. Раньше в функции start можно было задавать параметры. Теперь все init, start, deinit, OnInit, OnStart, OnTick, OnTimer и другие точки входа должны точно соответствовать своим сигнатурам.

  • В связи с расширением ключевых слов, такие имена, как short, long, float, const, virtual, input, delete, new, do, char теперь не могут быть использованы.

  • Теперь импортируемые функции dll не могут принимать в качестве параметра строковые массивы MQL, как в MQL5

  • Введены предопределенные имена переменных _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed, которые могут вступить в конфликт с простыми переменными, объявленными под теми же именами в существующих исходных файлах

  • тип datetime стал 8-байтовым, как в MQL5.

Различия не критичны и могут быть легко исправлены в коде. Взамен мы получаем доступ к многочисленным возможностям MQL5, улучшенную скорость выполнения и гораздо более строгий контроль качества.

Это не сильные изменения, но это означает отсутствие 100% обратной совместимости (mq4).
 
SDC:

...

init() теперь называется int OnInit(void) и возвращает(INIT_SUCCEEDED);

Вы можете использовать обе версии.
 

Мне нравятся новые функции в метаредакторе

 

Я думаю, что когда выйдет новая версия, это вызовет много путаницы на форуме для новичков, потому что новая документация mql4 основана на кодировке mql5. Это означает, что многое из того, что описано на этом форуме и в кодовой базе, будет противоречить документации mql4.

Настройка индикаторного буфера из новой документации mql4: (На самом деле это содержит ошибки и не компилируется)

#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Indicator buffer after SetIndexBuffer() is timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- change the oredr of accessing elements of the indicator buffer
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- Copy the values of the moving average in the buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Depending on the value AsSeries
                                      // Will receive a very old value
                                      // Or for the current unfinished bar
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
SDC:

Я думаю, что когда выйдет новая версия, это вызовет много путаницы на форуме для новичков, потому что новая документация mql4 основана на кодировке mql5. Это означает, что многое из того, что описано на этом форуме и в кодовой базе, будет противоречить документации mql4.

Настройка индикаторного буфера из новой документации mql4: (На самом деле это содержит ошибки и не компилируется)

Да, вы правы, это будет трудный переход. Однако, я думаю, он будет трудным не для новичков, а для опытных кодеров mql4, которые еще не знают mql5. В общем, новички не читают документацию.
 

Вы уже кодируете на MQL5 angevoyageur?

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