Características del lenguaje mql4, sutilezas y técnicas - página 35

 
fxsaber #:

Así que ahora me pregunto cómo revisar TODOS los pedidos de una sola vez.

No estoy seguro de lo que hay que hacer, pero estoy tratando de escribirlo de tal manera que esos deslices no lleven a consecuencias críticas.

La probabilidad disminuirá, pero sin la diversificación y la complicación de la gestión de cuentas.

 
Andrei Trukhanovich #:

Otra opción es repartir los bots entre diferentes cuentas.

Entonces prohíbe, por ejemplo, el vencimiento de las órdenes de retirada. En general, una muleta.

Una necesidad fundamental con una peculiaridad tan desafortunada. Al parecer, hacerlo a través de instantáneas de alguna manera.

 
fxsaber #:

Gracias por la detallada respuesta. Ahora me pregunto cómo revisar TODOS los pedidos de una sola vez.

¿Qué tal si recordamos el primer y el último pedido ( ticket )?

y una vez completado el ciclo, compruebe que el primer y el último pedido tienen los mismos tickets que antes del recuento

   int n  = OrdersTotal();
   
   if(n == 0) return(0.0);
   else if(n == 1 && OrderSelect(0, SELECT_BY_POS)) return(OrderLots());
   
   int t_last = OrderSelect(n - 1, SELECT_BY_POS) ? OrderTicket() : -1;
   int t_first = OrderSelect(0, SELECT_BY_POS) ? OrderTicket() : -1;


SZY: lógicamente, OrderSelect() debería ser responsable de esta colisión - debería devolver false en caso de que la tabla de pedidos haya cambiado, pero no recuerdo haber leído en ningún lugar del foro que OrderSelect() haya devuelto false, tampoco he encontrado manejadores de error para OrderSelect().

 
Igor Makanu #:

¿puede recordar el primer y el último pedido (billete)?

Sin una memorización completa de la secuencia de billetes, esta solución fracasará.

 
fxsaber #:

Si no recuerdas completamente la secuencia de entradas, esta solución fallará.

Y el guardado completo de los tickets también provocará fallos porque mientras estamos ejecutando un bucle, el estado de los pedidos que ya han sido procesados puede cambiar


por supuesto, no estoy seguro, pero si se cierra un pedido cuando estamos en el ciclo, el OrderTotal() cambiará

si la orden se cierra y se abre una nueva orden, se cambiará el ticket y/o OrderSelect(0) o OrderSelect(OrderTotal()-1)


y, en su opinión, ¿qué situación podría darse para que las anteriores "órdenes extremas" y el propio OrderTotal() permanezcan?

 
Igor Makanu #:

y en su opinión, ¿qué situación podría darse para mantener las mismas "órdenes extremas" y el propio OrderTotal()?

Lo más probable es que el OrdersTotal cambie cuando se agite la tabla de pedidos.

Y entonces es posible que los limitadores se rellenen y se cree una posición adicional.

 
Igor Makanu #:

¿podemos memorizar el primer y el último orden (billete)?

recordando la primera no hace nada

 
fxsaber llamar a la función? O contará dos veces.

Es decir, ¿qué ocurre con la indexación cuando se elimina un pedido o aparece durante la enumeración?

Recojo una serie de billetes y trabajo con ellos.
Si el Total de Pedidos o el Saldo o el Margen han cambiado - entonces la lista tiene que ser recreada.

Así que EA siempre trabaja sólo con sus propias entradas seleccionadas

 
Andrei Trukhanovich #:

recordando que el primero no hace nada

son peculiaridades de la implementación de la arquitectura, que no están documentadas y nadie puede garantizar en el futuro...

Observe OrderTotal() yOrdersHistoryTotal(), y los tickets de los últimos pedidos

si estos valores cambian después de los cálculos en el bucle, entonces procesa


Pero no puede haber una solución universal y fiable: la tarea consiste en adivinar qué ocurrirá en el servidor, cómo se entregan los datos a través de la red y qué ocurre en los gráficos adyacentes en el terminal ))))


Lo único que hay que esperar es la velocidad de OrderSelect() - si no recuerdo mal, es más de un millón de llamadas por segundo

 
fxsaber #:

Sin una memoria completa de la secuencia de emisión de billetes, esta solución fracasará.

Puede que no sea costoso recordarlo, pero puede serlo seguir el estado completo. Estoy de acuerdo con los anteriores, reducir la carga por lógica de lo razonable y las prioridades.

El mundo asíncrono en el que vivimos no garantiza el orden de las respuestas al orden de las peticiones, ni garantiza el orden en absoluto.
Razón de la queja: