He leído en algún foro que los comentarios durante las pruebas no se escriben en el registro (para ahorrar espacio en el disco). En este sentido, mi pregunta es: ¿Cómo puedo depurar el programa en el probador? He probado printf y PrintFormat - nada funciona en el probador, incluso he probado con Alert.
Scriptong: He leído en algún foro que los comentarios durante las pruebas no se escriben en el registro (para ahorrar espacio en el disco). Entonces, mi pregunta es: ¿Cómo puedo depurar el programa en el probador? He probado printf y PrintFormat - nada funciona en el probador, incluso he probado con Alert.
Mira los registros de los agentes de prueba - todo está escrito allí, pero sólo para los agentes locales. Los agentes remotos no escriben la salida de Print() en los registros por razones de ahorro de información.
Comprobado. Mi agente es local (al menos aparece en Local). Después de ejecutar el Asesor Experto en el modo"Cada tick", el contenido de la pestaña "Registro" coincide con el contenido del archivo de registro del agente (Asesor Experto y archivos de registro adjuntos).
Sí, lo olvidé. El periodo de prueba es el "último mes".
Su registro dice "versión de depuración de 'test.ex5', por favor recompile".
Esto significa que el EX5 destinado a la depuración (al pulsar F5 en el editor se produce el EX5 con información de depuración) no puede ejecutarse en el probador.
Haremos una recompilación automática de tales EAs. Mientras tanto, recompile manualmente su EA.
Y probablemente he sacado el tema, no se me ocurre otra razón...
Intentaré describir la situación con más detalle.
Hay una clase simple "CMqlTimer", la tarea de esta clase es seguir el momento de cambio de diferentes intervalos de tiempo: hora, día, semana, mes, año.
Todo se realiza con una primitiva muy simple, por ejemplo, si los minutos son iguales a 0 entonces ha llegado la "nueva hora"; si el número del día de la semana no corresponde al almacenado en la variable entonces ha llegado la alternancia de días ("00:00:00" por la hora del servidor). Y así sucesivamente.
El análisis se realiza cuando se dispara el temporizador, con un intervalo de 1 segundo, el trabajo se realiza en CMqlTimer::OnTimer(). Si el intervalo de tiempo cambia, la función debe ser ejecutada. Por ejemplo, si se trata de un "nuevo" día, se debe ejecutar la función CMqlTimer::OnRolloverDay().
Si eliminamos el resto del código y escribimos sólo OnRolloverDay(), el resultado será el siguiente:
//Function CMqlTimer.OnRolloverDaybool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------////Work variablesstring MessageText; //Text for messageint UserEventID; //Identifier of the user event bool Result; //Returned importance//----------------------------------------------------------------------------//
Result = true;
ResetLastError();
RolloverCountDay = RolloverCountDay+1;
UserEventID = CHARTEVENT_CUSTOM+15;
MessageText = StringFormat("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chartEventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);
//Checking for presence of the errorsif(_LastError!=0)
//В результате работы произошла ошибка
{
Result = false;
}
//----------------------------------------------------------------------------//return(Result);
//----------------------------------------------------------------------------//
}
Todos los eventos del usuario se rastrean y se pasan para su manejo a la clase principal
El aspecto es el siguiente
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------////----------------------------------------------------------------------------//// Processing user events ////----------------------------------------------------------------------------//if(id>CHARTEVENT_CUSTOM)
//User event is received
{
Expert.OnEvent(id,lparam,dparam,sparam);
}
//----------------------------------------------------------------------------//
}
Por lo tanto, los eventos no llegan a OnChartEvent en modo de prueba, es decir, el Asesor Experto no puede manejar un evento enviado mediante EventChartCustom en modo de prueba. Lo he comprobado mostrando todos los eventos en el registro.
PS
Lo más interesante es que en la demo todos los eventos llegan, pero en el probador está funcionando negativamente.
Antes de la 319 todo funcionaba y en el probador, los eventos se manejaban con éxito. Es cierto que la última versión en la que funcionó no puedo decir...
Su registro dice "versión de depuración de 'test.ex5', por favor recompile".
Esto significa que el EX5 destinado a la depuración (al pulsar F5 en el editor se produce el EX5 con información de depuración) no puede ejecutarse en el probador.
Haremos una recompilación automática de tales EAs. Mientras tanto, recompile manualmente su EA.
Gracias. No sabía que había una diferencia entre los archivos obtenidos pulsando F5 y F7.
No entiendo qué es lo que falla, EA funciona en el probador sin errores y en la máquina de pruebas del organizador también pasa sin errores.
Cuando lo ejecuto en una cuenta demo, me da un error cuando intento abrir una orden:
2010.09.06 13:26:50 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.179 [Modo de llenado no soportado] 2010.09.06 13:26:45 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03689 [Modo de llenado no soportado] 2010.09.06 13:26:39 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.174 [Modo de llenado no soportado] 2010.09.06 13:26:34 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03685 [Modo de llenado no soportado] 2010.09.06 13:26:28 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.174 [Modo de llenado no soportado] 2010.09.06 13:26:23 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03688 [Modo de llenado no soportado] 2010.09.06 13:26:18 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.181 [Modo de llenado no soportado]
He leído en algún foro que los comentarios durante las pruebas no se escriben en el registro (para ahorrar espacio en el disco). Entonces, mi pregunta es: ¿Cómo puedo depurar el programa en el probador? He probado printf y PrintFormat - nada funciona en el probador, incluso he probado con Alert.
Comprobado. Mi agente es local (al menos aparece en Local). Después de ejecutar el Asesor Experto en el modo"Cada tick", el contenido de la pestaña "Registro" coincide con el contenido del archivo de registro del agente (Asesor Experto y archivos de registro adjuntos).
Sí, lo olvidé. El periodo de prueba es el "último mes".
Su registro dice "versión de depuración de 'test.ex5', por favor recompile".
Esto significa que el EX5 destinado a la depuración (al pulsar F5 en el editor se produce el EX5 con información de depuración) no puede ejecutarse en el probador.
Haremos una recompilación automática de tales EAs. Mientras tanto, recompile manualmente su EA.
¿Y puedes traer el código completo?
Y probablemente he sacado el tema, no se me ocurre otra razón...
Intentaré describir la situación con más detalle.
Hay una clase simple "CMqlTimer", la tarea de esta clase es seguir el momento de cambio de diferentes intervalos de tiempo: hora, día, semana, mes, año.
Todo se realiza con una primitiva muy simple, por ejemplo, si los minutos son iguales a 0 entonces ha llegado la "nueva hora"; si el número del día de la semana no corresponde al almacenado en la variable entonces ha llegado la alternancia de días ("00:00:00" por la hora del servidor). Y así sucesivamente.
El análisis se realiza cuando se dispara el temporizador, con un intervalo de 1 segundo, el trabajo se realiza en CMqlTimer::OnTimer(). Si el intervalo de tiempo cambia, la función debe ser ejecutada. Por ejemplo, si se trata de un "nuevo" día, se debe ejecutar la función CMqlTimer::OnRolloverDay().
Si eliminamos el resto del código y escribimos sólo OnRolloverDay(), el resultado será el siguiente:
Todos los eventos del usuario se rastrean y se pasan para su manejo a la clase principal
El aspecto es el siguiente
Por lo tanto, los eventos no llegan a OnChartEvent en modo de prueba, es decir, el Asesor Experto no puede manejar un evento enviado mediante EventChartCustom en modo de prueba. Lo he comprobado mostrando todos los eventos en el registro.
PS
Lo más interesante es que en la demo todos los eventos llegan, pero en el probador está funcionando negativamente.
Antes de la 319 todo funcionaba y en el probador, los eventos se manejaban con éxito. Es cierto que la última versión en la que funcionó no puedo decir...
Su registro dice "versión de depuración de 'test.ex5', por favor recompile".
Esto significa que el EX5 destinado a la depuración (al pulsar F5 en el editor se produce el EX5 con información de depuración) no puede ejecutarse en el probador.
Haremos una recompilación automática de tales EAs. Mientras tanto, recompile manualmente su EA.
Y probablemente he sacado el tema, no se me ocurre otra razón...
Intentaré describir la situación con más detalle.
...No entiendo qué es lo que falla, EA funciona en el probador sin errores y en la máquina de pruebas del organizador también pasa sin errores.
Cuando lo ejecuto en una cuenta demo, me da un error cuando intento abrir una orden:
2010.09.06 13:26:50 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.179 [Modo de llenado no soportado]
2010.09.06 13:26:45 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03689 [Modo de llenado no soportado]
2010.09.06 13:26:39 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.174 [Modo de llenado no soportado]
2010.09.06 13:26:34 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03685 [Modo de llenado no soportado]
2010.09.06 13:26:28 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.174 [Modo de llenado no soportado]
2010.09.06 13:26:23 Operaciones '101894' : falló la compra instantánea de 0.10 USDCAD a 1.03688 [Modo de llenado no soportado]
2010.09.06 13:26:18 Operaciones '101894' : falló la compra instantánea de 0.10 USDJPY a 84.181 [Modo de llenado no soportado]
Solicitud de venta:
Solicitud de COMPRA:
OrderCheck no encuentra ningún error.
Reemplazada la consulta ORDER_FILLING_CANCEL por la consulta ORDER_FILLING_AON, el experto funciona.
Pero el problema sigue siendo, por qué hay tanta diferencia en el funcionamiento del probador y del servidor.
Qué broma si el servidor del campeonato se convierte en lo contrario.