Помогите исправить ошибочку!

 

//-----------------------Блок определения размера лота----------------------------  
  if(OrdersTotal()==0)
  {
  for (int n=0;n<OrdersHistoryTotal();n++)
  bool InfoHist=OrderSelect(n,SELECT_BY_POS,MODE_HISTORY);
  if (InfoHist==false)
  {
  Print("Ошибка при доступе к исторической базе");
   
  }
  if ((InfoHist==true)&&(OrderProfit()>0)) lots=0.1;
  if ((InfoHist==true)&&(OrderProfit()<0)) lots=OrderProfit()/20;
   
  return(0);
  }
Постоянно выдает ошибку 2008.11.17 22:34:47 2008.11.07 22:57 Mozg EURUSD,M1: Ошибка при доступе к исторической базе

В чем она заключаеться?

Помогите разобраться!

 

//-----------------------Блок определения размера лота----------------------------
if(OrdersTotal()==0)
{
for (int n=0;n<OrdersHistoryTotal();n++)

{
bool InfoHist=OrderSelect(n,SELECT_BY_POS,MODE_HISTORY);
if (InfoHist==false)
{
Print("Ошибка при доступе к исторической базе");

}
if ((InfoHist==true)&&(OrderProfit()>0)) lots=0.1;
if ((InfoHist==true)&&(OrderProfit()<0)) lots=OrderProfit()/20;
}
return(0);
}

 

Странно: ошибка пропала но советни не делает ни одной сделки, а без этого блока все ок!

Наверно зацикливаеться на n++

Ведь в начале нет ни одной сделки в истории.

Или я ошибаюсь?

 
mozg писал(а) >>

Или я ошибаюсь?

Да, в начале цикл просто не будет выполняться.

 
Figar0 >>:

Да, в начале цикл просто не будет выполняться.

В чем же тогда дело?

 
mozg >>:

В чем же тогда дело?

Возможно в том, что пересенная lot не инициализирована ? Чему будет равно ее значение, если цикл ни разу не выполнится ? 

Собственно, если хотите помощи - выкладывайте весь код, желательно "урезанный" до размера проблемы, если пытаетесь понять как проводить отладку программ - используйте отладочную печать (принт) - печатайте промежуточные результаты. Если просто  позагадывать ребусы - вряд ли кто будет свое время тратить....

Успехов.

 
глобальная переменная lots указанна по умолчанию в начале программы.
 

Странно! Убрал return(0)-все заработало.

return(0);
 
mozg >>:

Странно! Убрал return(0)-все заработало.

Соответственно, (рискну предположить структуру программы) весь код был написан подряд в одной функции. Анализ открытия позиций ниже по коду. Следовательно в этом месте не может не циклится: Общее количество ордеров при первом входе = 0, здесь ордера не выставляются, а дальше прога просто завершает работу. И так до бесконечности....

Успехов.

 

Нет, вы не правы! Советник не написан в одной функции. И лот при входе в программу указан 0.1

Я сам тоже не понял в чес соль, но рабтает-пока без ошибок!

Спасибо всем!

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