MetaTrader 4 Build 529 beta liberado con nuevo compilador - página 105

 
Night63:

Colegas, un mensaje de advertencia aparece en la compilación:

posible uso de la variable no inicializada 'PipStep'

para un trozo como este:

Todas las variables se inicializan como double, ¿qué tiene de malo?

has declarado variables de tipo double, la inicialización consiste en asignar valores a las variables declaradas

double PipStep=0 ; make

 
No entiendo, ¿soy el único que no puede probar las demos de los indicadores en la compilación 555, o no es un tema importante para el debut del Mercado en absoluto?
 
Candid:
No entiendo, ¿soy el único que no puede probar las demos de los indicadores en la compilación 555, o no es un tema importante para el debut del Mercado en absoluto?

¿se examinan en 5?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

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

MqlRates

Estructura para almacenar información sobre precios, volúmenes y spreads.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

¿Es MqlRates en MetaTrader 4 construir 555 una matriz o una estructura?

Este ejemplo de la ayuda (MetaTrader 4 build 555) no funciona ya que no existe la función CopyRates

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Esto tampoco funciona, ¿puede ver un ejemplo de trabajo en MetaTrader 4 build 555 con MqlRates?
 
ALXIMIKS:

¿Se hacen pruebas en 5?

¿Hay gente que tampoco hace la prueba del 5?
 
ALXIMIKS:

se declaran variables de tipo double, la inicialización es la asignación de valores a las variables declaradas

double PipStep=0 ; do


¡Funcionó!

¡Vive y aprende!

¡Muchas gracias!

 
serferrer:

¿Es MqlRates en MetaTrader 4 construir 555 una matriz o una estructura?

Este ejemplo de la ayuda (MetaTrader 4 build 555) no funciona ya que no existe la función CopyRates

Esto tampoco funciona, ¿podemos ver un ejemplo que funcione en MetaTrader 4 build 555 con MqlRates?


MqlRates - estructura

MqlRates[] - matriz de estructuras

Para ver un ejemplo de trabajo con la estructura MqlRates vea el script period_converter_new

Un ejemplo de la operación ArrayCopyRates (la documentación será actualizada)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Cambios en MQL4

  • ArrayCopyRates() también ha cambiado su comportamiento. Antes copiaba virtualmente al array double[][6], ahora copia virtualmente al array MqlRates[]. Ahora se realiza la copia al array double[][6], pero no es virtual, es real.

Tengo un número importante de Asesores Expertos que utilizan DLLs y han sido pasados a los clientes hace mucho tiempo. Utilizamos arrays double[][6] para pasar parámetros a la DLL, quefueron copiados virtualmente por ArrayCopyRates() durante la inicialización .Y luego al llamar a las funciones desde la DLL estos arrays y su tamaño actual se pasaban por referencia como sus parámetros.

Resulta que todos estos EAs dejan de funcionar cuando el terminal se actualiza a una nueva versión. Esto es lamentable.

¿Entiendo correctamente que para que sigan funcionando sin cambiar el código de la DLL, ahora debemos llamar a ArrayCopyRates() antes de cada llamada de una función de la DLL?

 
stringo:
Ahora no hay valor de spread (posiblemente también volumen de intercambio ) en la estructura MqlRates, ¿se añadirá más adelante?
 
Patrol:

Tengo un número importante de EAs que utilizan DLLs, que han sido entregados a los clientes hace mucho tiempo. Para pasar los parámetros a la DLL utilizamos arrays double[][6], a los que durante la inicialización la función ArrayCopyRates() realizó una copia virtual de las series temporales. Y luego estas matrices y su tamaño actual se pasaron por referencia como sus parámetros al llamar a las funciones desde la DLL.

Resulta que todos estos EAs dejan de funcionar cuando el terminal se actualiza a una nueva versión. Esto es lamentable.

¿Entiendo correctamente que para que sigan funcionando sin cambiar el código de la DLL, debemos llamar a ArrayCopyRates() antes de cada llamada de una función de la DLL?


Es un poco más complicado que eso. La estructura que adopta la dll también ha cambiado.

Por lo tanto, es necesario reescribir ArrayCopyRates en la estructura MqlRates. También en su dll necesita reemplazar la descripción de la estructura correspondiente

Razón de la queja: