Бесконечный цикл. Ошибка в коде.

 

Помогите разобраться с синтаксом. Должно получиться так:

if <условие> then

<деуствие>

end if;


if <условие> then

<деуствие>

end if;


А у меня не выходит из цикла, выполня.ться оба цикла.

     if (ExtMapBuffer[pos]> Ask)  
       
{
        string MADn;
        string MAUp;
        //MAUp=Ask;
        int handle;
 datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "1");
     FileClose(handle);
   }
    handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "0");
     FileClose(handle);
   }
                    
      }    
         }  
              
          
      if (ExtMapBuffer[pos]< Ask)  
      
{
      //  string MAUp;
        //MAUp=Ask;
      //  int handle;
 //datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "1");
     FileClose(handle);
   }
       handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "0");
     FileClose(handle);
   }       
      }  
 
vlandex:

Помогите разобраться с синтаксом. Должно получиться так:

в конструкции

if (ExtMapBuffer[pos]> Ask)

Поставьте открывающую и закрывающую фигурные скобки туда, где им место. 

 
А собственно, где тут сам цикл? Что-то я не заметил ни команды for, ни команды while. Мож я не туда смотрел?
 
Выделил { красным цветом где поставил, все равно и в первом случае выполняется иф и во втором случае выполняется, файлы постоянно перезаписываються.
 
drknn:
А собственно, где тут сам цикл? Что-то я не заметил ни команды for, ни команды while. Мож я не туда смотрел?

ну не цикл, а конструкция иф, условие. выполняються почему-то оба условия, причем противоречивые.
 
vlandex:

ну не цикл, а конструкция иф, условие. выполняються почему-то оба условия, причем противоречивые.


Нужно снять дамп данных

if (ExtMapBuffer[pos]> Ask)  {
   Print("Когда больше ExtMapBuffer[",pos,"] = ",ExtMapBuffer[pos]," Ask = ",Ask);
}    
if (ExtMapBuffer[pos]< Ask){
   Print("Когда меньше ExtMapBuffer[",pos,"] = ",ExtMapBuffer[pos]," Ask = ",Ask);
}
 

непомогло. вот весь код:

void ema()
  {
   double pr=2.0/(MA_Period+1);
   int    pos=Bars-2;

      

   
   
   if(ExtCountedBars>2) pos=Bars-ExtCountedBars-1;
//---- main calculation loop
   while(pos>=0)
     {
      if(pos==Bars-2) ExtMapBuffer[pos+1]=Close[pos+1];
      ExtMapBuffer[pos]=Close[pos]*pr+ExtMapBuffer[pos+1]*(1-pr);
         
      
        
           pos--;
           
             if (ExtMapBuffer[pos]> Ask) { 
       Print("Когда больше ExtMapBuffer[",pos,"] = ",ExtMapBuffer[pos]," Ask = ",Ask);

    
        string MADn;
        string MAUp;
        //MAUp=Ask;
        int handle;
 datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "1");
        FileClose(handle);
   }
    handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "0");
     FileClose(handle);
   }
           }         
         
         }  
               
          
      if (ExtMapBuffer[pos]< Ask) { 
      Print("Когда меньше ExtMapBuffer[",pos,"] = ",ExtMapBuffer[pos]," Ask = ",Ask);

    
       
      //  string MAUp;
        //MAUp=Ask;
      //  int handle;
 //datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "1");
     FileClose(handle);
   }
       handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    {
     FileWrite(handle, "0");
     FileClose(handle);
          
        }
      }
      
  }
 

А вопрос можно?

Как часто сохранять собираетесь? На каждом тике или же один раз на бар?

 
Vinin:

А вопрос можно?

Как часто сохранять собираетесь? На каждом тике или же один раз на бар?


Думаю на каждом тике, хотя без разницы...пока
 

Спрячьте условие в else:

if ( Buffer > ask ) { ... }

else

{

if ( buffer < ask ) { ... }

}

И даблы вы не правильно сравниваете: https://www.mql5.com/ru/articles/1561

 

Сделал вроде, но теперь терминал зависает, почему? Мож времени мало на запись, ошибка записи файла?

  if (ExtMapBuffer[pos]> Ask)
      {                 
        string MADn;
        string MAUp;
        //MAUp=Ask;
        int handle;
 datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    
     FileWrite(handle, "1");
        FileClose(handle);
   
    handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    
     FileWrite(handle, "0");
     FileClose(handle);
                  }
         else
         {  
                if (ExtMapBuffer[pos]< Ask)  
{
      //  string MAUp;
        //MAUp=Ask;
      //  int handle;
 //datetime orderOpen=OrderOpenTime();
 handle=FileOpen("MAUp.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    
     FileWrite(handle, "1");
     FileClose(handle);
   
       handle=FileOpen("MADn.txt", FILE_CSV|FILE_WRITE, '\t');
 if(handle>0)
    
     FileWrite(handle, "0");
     FileClose(handle);
         }
}
Причина обращения: