La función StrToTime provoca el error 4051

 

Hola,

el editor en build >600 no le gusta la función StrToTime.

Llamarla provoca el error 4051. ¿Qué ocurre?

El código está aquí:

//+------------------------------------------------------------------+
//| test.mq4 |
//+------------------------------------------------------------------+

#property version "1.00"

//--- input parameters
input string TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
datetime xxxxx = StrToTime("21:45"); // makes no difference with TimeClose_ from the input
Print("error: "+GetLastError());
}
//+------------------------------------------------------------------+

El resultado con cada tilde:

Lo que está mal aquí. La compilación con el editor 509 no causa ningún error, por supuesto

 
kla-mue:

Hola,

el editor en build >600 no le gusta la función StrToTime.

Llamarla provoca el error 4051. ¿Qué ocurre?

El código está aquí:

<borrado>

Por favor, publique su código utilizando el botón SRC
 

Bien, ahora lo sé... la próxima vez...

¿tiene una solución para mi problema?

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//+------------------------------------------------------------------+

#property version   "1.00"

//--- input parameters
input string   TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   datetime xxxxx = StrToTime("21:45");
   Print("error: "+GetLastError());
  }
//+------------------------------------------------------------------+
 
kla-mue: OK, ahora lo sé... la próxima vez...
  1. La próxima vez edita tu post original.
  2.    datetime xxxxx = StrToTime("21:45");
       Print("error: "+GetLastError());
    test EURUSD,H1: error: 4051
    No llame a GetLastError() a menos que tenga un error. ¿Es xxxx == 0? ¿Por qué no lo imprimiste junto con GLE?
  3. Quizás deberías probar el nuevo StringToTime
 
kla-mue:

Bien, ahora lo sé... la próxima vez...

¿tiene una solución para mi problema?

Puede que se haya solucionado . . https://www. mql5.com/en/forum/149475 pero, de todas formas, infórmelo al Servicio de Atención al Cliente.

 
WHRoeder:
  1. La próxima vez edita tu post original.
  2. test EURUSD,H1: error: 4051
    No llame a GetLastError() a menos que tenga un error. ¿Es xxxx == 0? ¿Por qué no lo imprimiste junto con GLE?
  3. Quizás debas probar el nuevo StringToTime



@2: ¿cómo puedo saber si hay un error, si no pregunto a la GLE?

Este código es para averiguar, por qué mi EA está dando mensajes de error. No hay otro propósito.


@3: el StringToTime causa el mismo error :(


¿Hay alguna otra posibilidad?

 
kla-mue: @2: ¿cómo puedo saber si hay un error, si no le pregunto a la GLE?

La GLE no te dice SI tienes un error. Te dice cuál es el error CUANDO lo tienes.

La GLE devuelve el último código de error. ¿Ese código está asociado a qué código? Desconocido. Podría haber sido algo asociado con el procesamiento interno de la terminal o una llamada de una función anterior que usted llamó.

Don't call GetLastError() unless you have an error
Tiene un error si OrderSend devuelve un ticket negativo, Time[i] devuelve cero, o si StringToTime devuelve cero, etc.
 

StringToTime

La función convierte una cadena que contiene la hora o la fecha en formato "aaaa.mm.dd [hh:mi]" en tipo datetime.

datetime StringToTime(
string value // date string
);

Parámetros

valor

[in] Cadena en formato " aaaa.mm.dd hh:mi ".

datetime xxxxx = StringToTime(D'21:45');
 
qjol:
D'21:45'

Eso no es una cadena, es una fecha-hora ya (21:45 del día en que compiló el código.)
Lee el documento StrToTime()

  datetime var1; var1=StrToTime("2003.8.12 17:35"); var1=StrToTime("17:35"); // devuelve la fecha actual con la hora dada var1=StrToTime("2003.8.12"); // devuelve la fecha con la hora de medianoche "00:00"
 
pero hay que utilizar el formato "aaaa.mm.dd hh:mm", de lo contrario se obtiene el error 4051
 

¡PERFECTO! Ahora se ejecuta sin un error =)

¡Debe ser el formato de fecha completo!

¡¡TNX mucho!!

Razón de la queja: