Функция StrToTime вызывает ошибку 4051

 

Здравствуйте,

редактор в билде >600 не любит функцию StrToTime.

Вызов ее вызывает ошибку 4051. Что не так?

Код здесь:

//+------------------------------------------------------------------+
//| 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());
}
//+------------------------------------------------------------------+

Результат с каждым тиком:

Что здесь не так. Компиляция с редактором 509, конечно же, не вызывает ошибки

 
kla-mue:

Здравствуйте,

редактор в билде >600 не любит функцию StrToTime.

Вызов ее вызывает ошибку 4051. Что не так?

Код здесь:

<удалено>

Пожалуйста, опубликуйте свой код, используя кнопку SRC
 

Хорошо, теперь я знаю... в следующий раз...

у вас есть решение для моей проблемы?

//+------------------------------------------------------------------+
//|                                                         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: Хорошо, теперь я знаю... в следующий раз...
  1. В следующий раз отредактируйте свое исходное сообщение.
  2.    datetime xxxxx = StrToTime("21:45");
       Print("error: "+GetLastError());
    тест EURUSD, H1: ошибка: 4051
    Не вызывайте GetLastError(), если у вас нет ошибки. Является ли xxxx == 0? Почему вы не вывели его вместе с GLE?
  3. Возможно, вам стоит попробовать новый StringToTime.
 
kla-mue:

Хорошо, теперь я знаю... в следующий раз...

у вас есть решение моей проблемы?

Возможно, проблема уже решена. . . https://www. mql5.com/en/forum/149475 но все равно сообщите об этом в службу поддержки.

 
WHRoeder:
  1. В следующий раз отредактируйте свое исходное сообщение.
  2. тест EURUSD, H1: ошибка: 4051
    Не вызывайте GetLastError(), если у вас нет ошибки. Является ли xxxx == 0? Почему вы не вывели его вместе с GLE?
  3. Возможно, вам стоит попробовать новый StringToTime



@2: как мне узнать, есть ли ошибка, если я не спрашиваю GLE?

Этот код предназначен для выяснения того, почему мой советник выдает сообщения об ошибках. Никакой другой цели.


@3: StringToTime вызывает ту же ошибку :(


Есть ли другая возможность?

 
kla-mue: @2: как узнать, есть ли ошибка, если не спрашивать GLE?

GLE не говорит вам, есть ли у вас ошибка. Он сообщает вам, что это за ошибка, КОГДА она у вас есть.

GLE возвращает последний код ошибки. Этот код связан с каким кодом? Неизвестно. Это может быть что-то связанное с внутренней обработкой терминала или вызов предыдущей функции, которую вы вызывали.

Don't call GetLastError() unless you have an error
У вас есть ошибка, если OrderSend возвращает отрицательный тикет, Time[i] возвращает ноль, или если StringToTime возвращает ноль, и т.д.
 

StringToTime

Функция преобразует строку, содержащую время или дату в формате "yyyy.mm.dd [hh:mi]" в тип datetime.

datetime StringToTime(
string value // date string
);

Параметры

значение

[in] Строка в формате " yyyy.mm.dd hh:mi ".

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

Это не строка, это уже время даты (21:45 того дня, когда вы скомпилировали код).
Прочитайте документ StrToTime()

  datetime var1; var1=StrToTime("2003.8.12 17:35"); var1=StrToTime("17:35"); // возвращает текущую дату с заданным временем var1=StrToTime("2003.8.12"); // возвращает дату с полуночным временем "00:00".
 
но вы должны использовать формат "yyyy.mm.dd hh:mm", иначе вы получите ошибку 4051
 

ОТЛИЧНО! Теперь он работает без ошибок =)

Это должно быть полный формат даты!

Большое спасибо!!!

Причина обращения: