//+------------------------------------------------------------------+
//|                                                      HST2CSV.mq4 |
//|                                       Copyright © 2010, sangmane |
//|                                        http://www.mt4scripts.com |
//+------------------------------------------------------------------+
#property copyright "http://www.mt4scripts.com"
#property show_inputs

extern string FileNameHistory="GBPUSD60.HST";
extern string FileNameCSV="GBPUSD60.CSV";
extern int    NumberOfRows = 1000;
extern string StartTime = "2008.01.01 00:00:00";

int start()
  {
    datetime tStart = StrToTime(StartTime);
    if(tStart==0)
    {
      Comment("Invalid time format...");
      return;
    }
    int ExtHandle = FileOpenHistory(FileNameHistory,FILE_BIN|FILE_READ);
    if(ExtHandle<1)
    {
      Comment("File Open FAILED!");
    }
    else
    {
      int i_unused[13];
      FileReadInteger(ExtHandle, LONG_VALUE);
      FileReadString(ExtHandle, 64);
      FileReadString(ExtHandle, 12);
      FileReadInteger(ExtHandle, LONG_VALUE);
      FileReadInteger(ExtHandle, LONG_VALUE);
      FileReadInteger(ExtHandle, LONG_VALUE);       //timesign
      FileReadInteger(ExtHandle, LONG_VALUE);       //last_sync
      FileReadArray(ExtHandle, i_unused, 0, 13);    
      double HSTValues[][6];
      ArrayResize(HSTValues,NumberOfRows);
      int aSize = ArraySize(HSTValues)/6;
      int i = 0;
      while(!IsStopped())
      {
        if(FileIsEnding(ExtHandle))      
          break;
        if(i>=aSize)
          break;          
        
        datetime time = FileReadInteger(ExtHandle, LONG_VALUE);
        HSTValues[i,0] = time;
        HSTValues[i,1] = FileReadDouble(ExtHandle, DOUBLE_VALUE);
        HSTValues[i,2] = FileReadDouble(ExtHandle, DOUBLE_VALUE);
        HSTValues[i,3] = FileReadDouble(ExtHandle, DOUBLE_VALUE);
        HSTValues[i,4] = FileReadDouble(ExtHandle, DOUBLE_VALUE);
        HSTValues[i,5] = FileReadDouble(ExtHandle, DOUBLE_VALUE);                
        if(time<tStart) continue;    
        Sleep(1);                    
        Comment("Reading ",i," ...");
        i++;
      }
      NumberOfRows = i;
      FileClose(ExtHandle);
      ExtHandle = FileOpen(FileNameCSV,FILE_CSV|FILE_WRITE,',');
      if(ExtHandle<1)
      {
        Comment("File Open FAILED!");
      }
      else 
      {
        FileWrite(ExtHandle,"TIME","OPEN","HIGH","LOW","CLOSE","VOLUME");
        for(i=0; i<NumberOfRows; i++)
        {      
          Sleep(1);
          Comment("Writing ",i," of ",NumberOfRows," ...");
          FileWrite(ExtHandle,TimeToStr(HSTValues[i,0],TIME_DATE|TIME_SECONDS),HSTValues[i,1],HSTValues[i,3],HSTValues[i,2],HSTValues[i,4],HSTValues[i,5]);
          if(IsStopped())
            break;
        }
        FileClose(ExtHandle);
        Comment("Finished.");
      }
    }
    return(0);
  }
//+------------------------------------------------------------------+