Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Consulte las declaraciones de avance de las clases
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(
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(
¿Qué significa esta entrada en el probador?
No tiene gracia.
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.
Está claro que mql5.... no hace que se vea bien
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)
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);
}
}