Помогите пожалуйста с функцией FileWrite

 

Хочу записывать эквити и баланс в CSV файл не чаще чем раз в 60 секунд. Написала экспертик, но почему-то с каждым FileWrite стирается предыдущая запись. Посмотрите пожалуйста. Что не так?

datetime timeprev;
string filename;
int init()
  {
   timeprev = TimeCurrent();
   filename = "log_eq_bal.csv";
   int handle=FileOpen(filename, FILE_CSV|FILE_WRITE, ',');
   if(handle>0)
    {
     if(FileSize(handle)==0) FileWrite(handle,"Time","Equity","Balance");
     FileClose(handle); 
    }  
   return(0);  
  }
int start()
  {
   datetime timecur = TimeCurrent();
   if(timecur-timeprev<60)return(0);
   int handle=FileOpen(filename, FILE_READ | FILE_WRITE, ','),bal=AccountBalance(),eq=AccountEquity(),res=-1;
   if(handle>0)
    {
     res = FileWrite(handle,TimeToStr(timecur),eq,bal);
     FileClose(handle);
     if(res>0)timeprev=timecur;
    }
   return(0);
  }


 
  // считаем  что файл уже есть на диске
  int  handle=FileOpen("balance.txt", FILE_CSV|FILE_READ|FILE_WRITE, '\t');
  // переходим в конц файла , иначе все затрем новой записью
  FileSeek(handle, 0, SEEK_END);
  // пишем в конец - то есть добавляем 
  FileWrite(handle, AccountBalance());

 
sprite >>:

Спасибо!

 
Veronica >>:

Хочу записывать эквити и баланс в CSV файл не чаще чем раз в 60 секунд. Написала экспертик, но почему-то с каждым FileWrite стирается предыдущая запись. Посмотрите пожалуйста. Что не так?

В вашем советнике (если я конечно не ошибаюсь что это советник) после 60 секунд от запуска ф-ции init() запись в файл будет

производится на каждом тике.

 
WWer >>:

В вашем советнике (если я конечно не ошибаюсь что это советник) после 60 секунд от запуска ф-ции init() запись в файл будет

производится на каждом тике.


Не будет, т.к. в случае успешной записи я делаю reset:
if(res>0)timeprev=timecur;


Вот рабочий код, если кому надо (в папку experts и ставить наверное лучше на евру, т.к. тики чаще всех):

extern int write_frequency = 60; //how often to write
datetime timeprev;
string filename;
int init()
{
timeprev = TimeCurrent();
filename = "log_eq_bal.csv";
int handle=FileOpen(filename, FILE_CSV|FILE_READ|FILE_WRITE, ',');
string bal=DoubleToStr(AccountBalance(),2), eq=DoubleToStr(AccountEquity(),2);
if(handle>0)
{
if(FileSize(handle)==0) FileWrite(handle,"Time","Equity","Balance"); //writing header
FileSeek(handle, 0, SEEK_END);
FileWrite(handle,TimeToStr(TimeCurrent()),eq,bal); //writing starting values
FileClose(handle);
}
return(0);
}
int start()
{
datetime timecur = TimeCurrent();
if(timecur-timeprev<write_frequency)return(0);
int handle=FileOpen(filename, FILE_CSV|FILE_READ|FILE_WRITE, ','), res=-1;
string bal=DoubleToStr(AccountBalance(),2), eq=DoubleToStr(AccountEquity(),2);
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
res = FileWrite(handle,TimeToStr(timecur),eq,bal);
FileClose(handle);
if(res>0)timeprev=timecur;
}
return(0);
}