//+------------------------------------------------------------------+ //| _s_HistoryGen.mq4 | //| Copyright © 2005, Doji Starr | //| Based on Period_converter script by metaquotes | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property show_inputs #include int start() { if (Period() != 1) { MessageBox("This script is to be applied to M1 charts only.", "_s_HistoryGen", MB_OK); return (-1); } int ExtHandle, period; int periodArray[9] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200}; int i, start_pos, i_time, time0, last_fpos, periodseconds; double d_open, d_low, d_high, d_close, d_volume, last_volume; int hwnd ,cnt; //---- History header int version=400; string c_copyright = "(C)opyright 2003, MetaQuotes Software Corp."; string c_symbol=Symbol(); int i_period; int i_digits=Digits; int i_unused[13]; for (period=1; period<=8; period++) { ExtHandle=-1; hwnd = 0; cnt = 0; version = 400; i_period = Period()*periodArray[period]; ExtHandle = FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE); if (ExtHandle < 0) return(-1); //---- write history file header FileWriteInteger(ExtHandle, 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); //timesign FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync FileWriteArray(ExtHandle, i_unused, 0, 13); //---- write history file periodseconds=i_period*60; start_pos=Bars-1; d_open=Open[start_pos]; d_low=Low[start_pos]; d_high=High[start_pos]; d_volume=Volume[start_pos]; //---- normalize open time i_time=Time[start_pos]/periodseconds; i_time*=periodseconds; for(i=start_pos-1;i>=0; i--) { // Print(i); time0=Time[i]; if(time0>=i_time+periodseconds || i==0) { if(i==0 && time0d_high) d_high=High[0]; d_close=Close[0]; } last_fpos=FileTell(ExtHandle); last_volume=Volume[i]; FileWriteInteger(ExtHandle, i_time, LONG_VALUE); FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE); FileFlush(ExtHandle); cnt++; if(time0>=i_time+periodseconds) { i_time=time0/periodseconds; i_time*=periodseconds; d_open=Open[i]; d_low=Low[i]; d_high=High[i]; d_close=Close[i]; d_volume=last_volume; } } else { d_volume+=Volume[i]; if (Low[i]d_high) d_high=High[i]; d_close=Close[i]; } } FileFlush(ExtHandle); FileClose(ExtHandle); Print("Period_", periodArray[period], ": ", cnt, " record(s) written"); } return(0); }