Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1531

 

¿Cómo se hace frente a la congelación de un terminal?

El código es simple, pero es muy lento

   for(int i=limit;i>=0;i--)
     {
      RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i);
      RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,MA_Period,0,MODE_SMA,i);
     }
 
 
Alexey Viktorov:

Es más fácil y seguro poner la primera bandera de inicio en OnTick()

Debe hacer los cálculos y la renderización a la vez, incluso, por ejemplo, en un fin de semana.

 
Igor Makanu:

No voy a adivinar lo que va a pasar, lo primero que veo es que has hecho una pausa para obtener los valores del indicador en OnInit() - ¿qué pasará si el usuario cambia el TF en ese momento?

SZY: ¿Y cómo se comportaría tu código si ejecutas un EA, luego cierras el terminal y vuelves a abrir el terminal con un EA en ejecución?

estas variantes se consideran

 

Por favor, recuérdame una cosa trivial. Mi EA abre y cierra órdenes en el probador normalmente. Llevo ya una semana trabajando con la demo y todo va bien. Pero en dos casos, al abrir la segunda orden (para una posición de Mart) no ha cerrado las dos cuando el saldo es positivo, sino que sólo ha estado luchando con la segunda hasta que he cerrado la orden de toma. He mirado el registro: el precioera "requoting". No debería ser un problema y debería cerrarse de todos modos, pero no lo hizo.

Por lo tanto, no he escrito la función ENVIAR (REQUERIDO) DE CIERRE DE ORDEN en el caso de una condición. Por favor, dígame cómo se escribe esta trivialidad. Gracias.

 
Порт-моне тв:

Por favor, recuérdame una cosa trivial. Mi EA abre y cierra órdenes en el probador normalmente. Llevo ya una semana trabajando con la demo y todo va bien. Pero en dos casos, al abrir la segunda orden (para una posición de Mart) no ha cerrado las dos cuando el saldo es positivo, sino que sólo ha estado luchando con la segunda hasta que he cerrado la orden de toma. He mirado el registro: el precioera "requoting". No debería ser un problema y debería cerrarse de todos modos, pero no lo hizo.

Por lo tanto, no he escrito la función ENVIAR (REQUERIDO) DE CIERRE DE ORDEN en el caso de una condición. Por favor, dígame cómo se escribe esta trivialidad. Gracias.

if(GetLastError()==138)OrderClose(...);
o aumentar el deslizamiento
 
MakarFX:
O aumentar el deslizamiento.

Gracias por su respuesta. Por qué 138???? ¿Es un número de error? Y cuánto hay que aumentar el deslizamiento (por favor, explique el significado del aumento). Gracias

 
Порт-моне тв:

Por qué 138???? ¿Es un número de error?


Puerto mone tv:

Y cuánto hay que aumentar el deslizamiento (por favor, explique el significado del aumento).

Depende de ti, a más deslizamiento menos requotes.

 
MakarFX:

¿Cómo se hace frente a la congelación de un terminal?

El código es simple, pero está muy ocupado.

Extraño...

Lo he hecho con int start() en lugar de OnCalculate y no se cuelga en absoluto

¿Por qué?

 
Andrey Sokolov:

Es necesario hacer cálculos y rendimientos a la vez, incluso, por ejemplo, los fines de semana.

Los indicadores trabajan en un hilo, si uno espera, todos los demás esperan, hasta que el terminal se cuelga.
Al iniciar MT, la inicialización del indicador (-s) puede ocurrir antes de la inicialización de las variables terminales, es decir, es muy fácil atrapar un cuelgue.

Razón de la queja: