нужна помощь.

 

надоели мне хвосты из-за выброса котировок в Роловер. Решил написать функцию чистки истории. Но что-то не работает. 

Посмотрите, профи, где косяк ?  

input string TimeRollover="22:00";

bool ft=true;



int OnInit()

  {

   ft=true;

   OnTick();

   return(INIT_SUCCEEDED);

  }



void OnTick()

  {



   datetime tr=StringToTime(TimeRollover);

   if(TimeCurrent()>=tr+5*60 && TimeCurrent()<tr+10*60 && ft) {if(DelHist()) ft=false;}

   else ft=true;

  }



bool DelHist()

  {

   int ExtHandle=FileOpenHistory(_Symbol+(string)_Period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

   if(ExtHandle<0)

   {

      Alert("No Change");

      return false;

   }

   

   MqlRates rate[10];

   for(int i=1;i<7;i++)

     {

      rate[i].close= High[0];

      rate[i].open = High[0];

      rate[i].high = High[0];

      rate[i].low=High[0];

      FileWriteStruct(ExtHandle,rate[i]);

     }

   

   FileFlush(ExtHandle);

   if(ExtHandle>=0)

     {

      FileClose(ExtHandle);

      ExtHandle=-1;

      RefreshRates();

      ft - false;

      return true;

     }

   else return false;

  }


 

 

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

Нужен либо офф-лайн график (и там рисовать что угодно), либо еще какое-нибудь извращение типа свечного индикатора поверх графика.

Либо отключаться от интернета.

ps: сам код правки не смотрел. 

 
Andrey Khatimlianskii:

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

Нужен либо офф-лайн график (и там рисовать что угодно), либо еще какое-нибудь извращение типа свечного индикатора поверх графика.

Либо отключаться от интернета.

ps: сам код правки не смотрел. 

Графики постоянно не синхронизируются. Попробуй подятнуть хвосты в истории вручную, через архив котировок. хвосты исчезнкт, пока сам не обновишь график. Помогите с кодом разобратсья. 
 
Dmitiry Ananiev:
Графики постоянно не синхронизируются. Попробуй подятнуть хвосты в истории вручную, через архив котировок. хвосты исчезнкт, пока сам не обновишь график. Помогите с кодом разобратсья. 

А что должен делать советник? Затирать бары при появлении?

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

Если придумать, как их сбросить и как потом заставить терминал перечитать файл (может, "обновить" поможет?), то алгоритм корректировки не сложный:

  • открываем файл
  • смещаемся на нужное кол-во байт от конца (кол-во баров * размер структуры)
  • на всякий случай читаем время бара, на который мы сместились, и если оно не совпадает с искомым, смещаемся дальше
  • переписываем необходимое кол-во баров, начиная с найденного
  • закрываем файл
Но не думаю, что это будет работать.

 

Файлы .hst - бинарные, а не ANSI. Во-вторых, вы не устанавливаете файловый указатель в нужное положение перед записью. А в-третьих, нифига не понял, зачем вы пытаетесь переписать аж 7 последних баров, присвоив их всем четырём ценам значение текущего хая.

PS. В предыдущем комменте вам всё правильно уже написали. 

 
Sergei Vladimirov:
Файлы .hst - бинарные, а не ANSI. Во-вторых, вы не устанавливаете файловый указатель в нужное положение перед записью. А в-третьих, нифига не понял, зачем вы пытаетесь переписать аж 7 последних баров, присвоив их всем четырём ценам значение текущего хая.
Ну как то так я и думал про указатель.  А котировки править, чтоб хвосты убрать, которые рисуются в ролловер в момент расширения спреда. 
 
Dmitiry Ananiev:
Ну как то так я и думал про указатель.  А котировки править, чтоб хвосты убрать, которые рисуются в ролловер в момент расширения спреда. 
Нужен FileSeek( handle, sizeof( MqlRates ) * bars_count, SEEK_END ), и только потом запись.
Причина обращения: