А можно код сделать короче ?

 

Всем здравствовать :) .


Вот, хочу контролировать время нового бара не в переменной, а в файле .

Поскольку приходится выгружать терминал, даже выключать комп, то все переменные пропадают . А запись в файле сохраняется.

И при следующем включении компа и запуске терминала, можно посмотреть время нулевого бара из файла, и если бар новый, то скрипт отрабатывает дальше, а если бар то же, то выходим из скрипта .

Пока придумал вот такую конструкцию . А компактнее можно сделать ?

//-------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
// если время нулевого бара изменилось ,то скрипт работает дальше

int start()
{

  int value=0;

  // дискриптор файла
  int  handler=FileOpen("timebar.txt", FILE_CSV|FILE_READ, '\t');
  Comment(handler) ;  
 
  // файла нет  -  создать
  if(handler<1)
    {
     //и  записать время нулевого  бара
     int handlew=FileOpen("timebar.txt", FILE_CSV|FILE_WRITE, '\t');
     FileWrite(handlew, DoubleToStr( Time[0] ,0));
     FileClose(handlew);
    }

  // файл есть
  if(handler==1)
    {
     // считать время 
     string str=FileReadString(handler);
     FileClose(handler);
     value=StrToDouble(str) ;
     Comment(value);  
     
     // если время бара еще тоже,  то покидаем скрипт
     if(Time[0] == value)  
     return(0);
     
     // если  пришел новый бар , то запомнить его время в файле   
     handlew=FileOpen("timebar.txt", FILE_CSV|FILE_WRITE, '\t');
     FileWrite(handlew, Time[0]);
     FileClose(handlew);  
     
    }
  
  }
//+------------------------------------------------------------------+

С одним дискриптором сделать не получилось . Пришлось делать два - один на запись, другой на чтение .

 

Если не обязательно использовать файл попробуйте глобальные переменные

 
StatBars писал (а) >>

Если не обязательно использовать файл попробуйте глобальные переменные

конечно не обязательно

 

Запускаем терминал .

Запускаем скрипт .

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
 GlobalVariableSet("BarsTotal",777) ;
 int  var =  GlobalVariableGet("BarsTotal") ;
 Comment(var);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Выгружаем терминал . Прошло время .

Запускаем терминал .

Запускаем скрипт .

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
 int  var =  GlobalVariableGet("BarsTotal") ;
 Comment(var);
//----
   return(0);
  }
//+------------------------------------------------------------------+

На графике :


Работает .

Спасибо .


Ну а если вырубать комп, то придется писать в файл .

 
sprite писал(а) >>

Запускаем терминал .

Запускаем скрипт .

Выгружаем терминал . Прошло время .

Запускаем терминал .

Запускаем скрипт .

На графике :

Работает .

Спасибо .

Ну а если вырубать комп, то придется писать в файл .

Да-нет не придёться

 

Мне это понадобилось для проверки эксперта на демо на дневных барах .

В начале торговой сессии включается комп .

Запускается терминал и все советники на дневных графиках, советники проверяют наличие нового бара, и делают свою работу .

После отработки советников, выгружается терминал . Вырубается комп .

И жду до следующей сессии .

 
StatBars писал (а) >>

Да-нет не придёться

( самому проверять еще не приходилось)

Точно .

Global Variables

Глобальные переменные (global variables) - это удобный инструмент для организации обмена информацией между программами или для сохранения числовых значений вашей программы на время выключения MetaTrader’а или компьютера.

 
sprite писал (а) >>

будет помнить ? ( самому проверять еще не приходилось)

Да, глобальные переменные тоже сохраняются в файл. Правда, только при корректном завершении работы терминала.

Поэтому файл - надежнее (но тоже не идеальный вариант), при краше терминала (если он случился не в момент записи) информация не потеряется.

 
komposter писал (а) >>

Да, глобальные переменные тоже сохраняются в файл. Правда, только при корректном завершении работы терминала.

Поэтому файл - надежнее (но тоже не идеальный вариант), при краше терминала (если он случился не в момент записи) информация не потеряется.

Понятно, спасибо .

Ну а тогда, с глобальными переменными пока так :

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  // первый старт советника 
  if(!GlobalVariableCheck("BarTime"))
       GlobalVariableSet("BarTime",Time[0]) ;

  if(GlobalVariableCheck("BarTime"))
  { int  var =  GlobalVariableGet("BarTime") ;
    if  (var == Time[0]) 
    {Comment("Тот же бар " , var); 
     return ; // выйти  из  советника
  } 
  
   // Новый бар , работать дальше
   GlobalVariableSet("BarTime",Time[0]) ;
   Comment("Новый бар " , var); 
  } 
 



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