Errores, fallos, preguntas - página 712

 
Hola,

Gracias por tu respuesta, ayuda a resolver el problema de la declaración.

Por cierto, he encontrado un error relacionado con la depuración:

Cuando esté depurando un indicador, estando en el modo de punto de interrupción, pulse la lista de indicadores en MetaTrader.
La aplicación se congela y sólo se detiene con el administrador de tareas (kill)


Por favor, tome nota.
 
speedy:


Por favor, tome nota.
Tomo nota, gracias.
 

La función OnTimer() en el probador de la estrategia, ralentiza bastante la ejecución, cuando se solicita cada segundo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, con dos indicadores externos y funcionando a través de todos los ticks, está ejecutando 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) generados en 70418 ms (total de barras en el historial 6270, tiempo total 70528 ms) Si se comenta OnTimer(), la ejecución se acelera significativamente 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) generados en 22730 ms (total de barras en el historial 6270, tiempo total 22870 ms) ¿Son estos retrasos causados por el probador, o podemos acelerarlo de alguna manera?

P.D. Se habría implementado una vista previa del mensaje(

 
sion:

La función OnTimer() en el probador de la estrategia, ralentiza bastante la ejecución, cuando se solicita cada segundo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, con dos indicadores externos y funcionando a través de todos los ticks, está ejecutando 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) generados en 70418 ms (total de barras en el historial 6270, tiempo total 70528 ms) Si se comenta OnTimer(), la ejecución se acelera significativamente 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barras) generados en 22730 ms (total de barras en el historial 6270, tiempo total 22870 ms) ¿Son estos retrasos causados por el probador, o podemos acelerarlo de alguna manera?

P.D. Se habría implementado una vista previa del mensaje(

Es mejor insertar el código a través del botón "SRC" en el panel del editor.
 
papaklass:

¿Qué significa esta entrada en el probador?

Es un mensaje del sistema sobre la paginación del historial.
 

No tiene gracia.

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

Entiendo un poco que los enlaces en el caso general en mql5 no se devuelven desde las funciones (por cierto, ¿por qué no?), pero entonces es necesario hacer algo para que los indexadores de valores l sean posibles. Por ejemplo, hacer una excepción sintáctica a la regla general para los indexadores de valores l. O una palabra clave de algún tipo.

La cojera, obviamente, no hace que mql5.... se vea bien.

 
MetaDriver:

Está claro que mql5.... no hace que se vea bien

No insultes a mql5, todavía es "pequeñito", pero madura muy rápido de compilación en compilación.
 
MetaDriver:

La cojera claramente no hace que mql5.... se vea bien

Para eso hay que construir enlaces completos :)

ZS: está goteando :)

 

¿Bicho?


El código siguiente genera una especie de bucle perpetuo en el compilador. Pulsar Cancelar

no funciona inmediatamente, pero cuando lo hace, recupera el control del editor.

El botón de Cancelar en sí no desaparece, pero tampoco es accesible.

El botón de compilación se ha perdido para siempre (hay que recargar el editor para recuperarlo)


#include <Object.mqh>.

clase B;

clase A: B {
void a();
};

clase B: A {

CObject* a;
void b();
};
 
MetaDriver:

No tiene gracia.

Como me gusta entender que los enlaces en el caso general en las funciones de mql5 no regresan (por cierto, ¿por qué no pueden?), pero debería hacer algo para que los indexadores de valores l sean posibles en su lugar, por ejemplo, hacer una excepción de sintaxis a la regla general para los indexadores de izquierda. O una palabra clave de algún tipo.

Está claro que la cojera no hace bonito a mql5.....

"Pasar" elementos internos de la clase no base al exterior (¡y en este ejemplo no el atributo en sí, sino sólo un elemento del array!) Especialmente con la posibilidad de cambiar su valor no es seguro.

Además, contradice el "espíritu" de la programación orientada a objetos: todo el trabajo con los datos del objeto debe realizarse dentro del objeto, mediante sus propios métodos.


¿Qué tal si sólo se utiliza Setter para el atributo de datos?

El código ganaría en legibilidad. Al final, esta "simplicidad" con el indexador de valores l hará que nadie entienda cómo funciona este código...

Pasarás más tiempo buscando errores que escribiendo Setter.

He aquí un ejemplo:

Si puedes sustituir código como while ((double)date[++i -1] < 10) por algo más largo pero digerible, mejor hazlo así...

struct Test

{

datos dobles[];

int tamaño;

void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}

void setDataElement (int index, double value)

{

datos[índice] = valor;

}


privado:

static int Max;

};

//+------------------------------------------------------------------+


int Prueba::Max=1024;

//+------------------------------------------------------------------+

//| Función de inicio del programa de script |

//+------------------------------------------------------------------+

void OnStart()

{

Prueba t;

t.Init(16);

for(int i=0;i<t.size;i++)

{

//t[i]=i*i; // ERROR :'=' - valor l necesario

t.setDataElement(i, i*i);

}

}