Cerrar todo expresa intención, no ejecución simultánea

Close all de MT5 inicia una secuencia de solicitudes. Pueden quedar posiciones por rechazo, interrupción de una etapa o cierre de la aplicación. Identifica qué cantidades se ejecutaron y qué exposición sigue abierta. Esta guía se refiere a operaciones de grupo incorporadas en MT5; un complemento o EA puede utilizar otro procedimiento.

Registra el nombre completo: todas las posiciones, solo ganadoras, perdedoras, un símbolo o una dirección. La posición seleccionada puede cambiar las opciones disponibles. No confundas cierre con inversión: esta última puede crear exposición opuesta. Decir «cerré todo» sin cuenta, alcance, hora y confirmaciones no permite reconstruir qué ocurrió.

Las operaciones de grupo requieren One Click Trading y algunas no se muestran con restricciones FIFO. Comprueba modo de cuenta y ACCOUNT_FIFO_CLOSE, sin deducirlos del aspecto de la ventana ni del país asociado al idioma. En hedging, Close By compensa posiciones realmente opuestas del mismo símbolo; nombres parecidos de instrumentos distintos no forman automáticamente una pareja.

Distingue las etapas del procedimiento

La ayuda separa Close By secuencial y cierres ordinarios del resto. Un error en la compensación detiene ese proceso; después de una compensación correcta, el terminal envía solicitudes ordinarias sin esperar cada confirmación anterior. En esa etapa asíncrona, el rechazo deja su posición abierta y continúa el envío para las demás. El cierre FIFO es secuencial y se interrumpe ante error. No generalices la regla de una etapa a todas las demás.

El nombre de un script no acredita equivalencia con el menú integrado. Lee su lógica y forma de recuperar estado antes de atribuirle esas reglas. El modelo Close By permite comprobar también resultados y costes de una pareja, distintos de contar tickets cerrados.

Cinco posiciones y cuatro cierres confirmados

Modelo diagnóstico ficticio de cuenta hedging sin FIFO. EUR/USD permite Close By; no hay ejecuciones parciales, entradas nuevas ni otros cambios. A es compra EUR/USD de 0,10 lote y B, venta del mismo símbolo de 0,10. C es compra GBP/USD de 0,20; D, venta USD/JPY de 0,10; E, compra XAU/USD de 0,05. Las cantidades pertenecen a contratos diferentes: no las sumes como medida común de riesgo. No calculamos beneficio monetario de esta secuencia ni velocidad del servidor.

TicketEstado inicialResultado confirmadoResto
AEUR/USD compra 0,10Close By con B completadoNinguno
BEUR/USD venta 0,10Close By con A completadoNinguno
CGBP/USD compra 0,20Cierre completo 0,20Ninguno
DUSD/JPY venta 0,10Rechazo; cantidad cerrada ceroVenta 0,10
EXAU/USD compra 0,05Cierre completo 0,05Ninguno

Después de compensar A y B, el recuento pasa de cinco a tres posiciones. Se solicitan cierres de C, D y E. C y E se completan y D se rechaza: queda una venta USD/JPY de 0,10. Tres solicitudes enviadas no acreditan tres cierres realizados. La compensación retiró dos tickets mediante una operación, sin convertir ese hecho en dos solicitudes ordinarias idénticas.

Cinco posiciones iniciales, una restanteTarjetas del modelo hedging sin FIFO: Close By permitido en EUR/USD; sin parciales ni entradas nuevas. No suma lotes de contratos diferentes.EJEMPLO DE CÁLCULOA y B · EUR/USDClose By completadoC · GBP/USDCierre 0,20 confirmadoD · USD/JPYRechazo del cierreE · XAU/USDCierre 0,05 confirmado
Cinco posiciones iniciales, una restante. Tarjetas del modelo hedging sin FIFO: Close By permitido en EUR/USD; sin parciales ni entradas nuevas. No suma lotes de contratos diferentes.

A/B, C y E cerrados; D sigue venta USD/JPY 0,10. Enviar tres solicitudes ordinarias no confirma tres cierres.

A y B · EUR/USD
Close By completado – Dos posiciones retiradas.
C · GBP/USD
Cierre 0,20 confirmado – Una posición retirada.
D · USD/JPY
Rechazo del cierre – Venta 0,10 continúa.
E · XAU/USD
Cierre 0,05 confirmado – Una posición retirada.

Para cada ticket relaciona símbolo, dirección, volumen inicial, identificador de solicitud u orden, respuesta, operaciones y resto. MQL5 ofrece DEAL_ORDER, DEAL_POSITION_ID y DEAL_VOLUME para vincular hechos. Una orden puede producir varias ejecuciones; una fila fragmentaria no acredita por sí sola el cierre completo. Anota tiempos y zona, conservando referencia original si presentas Europe/Madrid.

Otras dos variantes dejan otro resto

En una variante separada del mismo inicio, A y B reciben un error Close By antes de ejecutarse y suponemos ausencia de operaciones de cierre. La secuencia se detiene antes de C, D y E: quedan las cinco. Esto difiere del rechazo de D después de una pareja compensada correctamente. Si solo falta respuesta, la ausencia de ejecución es una hipótesis pendiente, no un resultado confirmado.

En otra variante, A y B ya se cerraron y la aplicación termina antes de enviar C–E. Quedan tres posiciones. Cerrar el terminal no deshace ejecuciones confirmadas y tampoco cancela por deducción solicitudes que ya alcanzaron el servidor. Reiniciar no demuestra exposición cero ni justifica reenviar el lote entero usando volúmenes recordados.

Comprueba si otro EA, aplicación o usuario abrió posiciones durante el proceso. Un ticket nuevo puede ser exposición nueva y no un cierre fallido. Relaciona historial y origen de la instrucción. Para automatización propia, OrderSend=true no basta como prueba de ejecución: revisa resultados y eventos. No necesitas una operación real de diagnóstico para distinguir esos estados.

Ejercicio adicional de reconciliación, independiente de los volúmenes anteriores: un ticket comienza en 0,20 lote y dos cierres confirmados retiran 0,06 y 0,04. Restan 0,10. Una tercera solicitud de 0,10 sin resultado conocido no permite marcar resto cero. Registra «0,10 según última confirmación; nueva solicitud sin resolver» y consulta estado actual. Contar tres mensajes no sustituye sumar cantidades confirmadas; no asignamos euros de pérdida sin contrato y precios.

Posiciones vacías y pendientes activas pueden coexistir

MT5 dispone de operaciones separadas para borrar pendientes. El cierre de posiciones no confirma cancelación de esas instrucciones. Una compra pendiente P puede seguir activa después de cerrar los cinco tickets; si se ejecuta más tarde, crea otra posición. Comprueba solicitud de cancelación y resultado por separado, sin tratarla como si fuera una ejecución de cierre.

Tras sincronizar, lee posiciones sin filtros que oculten símbolo o dirección y reconcilia historial. Revisa pendientes aparte y describe cualquier estado vacío con cuenta y hora. Una captura no establece que un EA nunca vuelva a abrir. Las posiciones restantes necesitan evaluar su protección aceptada y riesgo actual aunque el proceso anterior no terminara como esperabas. La guía de errores y respuestas inciertas ayuda a conservar lo conocido sin repetir solicitudes por suposición.

Tres acciones para comprobar el resultado

  1. En demo, registra modo de cuenta, nombre completo del comando y lista inicial de tickets y volúmenes. Identifica qué etapa podría actuar sobre cada uno; usa un modelo o entorno de prueba permitido en lugar de provocar rechazos en una cuenta financiada.
  2. Relaciona cada posición con sus ejecuciones confirmadas. Separa compensación y cierre ordinario, rechazo y respuesta incierta. Recalcula los restos cinco→tres→uno y el ejercicio 0,20−0,06−0,04; no reenvíes toda la lista desde memoria.
  3. Termina con ambas listas sincronizadas: posiciones y pendientes de la cuenta correcta sin filtros. Evalúa exposición y niveles de lo que quede, conserva hora y registros y resuelve las instrucciones todavía inciertas antes de considerar completada la tarea.