MT5 build 6230 — SymbolIsSynchronized(EURUSD) devuelve false con error 0 como símbolo auxiliar del Probador
SymbolIsSynchronized()==false con error 0 significa que la consulta no ha registrado un error, pero el símbolo no figura como sincronizado.
Que SymbolInfoTick() devuelva cotizaciones actualizadas no garantiza por sí solo la sincronización general del historial.
Para acotar la causa, prueba una variante que solicite explícitamente barras M1 de EURUSD mediante CopyRates() en OnInit() y compara los resultados. Así podrás comprobar si interviene la preparación de la serie.
Muchas gracias por su respuesta y por la aclaración.
Entiendo que SymbolIsSynchronized(EURUSD)=false con error inmediato 0 indica que la consulta no registró un error, pero EURUSD no figura como sincronizado. También comprendo que SymbolInfoTick(EURUSD)=true no garantiza por sí solo la sincronización del historial.
En nuestra ejecución del 01/11/2026, EURUSD fue seleccionado correctamente mediante SymbolSelect() en OnInit(). Durante las 54 observaciones, SymbolIsSynchronized(EURUSD) devolvió siempre false con error 0, aunque las cotizaciones se actualizaron y el Diario mostró previamente los mensajes history synchronized y history ticks synchronized.
Tomo nota de su propuesta de utilizar CopyRates() para solicitar barras M1 de EURUSD en OnInit() como una posible comprobación diagnóstica.
Antes de realizar esa prueba, quisiera aclarar dos cuestiones:
-
¿Solicitar explícitamente barras M1 mediante CopyRates() es un requisito documentado para la sincronización de un símbolo auxiliar dentro del Probador, o se propone únicamente como una prueba para investigar la preparación de la serie?
-
¿Los mensajes history synchronized y history ticks synchronized garantizan algún estado concreto respecto a SymbolIsSynchronized(), o son independientes de su valor booleano?
Por ahora mantenemos el código original sin modificaciones y la causa del comportamiento sigue sin determinarse.
Muchas gracias por su orientación.
Buenos días:
Solicito una aclaración técnica sobre SymbolIsSynchronized() en el Probador de Estrategias de MT5.
Al probar un observador independiente sobre GOLD, la consulta de sincronización de EURUSD como símbolo auxiliar devolvió false en las 54 observaciones registradas, siempre con error inmediato 0. Durante esas observaciones, SymbolInfoTick(EURUSD) devolvió true y las cotizaciones se actualizaron.
La causa no está identificada. No atribuimos todavía este comportamiento a Wine, al servidor, a la disponibilidad de históricos ni a una incidencia de MT5.
El entorno y la configuración utilizados fueron:
MetaTrader 5 y agente local: build 6230. El observador registra también build de compilación 6230.
iMac 2017, Intel Core i5-7600, macOS Ventura mediante Wine.
Entorno comunicado por el agente: Wine 10.0, Darwin 22.6.0 y Windows 10 build 19043.
Servidor: ActivTradesEU-Server.
Agente: Core 1, 127.0.0.1:3000; exclusivamente agentes locales.
Símbolo principal: GOLD, M1. Símbolo auxiliar: EURUSD.
Periodo del Probador: 14/01/2026–15/01/2026.
Modelado: cada tick basado en ticks reales, sin retrasos.
Depósito simulado: 100.000 EUR, apalancamiento 1:30.
Optimización, forward y cálculo de beneficios en pips desactivados.
El programa utilizado fue Observador_ActivTrades_EURUSD_SYNC_20260114_OBS01.ex5. Es independiente y no realiza operaciones comerciales: no utiliza OrderCheck, OrderSend ni funciones de cálculo de beneficios.
El valor predeterminado del código fuente es Autorizar_Ejecucion_Observador=false. La ejecución de OBS01 documentada aquí, la del 01/11/2026, se habilitó cambiando exclusivamente ese parámetro a true en la columna «Valor» del Probador, sin modificar ni recompilar el código fuente. Al finalizar, el parámetro del Probador se devolvió a false.
En la inicialización selecciona GOLD y después EURUSD mediante SymbolSelect; ambos retornaron true con error 0. Consulta sus propiedades, pero no utiliza CopyRates, CopyTicks, CopyBuffer ni consultas de series históricas.
La ventana de observación fue [14/01/2026 12:00:00, 12:01:00), en tiempo histórico del Probador. Se toma una muestra en el primer evento OnTick() efectivamente procesado de cada segundo, con un máximo de 60. Esto no presupone que sea el primer tick real de GOLD.
Cada muestra consulta, en este orden:
SymbolInfoTick(GOLD).
SymbolInfoTick(EURUSD).
SymbolIsSynchronized(GOLD).
SymbolIsSynchronized(EURUSD).
Cada consulta lleva su propio ResetLastError() previo y una lectura de GetLastError() inmediatamente posterior. Los mensajes se imprimen después de completar las cuatro consultas. OnTimer() solo comprueba el límite de finalización.
Este es el extracto mínimo de las cuatro consultas utilizadas, omitiendo los contadores de tiempo que las rodean. OBS_GOLD contiene "GOLD", OBS_FX contiene "EURUSD" y sample es la estructura que almacena la muestra:
ResetLastError(); sample.gold_ok=SymbolInfoTick(OBS_GOLD,sample.gold); sample.gold_error=GetLastError(); ResetLastError(); sample.fx_ok=SymbolInfoTick(OBS_FX,sample.fx); sample.fx_error=GetLastError(); ResetLastError(); sample.sync_gold=SymbolIsSynchronized(OBS_GOLD); sample.gold_sync_error=GetLastError(); ResetLastError(); sample.sync_fx=SymbolIsSynchronized(OBS_FX); sample.fx_sync_error=GetLastError();
El fragmento reproduce la secuencia existente; no constituye una modificación del observador ni un programa completo independiente.
Los resultados de las 54 muestras fueron:
EURUSD presentó 40 marcas temporales distintas. La diferencia GOLD.time_msc − EURUSD.time_msc estuvo entre 4 y 3.546 ms; nueve muestras superaron los 2.000 ms de referencia del diagnóstico previo.
La primera muestra, correspondiente a las 12:00:00 históricas, registró:
GOLD: Bid 4632.93, Ask 4633.26; marca temporal 12:00:00.073.
EURUSD: Bid 1.16546, Ask 1.16555; marca temporal 11:59:59.562.
Diferencia temporal entre cotizaciones: 511 ms.
Sincronización: GOLD=true; EURUSD=false; errores inmediatos=0.
El tramo instrumentado de la primera consulta SymbolInfoTick(EURUSD), entre el contador anterior al reset y el posterior a la lectura del error, fue de 997.176 µs. No interpretamos esta duración como explicación demostrada del retorno falso.
El Diario original contiene esta secuencia, con horas externas del agente del 01/11/2026, distintas del tiempo histórico simulado:
Hubo seis segundos sin observación: 12:00:26, 12:00:44, 12:00:52, 12:00:55, 12:00:56 y 12:00:59. No los interpretamos como segundos sin ticks, ni inferimos continuidad del estado entre muestras.
La finalización se inició mediante OnTick() a las 12:01:00 históricas y quedó confirmada en OnDeinit. No hubo operaciones comerciales.
Solicitamos aclaración sobre estas cuestiones:
¿Qué garantiza exactamente SymbolIsSynchronized() dentro del Probador para un símbolo auxiliar? ¿Su comportamiento y requisitos son los mismos que para el símbolo principal? La referencia oficial describe la sincronización entre los datos del terminal y los del servidor, pero necesitamos precisar su aplicación en este contexto histórico.
¿Puede ser un estado esperado que devuelva false con error 0 mientras SymbolInfoTick() devuelve true y actualiza precios y marcas temporales? ¿Qué condiciones documentadas permitirían explicar esa combinación?
¿Qué relación existe entre los mensajes symbol synchronized, history synchronized, history ticks synchronized y el booleano de esta función? ¿Alguno de esos mensajes garantiza que una consulta posterior deba devolver true?
¿Existe algún requisito adicional documentado para un símbolo auxiliar seleccionado y consultado únicamente mediante propiedades y ticks? En particular, ¿interviene la creación o sincronización de una serie por periodo, aunque el observador no solicite barras?
¿Es esta función un requisito adecuado para acreditar la disponibilidad de cotizaciones históricas de un símbolo auxiliar utilizado en una conversión monetaria dentro del Probador? Si tiene limitaciones para ese propósito, ¿qué comprobaciones documentadas recomienda MetaQuotes y qué garantiza cada una?
¿Existe alguna incidencia o limitación conocida relevante en build 6230 o bajo Wine? ¿Qué evidencia adicional mínima necesitarían para distinguir comportamiento previsto, limitación del entorno o incidencia reproducible?
Disponemos del código fuente del observador y del siguiente extracto público de la sesión completa OBS01:
OBS01_20261101_0843_Core1_EXTRACTO_SESION_PUBLICO_L079-L932.log
Contiene 854 líneas y 343.808 bytes, correspondientes a las líneas 79–932 del Diario acumulado original. Conserva íntegramente los mensajes técnicos de OBS01 y del agente durante la sesión de las 08:43, sin la sesión anterior de LOG01. El Diario acumulado original permanece conservado sin modificaciones y no forma parte de los adjuntos públicos previstos.
SHA-256:
9dee83626c633e6b0b68f1a3952f2018f6b7c97d230bec4f6d873c822a0b6a8c
Dos diagnósticos anteriores también terminaron sin operaciones y como NO CONCLUYENTES. La conversión histórica USD/EUR continúa sin validar. En esta fase solicitamos aclaración técnica antes de decidir cualquier cambio de código, criterio o nueva ejecución.
Gracias por su ayuda.