Ошибка с кодом 1 при OrderSend - страница 2

 
Roger:
Т.е., если у меня до этого была ошибка в программе, но я не вызвал функцию GetLastError, и потом в другом месте программы я вдруг, ни с того ни с сего, вызову эту функцию, то все равно получу 0?

Пока не вызовите GetLastError, код ошибки не обнулиться, а как только вызовите, вернет последнюю случившуюся ошибку.
 
Talex:
Roger:
Т.е., если у меня до этого была ошибка в программе, но я не вызвал функцию GetLastError, и потом в другом месте программы я вдруг, ни с того ни с сего, вызову эту функцию, то все равно получу 0?

Пока не вызовите GetLastError, код ошибки не обнулиться, а как только вызовите, вернет последнюю случившуюся ошибку.

Которая могла быть сформирована при предыдущем прогоне программы. В таком случае в Init() лучше всего обнулять код ошибки.
 
Vinin:

Которая могла быть сформирована при предыдущем прогоне программы. В таком случае в Init() лучше всего обнулять код ошибки.

Похоже это излишне.

Справочник MQL4 - Выполнение программ - Ошибки выполнения

  • Выполнение программ
  • Вызов импортируемых функций
  • Ошибки выполнения

В исполняющей подсистеме клиентского терминала существует возможность сохранения кода ошибки в случае ее возникновения при выполнении mql4-программы. Для каждой исполняемой mql4-программы предусмотрена своя собственная специальная переменная last_error. Перед запуском функции init переменная last_error обнуляется. При возникновении ошибочной ситуации во время вычислений или в процессе вызова встроенной функции переменная last_error принимает соответствующий код ошибки. Значение, сохраненное в этой переменной, можно получить при помощи функции GetLastError(). При этом переменная last_error обнуляется.

.
 
cpp.tula писал (а):
MetaQuotes:
Вы забыли указать точный пример вызова OrderSend

void buyLot() {
 
   int ticket;
   double dLots = getLot();
   if (dLots == 0) return;
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,dLots)<=0 || GetLastError()==134) return;
   
   ticket=OrderSend(Symbol(),OP_BUY,dLots,Ask,3,Ask-StopProfit*Point,Ask+(ClosePribul*5)*Point,"StepByStep Cpp",magicnumber,0,Blue);
   if(ticket>0)
   {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
   }
   else 
   {
      int err=GetLastError();
      Print("Order open error(",err,")");
   }
}

1. Стоп лосс и тейк профит следует устанавливать относительно цены закрытия (для BUY - это Bid) - соответственно при выставлении стопов вы не учитываете спред и можете получить ошибку "неверные стопы".

2. Не могли бы вы привести фрагмент журнала клиентского терминала - 10 строк вверх и вниз от сообщения об ошибке с кодом '1' ?
 
Alexander:
cpp.tula писал (а):
MetaQuotes:
Вы забыли указать точный пример вызова OrderSend
1. Стоп лосс и тейк профит следует устанавливать относительно цены закрытия (для BUY - это Bid) - соответственно при выставлении стопов вы не учитываете спред и можете получить ошибку "неверные стопы".

2. Не могли бы вы привести фрагмент журнала клиентского терминала - 10 строк вверх и вниз от сообщения об ошибке с кодом '1' ?


По поводу журнала - к сожалению в журнале не могу найти это место (каталог log). У меня ещё позже вылетела критическая ошибка (содержание ошибки сохранил). Как я понял журнал не пишется в файл лога сразу. И видимо этот момент остался в памяти и не записался.
 
может нужно смотреть не \логи а \тестер\логи?
 
Shinigami:
может нужно смотреть не \логи а \тестер\логи?
Из контекста вопроса речь именно о терминале, соотвественно, нужны логи терминала, а не тестера:

Открыт конкусный счёт (для чемпионата). Во время выполнения одного из OrderSend выскочила ошибка 1 (MT4 build 208).
 
Alexander:
cpp.tula писал (а):
MetaQuotes:
Вы забыли указать точный пример вызова OrderSend

void buyLot() {
 
   int ticket;
   double dLots = getLot();
   if (dLots == 0) return;
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,dLots)<=0 || GetLastError()==134) return;
   
   ticket=OrderSend(Symbol(),OP_BUY,dLots,Ask,3,Ask-StopProfit*Point,Ask+(ClosePribul*5)*Point,"StepByStep Cpp",magicnumber,0,Blue);
   if(ticket>0)
   {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
   }
   else 
   {
      int err=GetLastError();
      Print("Order open error(",err,")");
   }
}

1. Стоп лосс и тейк профит следует устанавливать относительно цены закрытия (для BUY - это Bid) - соответственно при выставлении стопов вы не учитываете спред и можете получить ошибку "неверные стопы".

2. Не могли бы вы привести фрагмент журнала клиентского терминала - 10 строк вверх и вниз от сообщения об ошибке с кодом '1' ?
НАШЁЛ. Искал не там (было в experts\log). Файл с логами прилагаю. Ошибка содержится в файле \experts\20070808.log Время - 22:42. Единственный момент - у меня была закомментрована строка
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
соответственно в логах нет -
BUY order opened : 
Файлы:
log.zip  5 kb
 
Спасибо за логи. Не могли бы вы указать операционную систему и параметры компьютера (процессор - память)?
 
Alexander:
Спасибо за логи. Не могли бы вы указать операционную систему и параметры компьютера (процессор - память)?
Windows XP Professional с последними апдейтами
Процессор Celeron 2400
Память 2 Гб

Проблем с памятью и функционированием железа нет. Дополнительно к этому постоянно на этой машине каждый день идёт архивация - битых архивов нет.
Причина обращения: