Error de redimensionamiento de matrices en la versión beta 530 - página 3

 
RaptorUK:

No estoy familiarizado con MT3 pero asumo que el código que corría en MT3 también corría en MT4... este es el problema con MT4 --> MT5 y es por lo que la situación es diferente.

La mayoría de los usuarios de MT4 no saben codificar, si sus indicadores favoritos en MT4 no existen en MT5 entonces no van a usar MT5.

Que yo sepa el código de MT3 no funciona en MT4, el lenguaje es muy diferente. Este debate sobre MT4/MT5 es interminable, hay un montón de factores que llevan a la supervivencia de MT4, ni siquiera estoy seguro de que MT5 estuviera destinado a sustituir completamente a MT4.

De todos modos, sobre la nueva versión, Metaquotes dijo que será compatible con versiones anteriores a nivel de ex4, pero no realmente a nivel de mq4.

 

He echado un vistazo rápido a la nueva ayuda del metaeditor, la nueva versión mql4 parece mucho más diferente de la versión antigua de lo que pensaba.

 
angevoyageur:

Que yo sepa el código de MT3 no se ejecuta en MT4, el lenguaje es muy diferente. Este debate sobre MT4/MT5 es interminable, hay un montón de factores que llevan a la supervivencia de MT4, ni siquiera estoy seguro de que MT5 estaba destinado a sustituir completamente a MT4.

De todos modos, sobre la nueva versión, Metaquotes dijo que será compatible con versiones anteriores a nivel de ex4, pero no realmente a nivel de mq4.

La compatibilidad con los indicadores, scripts y EAs actuales de .ex4 no es sólo por el lenguaje, sino también por el Terminal y los cambios en su funcionamiento. Por ejemplo, los cambios en el Probador de Estrategias podrían romper los EAs diseñados para ser utilizados principalmente en el Probador de Estrategias, mientras que el mismo EA funciona bien en un gráfico en vivo ya no realizaría su función principal....
 
angevoyageur:

Que yo sepa el código de MT3 no se ejecuta en MT4, el lenguaje es muy diferente. Este debate sobre MT4/MT5 es interminable, hay un montón de factores que llevan a la supervivencia de MT4, ni siquiera estoy seguro de que MT5 estaba destinado a sustituir completamente a MT4.

De todos modos, sobre la nueva versión, Metaquotes dijo que será compatible con versiones anteriores a nivel de ex4, pero no realmente a nivel de mq4.

A mi me parece que se supone que es retrocompatible a nivel de mq4, los indicadores personalizados incluidos son las versiones originales de mql4 con un cambio el nombre de la función init() que compilan en el nuevo compilador y se ejecutan en el nuevo terminal, eso tiene que significar que podemos seguir codificando indicadores usando IndicatorCounted() si queremos...

init() se llama ahora int OnInit(void) y sí devuelve(INIT_SUCCEED);

 
SDC:

A mi me parece que se supone que es retrocompatible a nivel de mq4, los indicadores personalizados incluidos son las versiones originales de mql4 con un cambio el nombre de la función init() que compilan en el nuevo compilador y se ejecutan en la nueva terminal, eso tiene que significar que podemos seguir codificando indicadores usando IndicatorCounted() si queremos...

init() se llama ahora int OnInit(void) y sí devuelve(INIT_SUCCEED);

Lo sentimos, pero no será compatible con el nivel mq4, ver el anuncio de la primera beta.

Diferencias con respecto a la antigua versión de MQL4:

  • Se ha cambiado la prioridad de las operaciones lógicas AND/OR. Ahora, todo es similar al estándar C/C++

  • Introducida la evaluación abreviada de las expresiones lógicas. Ahora, cuando una expresión lógica se evalúa antes de llegar a su final, las expresiones subsiguientes restantes no se evalúan, como en C/C++.

  • Ahora sólo se utilizan valores enteros en el operador switch. Antes se podían utilizar valores reales

  • Ya no se puede utilizar el símbolo del punto en los nombres de las variables. Tampoco se pueden utilizar los símbolos '@', '$' y '?' en los nombres de las variables

  • Requisitos más estrictos para la función de inicio. Antes se podían establecer parámetros en la función de inicio. Ahora, todos los puntos de entrada init, start, deinit, OnInit, OnStart, OnTick, OnTimer y otros deben coincidir exactamente con sus firmas

  • Debido a la expansión de las palabras clave, ahora no se pueden utilizar nombres como short, long, float, const, virtual, input, delete, new, do, char

  • Ahora, las funciones dll importadas no pueden aceptar matrices de cadenas MQL como parámetro, como en MQL5

  • Introducidos los nombres predefinidos de las variables _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed que pueden entrar en conflicto con las variables simples declaradas con los mismos nombres en los archivos fuente existentes

  • el tipo datetime se ha convertido en uno de 8 bytes, como en MQL5.

Las diferencias no son críticas y se pueden corregir fácilmente en el código. A cambio, accedemos a múltiples características de MQL5, a una mayor velocidad de ejecución y a un control de calidad mucho más estricto.

No son cambios pesados, pero significa que no es 100% compatible con versiones anteriores (mq4).
 
SDC:

...

init() se llama ahora int OnInit(void) y devuelve (INIT_SUCCEED);

Puedes usar ambas versiones.
 

Me gustan las nuevas funciones del metaeditor

 

Creo que cuando la nueva versión sea lanzada causará mucha confusión en el foro para los novatos porque la nueva documentación de mql4 está basada en la codificación de mql5. Eso significa que mucho de lo que se describe en este foro y en la base de código se contradice con los documentos de mql4.

Configurando un buffer de indicadores desde los nuevos documentos de mql4: (Esto realmente tiene errores en él y no compila)

#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:

Creo que cuando salga la nueva versión causará mucha confusión en el foro para los novatos porque la nueva documentación de mql4 está basada en la codificación de mql5. Eso significa que mucho de lo que se describe en este foro y en la base de código se contradice con los documentos de mql4.

Configurando un buffer de indicadores desde los nuevos documentos de mql4: (Esto realmente tiene errores en él y no compila)

Sí, tienes razón, será una transición difícil. Sin embargo, creo que no será difícil para los novatos, sino para los codificadores experimentados de mql4 que aún no conocen mql5. En general, los novatos no leen la documentación
 

¿Ya ha codificado en MQL5 angevoyageur?

Razón de la queja: