string InName = "Data\\DAT_ASCII_EURUSD_M1_2013.csv"; // name of the CSV file
string OutName = "History\\EURUSD_2013x.bar";
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
API(SystemTimeToVariantTime,oleaut32)
int _stdcall SystemTimeToVariantTime(SYSTEMTIME* lpSystemTime, double* pvtime);
DATE ConvertTime(int Year,int Month,int Day,int Hour,int Minute,int Second)
{
SYSTEMTIME Time;
memset(&Time,0,sizeof(SYSTEMTIME));
if(Year < 50) Year += 2000;
else if(Year < 100) year += 1900;
Time.wYear = Year;
Time.wMonth = Month;
Time.wDay = Day;
Time.wHour = Hour;
Time.wMinute = Minute;
Time.wSecond = Second;
DATE vTime;
SystemTimeToVariantTime(&Time,&vTime);
return vTime;
}
string readTick(string content,TICK* tick)
{
// tokenize a single line
char* line = strtok(content,"\n");
if(!line) return 0;
// read "20100103 170000;1.430100;1.430400;1.430100;1.430400;0"
int Year, Month, Day, Hour, Minute, Second;
if(10 != sscanf(line,"%4d%2d%2d %2d%2d%2d;%f;%f;%f;%f;",
&Year, &Month, &Day, &Hour, &Minute, &Second,
&tick->fOpen, &tick->fHigh, &tick->fLow, &tick->fClose))
return 0;
// store the time in DATE format
tick->time = ConvertTime(Year,Month,Day,Hour,Minute,Second);
// return pointer to next line
return line+strlen(line)+1;
}
function main()
{
if(!file_length(InName))
quit("Data file not found!");
// allocate TICK array
int maxticks = 60*24*365;
TICK* ticks = malloc(maxticks*sizeof(TICK)),
tick = ticks+maxticks;
// read ticks in reverse order
string content = file_content(InName);
while(content)
content = readTick(content,--tick);
// store the ticks
int size = (int)(ticks+maxticks)-(int)(tick+1);
file_write(OutName,tick+1,size);
free(ticks);
printf("\nRead %d ticks",size/sizeof(TICK));
}