//+------------------------------------------------------------------+
//|                                  smGenerate_TF_Charts EA.mq4
//+------------------------------------------------------------------+
#property copyright "Copyright 14.06.2016, SwingMan"
#property strict

#include <stdlib.mqh>
#include <stderror.mqh> 

//----------------------------------------------
input bool All_TimeFrames=false;
extern bool time_M1=false;
extern bool time_M5=false;
extern bool time_M15=true;
extern bool time_M30=false;
extern bool time_H1=true;
extern bool time_H4=false;
extern bool time_D1=true;
extern bool time_W1=false;
extern bool time_MN1=false;
//----------------------------------------------

#define sep ","
ushort  u_sep=StringGetCharacter(sep,0);

string Pairs="AUDCAD,AUDCHF,AUDJPY,AUDNZD,AUDUSD,CADCHF,CADJPY,CHFJPY,EURAUD,EURCAD,EURCHF,EURGBP,EURJPY,EURNZD,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDCAD,NZDCHF,NZDJPY,NZDUSD,USDCAD,USDCHF,USDJPY";

//---- buffers
string TradePair[28];
long idPairChart[28];

//---- variables
long chart_id;
int symb_cnt;

color bcolor=clrRoyalBlue;
color fcolor=clrWhite;


int objState;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//-- symbols and currencies  
   symb_cnt=StringSplit(Pairs,u_sep,TradePair);

   int xsize=90;
   int ysize=50;

   int xdist=20;
   int ydist=30;
   int yStep=25;

   Draw_Buttons("PairButton_START","START",xsize,ysize,xdist,ydist); ydist=ydist+yStep;

   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   //Comment("");
   //ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Draw_Buttons(string but_name,string label,int xsize,int ysize,int xdist,int ydist)
  {
   if(ObjectFind(0,but_name)<0)
     {
      if(!ObjectCreate(0,but_name,OBJ_BUTTON,0,0,0))
        {
         Print(__FUNCTION__,
               ": failed to create the button! Error code = ",GetLastError());
         return;
        }
      ObjectSetString(0,but_name,OBJPROP_TEXT,label);
      ObjectSetInteger(0,but_name,OBJPROP_XSIZE,xsize);
      ObjectSetInteger(0,but_name,OBJPROP_YSIZE,ysize);
      ObjectSetInteger(0,but_name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,but_name,OBJPROP_XDISTANCE,xdist);
      ObjectSetInteger(0,but_name,OBJPROP_YDISTANCE,ydist);
      ObjectSetInteger(0,but_name,OBJPROP_BGCOLOR,bcolor);
      ObjectSetInteger(0,but_name,OBJPROP_COLOR,fcolor);
      ObjectSetInteger(0,but_name,OBJPROP_FONTSIZE,9);
      ObjectSetInteger(0,but_name,OBJPROP_HIDDEN,true);
      ObjectSetInteger(0,but_name,OBJPROP_BORDER_TYPE,BORDER_RAISED);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id!=CHARTEVENT_OBJECT_CLICK) return;
   string sChar="_";
   long idChart;
   int loopNumber=3;

//             ************************************
//             *     Draw all charts
//             ************************************   
   string pairName;
   
   loopNumber=symb_cnt;
   
   if(StringFind(sparam,"START",0)>=0)
     {
      for(int i=0;i<loopNumber;i++)
        {
         pairName=TradePair[i];
         idChart=ChartOpen(pairName,PERIOD_M1);
         idPairChart[i]=idChart;
         ChartRedraw(idChart);
        }
     }

//             ************************************
//             *     Set TimeFrames for all Charts
//             ************************************
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;

   while(i<limit) // We have certainly not more than 100 open charts 
     {
      currChart=ChartNext(prevChart);  // Get the new chart ID by using the previous chart ID 
      if(currChart<0) break;           // Have reached the end of the chart list 

      string symbolPrevChart=ChartSymbol(prevChart);
      string symbolCurrChart=ChartSymbol(currChart);

      int timeSleep=100;

      if(All_TimeFrames || time_M1) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_M1);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_M5) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_M5);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_M15) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_M15);  Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_M30) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_M30);  Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_H1) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_H1);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_H4) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_H4);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_D1) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_D1);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_W1) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_W1);    Sleep(timeSleep); ChartRedraw(currChart);
      if(All_TimeFrames || time_MN1) ChartSetSymbolPeriod(currChart,symbolCurrChart,PERIOD_MN1);  Sleep(timeSleep); ChartRedraw(currChart);

      prevChart=currChart; // let's save the current chart ID for the ChartNext() 
      i++;                 // Do not forget to increase the counter 
     }
     
//             ************************************
//             *     Close the Charts
//             ************************************     
      for(i=0;i<loopNumber;i++)
        {
         idChart=idPairChart[i];
         ChartClose(idChart);
        }     
  }
//+------------------------------------------------------------------+
