Errores, fallos, preguntas - página 119

 
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.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

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".

Archivos adjuntos:
test.mq5  2 kb
 

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.

 
alexvd:
¿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:

//Function CMqlTimer.OnRolloverDay
bool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------//
//Work variables
string MessageText; //Text for message
int    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 chart
EventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);

//Checking for presence of the errors
  if(_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

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& 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...

 
stringo:

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.
 
Interesting:

Y probablemente he sacado el tema, no se me ocurre otra razón...

Intentaré describir la situación con más detalle.

...
Gracias. Lo pensaremos.
 

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:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_BID);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_SELL;
         request.type_filling=ORDER_FILLING_CANCEL

Solicitud de COMPRA:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_ASK);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_BUY;
         request.type_filling=ORDER_FILLING_CANCEL;

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.


Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Qué broma si el servidor del campeonato se convierte en lo contrario.