обновить файл автономной диаграммы .hst

 

Пишу вам с помощью гугл-переводчика, англоязычное сообщество бесполезно, надеюсь, кто-то здесь может вам помочь

моя проблема:

У меня есть скрипт, с помощью которого я сохраняю 1000 свечей в файле .hst

если я сделаю небольшое число в коде для цикла for, например 1, тогда у меня будет только одна свеча на моей диаграмме.

Можете ли вы как-то отрегулировать, чтобы не удалялись другие свечи, которые находятся в файле .hst?


//+------------------------------------------------------------------+
 //| Save HST File                                                    |
 //+------------------------------------------------------------------+

   if(StringLen(str)>10)
   {
    ExtHandle=FileOpenHistory(NewFileName,FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
    if(ExtHandle<0) return;


    //--- write history file header
    c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
    ArrayInitialize(i_unused,0);
    FileWriteInteger(ExtHandle,file_version,LONG_VALUE);
    FileWriteString(ExtHandle,c_copyright,64);
    FileWriteString(ExtHandle,c_symbol,12);
    FileWriteInteger(ExtHandle,i_period,LONG_VALUE);
    FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);
    FileWriteInteger(ExtHandle,0,LONG_VALUE);
    FileWriteInteger(ExtHandle,0,LONG_VALUE);
    FileWriteArray(ExtHandle,i_unused,0,13);

            int BarsBack=1000;

            for(int i=BarsBack; i>=1; i--)
            {
               //--- write history file
               if(date>0)
               {
                start_pos=BarsBack;
                rate.open=open;
                rate.low=low;
                rate.high=high;
                rate.close=close;
                rate.tick_volume=(long)volume;
                rate.spread=0;
                rate.real_volume=0;
                rate.time=date;
      
                if(IsStopped()) break;
      
                last_fpos=FileTell(ExtHandle);
                last_volume=(long)volume;
                FileWriteStruct(ExtHandle,rate);
               }
           }//for

  //---
  FileFlush(ExtHandle);
  FileClose(ExtHandle);
  }//StringLen(str)>10


//+------------------------------------------------------------------+
//| Update Chart                                                     |
//+------------------------------------------------------------------+

   if(chart_id==0)
     {
        long id=ChartFirst();
        while(id>=0)
        {
            //--- find appropriate offline chart
            if(ChartSymbol(id)==c_symbol && ChartPeriod(id)==i_period && ChartGetInteger(id,CHART_IS_OFFLINE))
              {
                chart_id=id;
                ChartSetInteger(chart_id,CHART_AUTOSCROLL,true);
                ChartSetInteger(chart_id,CHART_SHIFT,true);
                ChartNavigate(chart_id,CHART_END);
                ChartRedraw(chart_id);
                PrintFormat("Chart window [%s,%d] found",c_symbol,i_period);
                break;
              }
            //--- enumerate opened charts
            id=ChartNext(id);
         }
       }
    //--- refresh window 
    if(chart_id!=0)
      { 
        ChartSetSymbolPeriod(chart_id,Symbol(),i_period);

        Print("Chart refresh call");
      }
 
if(ExtHandle<0) return;

FileSeek(ExtHandle, 0, SEEK_END);

позволит дописывать новые данные в конец файла

 

Спасибо за пример, но если я напишу так, я снова получу только 1 подсвечник в моем .hst файле:


if(ExtHandle<0) return;
FileSeek(ExtHandle, 0, SEEK_END);

for(int i=1; i>=1; i--) // run 1 loop results also just 1 candelstick in .hst file
 
if(date>0)

где изменяется date?

похоже вы показали кусок текста программы и хотите получить ответ. 

совет: пройдите пару циклов в отладочном режиме построчно с контролем значений переменных и сразу все станет ясно

 
Я попробую в течение нескольких дней протестировать разные вещи с помощью FileSeek.

очень полезно, что здесь кто-то вообще дает советы

на английском форуме нет реальной помощи