Cómo comprobar si una orden está seleccionada - página 9

 
Vinin:


No pregunté a nadie en particular.

Pero debe haber hecho bien en tomárselo como algo personal.

No puedo llamarte tonto, pero eres sordo, eso seguro.

No escuchas a los demás. No me refiero a mis comentarios, sino a los consejos que te han dado.

¿Ha escrito alguna vez programas interoperables?

Lo que Ant_TL pide es "interoperabilidad", pero no se puede implementar en MQL.

 
PapaYozh:

¿Ha escrito alguna vez un programa interoperable?

Lo que Ant_TL pide es "interoperabilidad", pero no es factible en MQL.


No es difícil de aplicar. Y en principio hay una solución. Demasiada pereza para seguir leyendo
 
Esta solución puede ser viable para las posiciones cerradas, que ya no cambiarán. Pero para los puestos vacantes, no vale la pena hacer
 
Vinin:

No es difícil de aplicar. Y hay una solución. Demasiada pereza para seguir leyendo

No podrá ejecutar operaciones con órdenes y asegurarse de que el entorno no se vea afectado.

Ya se ha dicho sobre GetLastError(), no podrá restaurar el código que debería devolver lafunción GetLastError().

 
PapaYozh:

No podrá ejecutar operaciones con órdenes y asegurarse de que el entorno no se vea afectado.

Ya se ha dicho sobre GetLastError(), no podrá recuperar el código que la función GetLastError() debería haber devuelto.


Si quieres, puedes, sólo que tendrá su propia función ( me refiero aGetLastError())
 

Esto puede parecer una solución - OrderSelect() - MySelect() wrapper para usar en funciones que buscan pedidos por índice

int last_select=0; // ponerlo en algún lugar antes de init y start

// ...... código del programa

bool MySelect(int i,int mode=MODE_TRADES){ // selección de órdenes - devuelve True si la orden está seleccionada y pertenece al EA, False en caso contrario
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Ordenar la selección directamente por tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // Una plantilla de función que puede romper la selección de orden y por lo tanto romper la lógica del programa, si no se cuida la selección de orden actual
int tick=last_select;

// ... realizar las acciones necesarias

if(tick>0)
TickSelect(tick);
}

 
Ant_TL:

No puede, a menos que usted mismo cambie este estado en el programa.

Se supone que el estado de la orden ha cambiado de MODE_TRADES a MODE_HISTORY. Y su Asesor Experto no ha hecho nada con la orden. ¿Es el mismo orden o es diferente?

 
Mislaid:

Se asumió que el estado de la orden cambió de MODE_TRADES a MODE_HISTORY. Y su EA no ha hecho nada con la orden. ¿Es el mismo orden o es diferente?

Es el mismo orden

 
No veo el problema. Y hay mucho jaleo... Es necesario seleccionar una orden en una función principal A(), y en otra función B(), llamada desde la función principal A(), procesar la orden seleccionada en la función A(). Y deberíamos saber con seguridad en la función B() si la orden sigue seleccionada o no... Así que pasa a la función B() el ticket de la orden seleccionada en la función A(). En la función B(), se puede comprobar de qué lista se ha seleccionado el pedido y luego decidir dónde ir y qué devolver a la función A()...
 
Ant_TL:

Esto puede parecer una solución - OrderSelect() - MySelect() wrapper para usar en funciones que buscan pedidos por índice

int last_select=0; // ponerlo en algún lugar antes de init y start

// ...... código del programa

bool MySelect(int i,int mode=MODE_TRADES){ // Selección de la orden que necesitamos - devuelve True si la orden ha sido seleccionada y pertenece al Asesor Experto; en caso contrario, False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
si no
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Ordenar la selección directamente por el tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
si no
return(false);
return(true);
}

void SomeFunc(){ // Una plantilla de función que puede romper la selección de orden y por lo tanto romper la lógica del programa, si la selección de orden actual no es atendida
int tick=última_selección;

// ... realizar la acción requerida

if(tick>0)
TickSelect(tick);
}

Imaginemos lo que ocurrirá con la variable last_select después de reiniciar el terminal (los malos apagaron la luz)
Razón de la queja: