//+------------------------------------------------------------------+
//|                                            FXPT_CSV3_Modified.mq4 |
//|                                         Developed by fxprotrader |
//|                                     http://www.fxpro-trader.com" |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, fxprotrader"
#property link      "http://www.fxpro-trader.com"
//-------- HISTORY----------------
// v1.0 Initial release(112410)
//--------------------------------
//----
int handle;
int maxBars = 2000;
string dSymbol;
// string Currencies[] = {"AUDUSD","EURUSD","GBPJPY","GBPUSD","EURJPY","EURGBP","USDCHF","USDJPY","AUDJPY","CHFJPY","CADJPY","GBPCAD","EURAUD","USDCAD","EURCAD","NZDUSD","NZDJPY"};
string Currencies[] = {"EURUSD","GBPUSD"};

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start(){
int count = ArraySize(Currencies);
for (int ii=0; ii<count; ii++){
dSymbol = Currencies[ii];   
handle = FileOpen("Hist_"+dSymbol+"_"+GetPeriodName()+".txt", FILE_BIN|FILE_WRITE);

if(handle < 1){
Print("Err ", GetLastError());
return(0);
}
WriteTABLEHeader();
for(int i = 0; i < maxBars - 1; i++){
       WriteRow(i);
//        if(Period() < PERIOD_H1 && TimeDay(Time[i]) != TimeDay(Time[i+1]) && i != maxBars - 1){
// }
}
   FileClose(handle);
}
  Alert("Done."+TimeMonth(TimeLocal())+TimeDay(TimeLocal())+TimeYear(TimeLocal()) +"_"+TimeHour(TimeLocal())+TimeMinute(TimeLocal()));

  return(0);

}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void WriteString(string txt){
   FileWriteString(handle, txt,StringLen(txt));
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void WriteTABLEHeader(){
    WriteString("Date|");
    WriteString("Time|");
    WriteString("DayOfWeek|");
   // if(Period()<PERIOD_H1)
//        WriteString("Time|");
   WriteString("Open|");
   WriteString("High|");
   WriteString("Low|");
   WriteString("Close|");
//    WriteString("Volume|");
//    WriteString("Chng Vol %|");
//    WriteString("(H+L+C)/3|");
//    WriteString("(H-L)|");
//    WriteString("(C-O)|");
   WriteString("QQE|");
   WriteString("PPO|");
   WriteString("BHErgodic|");
   WriteString("RSI|");

   WriteString("\n");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void WriteRow(int i){
 
double  dSymTime, dSymOpen, dSymHigh, dSymLow, dSymClose, dSymVolume, dSymVolumeP1, dSymVolumeP100,dSymClosePrev;
double  dSymHigh_D1,dGap;
int dDayofWk,iDigits;
// double  bandVal,bandUpp,bandLow,ema_fast,ema_slow,MACurrent,iMacdMain,iFXergcurr,iFXergsig;
string bandDistance;
double dClose, dOpen,Poin,dblPoints;
 
dSymTime = (iTime(dSymbol,Period(),i));
dDayofWk = (TimeDayOfWeek(dSymTime));

WriteString(TimeToStr(dSymTime, TIME_DATE ));
WriteString("|");
if(Period() < PERIOD_H4){
 WriteString(TimeToStr(Time[i], TIME_MINUTES)+"|"+dDayofWk+"|");
}
iDigits=MarketInfo(Symbol(),MODE_DIGITS);

dSymOpen = (iOpen(dSymbol,Period(),i));
dSymHigh = (iHigh(dSymbol,Period(),i));
dSymHigh_D1 = (iHigh(dSymbol,Period(),i));
dSymLow = (iLow(dSymbol,Period(),i));
dSymClose = (iClose(dSymbol,Period(),i));
dSymVolume = (iVolume(dSymbol,Period(),i));
dSymVolumeP1 = (iVolume(dSymbol,Period(),i+1));
dSymVolumeP100 = (iVolume(dSymbol,Period(),i*100));
dSymClosePrev = (iClose(dSymbol,Period(),i-1));

WriteString(DoubleToStr(dSymOpen, iDigits)+"|");
WriteString(DoubleToStr(dSymHigh, iDigits)+"|");
WriteString(DoubleToStr(dSymLow, iDigits)+"|");
WriteString(DoubleToStr(dSymClose, iDigits)+"|");
WriteString(DoubleToStr(dSymClosePrev, iDigits)+"|");

///get some stats
// bandVal =iCustom(NULL,0,"Bands",35,1,2,PRICE_CLOSE,MODE_MAIN,i); 

double QQEc = iCustom(dSymbol,0,"QQE",24,0,i);
double PPOc = iCustom(dSymbol,0,"PPO",14,50,1,0,i);
int FXBDiff=1,FXpr=5,FXps=15,FXpu=5,FXtrg=3,FXpt=2;
double iFXergcurr=iCustom(NULL,0,"BH-Ergodic",FXBDiff,FXpr,FXps,FXpu,FXtrg,FXpt,0,i);
double RSI21   = iRSI(NULL,0,21,2,i); 


// WriteString(DoubleToStr(bandVal, Digits)+"|qqe:");
WriteString(DoubleToStr(QQEc, iDigits)+"|");
WriteString(DoubleToStr(PPOc, iDigits)+"|");
WriteString(DoubleToStr(iFXergcurr, iDigits)+"|");
WriteString(DoubleToStr(RSI21, iDigits)+"|");
WriteString("\n");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetPeriodName()
  {
   switch(Period())
     {
       case PERIOD_D1:  return("Day");
       case PERIOD_H4:  return("4_Hour");
       case PERIOD_H1:  return("Hour");
       case PERIOD_M1:  return("Minute");
       case PERIOD_M15: return("15_Minute");
       case PERIOD_M30: return("30_Minute");
       case PERIOD_M5:  return("5_Minute");
       case PERIOD_MN1: return("Month");
       case PERIOD_W1:  return("Week");
     }
  }