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

 
TYRBO:
problema resuelto comparando precios
¿En el probador? En un mercado real en una cuenta de spread flotante, el precio de equilibrio cambiará después de un tick
 
Artyom Trishkin:

En este contexto, mi punto es este:

  1. Tenemos que conseguir el menor número posible de ciclos por tic.
  2. Necesitamos tener un array constante con los datos de las órdenes y posiciones de mercado y un array con los datos de las órdenes y posiciones borradas/cerradas
  3. Si tenemos la matriz localmente en una función, llamarla repetidamente requiere llenarla de nuevo. Sugiero que se llene sólo una vez en un nuevo tick - por lo que la matriz es global, de lo contrario la perderíamos al salir de la función.
  4. Para encontrar algo en él (en el array), necesitamos un array lleno y funciones que devuelvan los datos encontrados. Dentro de las funciones, podemos declarar matrices auxiliares para los cálculos necesarios.

Por esta razón, sería mejor tener matrices globales - para órdenes y posiciones cerradas y abiertas. Una vez en un nuevo tick, pasamos la cantidad necesaria de órdenes/posiciones una vez, llenando las dos matrices con ellas. Y luego obtenemos todos los datos necesarios de ellos en el mismo momento. Tenga en cuenta que no sólo se calcula la última orden/posición cerrada/abierta y todos sus datos, sino que también se buscan todos los ticks padres e hijos de todas las posiciones en caso de cierre parcial. En consecuencia, en cualquier momento puedo ver de qué billete es tal o cual posición, si se ha cerrado parcialmente más de una vez - todo esto ya funciona en una clase que se ejecuta en un temporizador. Tengo muchos otros datos que necesito con un pequeño número total de ciclos. La profundidad necesaria de la historia para las matrices se establece para el probador.

Y así sucesivamente...

Lo siento. Un añadido más (no para contrarrestar, sino como añadido), me gustaría añadir que los arrays locales conestática no se pierden. Es decir, si las condiciones le permiten hacerlo sin declararlas globalmente.

 
P./S.: Estoy completando esto, por supuesto, basándome en mi propio interés "creado")). Porque puedo aplicar la estática local en los casos permitidos.
 
Vitaly Muzichenko:

Ahora lo estoy reescribiendo poco a poco para 5. Me refiero a que el precio puede cambiar muy rápidamente y el nivel puede ser menor que el valor del stop-loss, lo que llevará a un error. Me refiero a que el precio puede cambiar muy rápidamente y el nivel será menor que el nivel de parada permitido, lo que dará lugar a un error.

Entiendo que esto de"SymbolInfoTick" es necesario para obtener el precio actual?

Por lo tanto, para obtener la oferta y la demanda reales en mql4, se debería haber llamado a la actualización de todos modos. Y resulta que la carga es poco probable que cambie en comparación con llamar a SymbolInfoTick().

Pero aquí hay otra adición: escribo SymbolInfoTick() en el siguiente bucle para obtener precios precisos

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Si obtenemos precios normales desde la primera vez, este bucle no aumentará el tiempo de ejecución. Y si hay algún fallo, es mejor repetir que conseguir el mismo precio en lugar del actual.

 
Alexey Viktorov:

Por lo tanto, para obtener la oferta y la demanda reales en mql4, tiene que llamar a la actualización de todos modos. Y resulta que la carga es poco probable que cambie en comparación con llamar a SymbolInfoTick().

Pero aquí hay otra adición: para obtener sin errores los precios reales, pongo SymbolInfoTick() en este bucle

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Si obtenemos precios normales desde la primera vez, este bucle no aumentará el tiempo de ejecución. Y si hay algún fallo, es mejor repetir que conseguir el mismo precio en lugar del actual.

Ya veo, ¿dónde hay que ponerlo, dentro o antes del bucle?
 
Vitaly Muzichenko:
Ya veo, pero ¿dónde debo ponerlo, dentro del ciclo o antes?
Bueno, es un ciclo separado hasta que tengamos los precios actuales. Ya hemos hablado de dónde ponerlo. Si hay una emboscada con precios no reales, debemos fijarla en el bucle de evaluación de la orden.
 
Alexey Viktorov:

Por lo tanto, para obtener la oferta y la demanda reales en mql4, tiene que llamar a la actualización de todos modos. Y resulta que la carga es poco probable que cambie en comparación con llamar a SymbolInfoTick().

Pero aquí hay otra adición: para obtener sin errores los precios reales, pongo SymbolInfoTick() en este bucle

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Si obtenemos precios normales desde la primera vez, este bucle no aumentará el tiempo de ejecución. Y si hay algún fallo, es mejor repetir que conseguir el mismo precio en lugar del actual.

¿Y si no los consigues en absoluto? ¿Cómo se ralentiza el bucle?
 
Artyom Trishkin:
¿Y si no lo recibe en absoluto? ¿Cómo se frena el ciclo?

Sí, lógicamente puede ser, por ejemplo, que el terminal haya perdido la conexión -hay muchas razones para ello, yo he tenido que perder la conexión 50 veces al día-.

¿Cuál es la mejor manera de obtener precios actualizados, con menos recursos, eso sí, para la búsqueda en la red?

 
Vitaly Muzichenko:

Sí, lógicamente puede ser, por ejemplo, que el terminal haya perdido la conexión -hay muchas razones para ello, yo he tenido que perder la conexión 50 veces al día-.

¿Cuál es la mejor manera de obtener precios actualizados, a la vez que se consumen menos recursos, recuerde, para el arrastre de la red?

revisa 10 páginas atrás, hay un buen esquema allí
 
trader781:
revisa 10 páginas atrás, hay un buen esquema allí.
No pude encontrarlo, y no lo recuerdo aquí.
Razón de la queja: