//+------------------------------------------------------------------+
//| Version 1.0, Written by Aiman                                    |
//| - Special Thank you to TeMPe for his sort decending sample code  |
//| Version 1.1 (09.09.29) Edited by Aiman                           |
//| - Price open & close has been removed                            |
//| - Cannot put 2 same date at setting -  FIXED                     |
//| - 3 Horizontal lines added                                       |
//| - Total Spread value in PIPS & USD added                         |
//| - Option to select simulation 28 pairs or 14 pairs               |
//| Version 1.2 (09.09.29) Edited by Aiman                           |
//| - Selection set for 14 pairs simulation has been amended         |
//| Version 1.3 (06.10.30) Edited by Aiman                           |
//| - Percent changed & average percent changed added                |
//| - (-) sign removed, red represent negative value                 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, 1000 pips club."
#property link      "www.oasiswealthbuilders.com"

#property indicator_chart_window

extern string type_of_trade  ="==1=buy, 2=sell==";
extern int    tradetype      =1;
extern string SimulateType   ="==1=28 Pairs, 2=14 Pairs==";
extern int    Simulation     =1;
extern string CandlePeriod   ="==5, 15, 30, 60, 240, 1440==";
extern string note    ="use bigger period for weekly analysis";
extern int    period         =5;
extern string AutoTimer      ="==0=Manual,1=W1,2=D1,3=H4,4=H1,5=M30==";
extern int    TimerSetting   =0;
extern string timer1         ="2009.9.28 0:00";
extern string timer2         ="2009.9.28 4:00";
extern string timer3         ="2009.9.28 8:00";
extern string timer4         ="2009.9.28 12:00";
extern string timer5         ="2009.9.28 12:00";

extern string currency1          = "JPY";
extern string currency2          = "n/a";
       double Lots           =0.1;

string   iPairs[28] ={"EURUSD", "GBPUSD", "AUDUSD", "USDJPY", "USDCHF", "USDCAD", "EURAUD",
                      "EURCAD", "EURCHF", "EURGBP", "EURJPY", "GBPJPY", "GBPCHF", "NZDUSD",
                      "AUDCAD", "AUDJPY", "CHFJPY", "AUDNZD", "NZDJPY", "NZDCAD", "NZDCHF",
                      "GBPNZD", "EURNZD", "GBPCAD", "GBPAUD", "AUDCHF", "CADCHF", "CADJPY"};        
                      
string   tPairs[14] ={"USDCHF", "EURGBP", "GBPUSD", "NZDUSD", "EURJPY", "AUDJPY", "GBPJPY",              
                      "AUDUSD", "NZDJPY", "CHFJPY", "USDJPY", "EURUSD", "EURCHF", "GBPCHF"};                                 
            
string suffix, time;            
int xdist, Shift, ydist, lineypos;

string symbol[28];
double openbuy[28];
double closebuy[28];
double opensell[28];
double closesell[28];
int    pipsbuy[28];
int    pipssell[28];
double profitbuy[28];
double profitsell[28];
double spread[28];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {ObjectsDeleteAll(); Comment(""); return(0);}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {ObjectsDeleteAll(); Comment(""); return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    if (Simulation==2)
    {
     ArrayResize (iPairs, 14);
     for (int i=0; i<14;i++)
     {
      iPairs[i] = tPairs[i];
     }
    }
    
    int timerperiod;
    if (TimerSetting==1) timerperiod=10080;
    if (TimerSetting==2) timerperiod=1440;
    if (TimerSetting==3) timerperiod=240;
    if (TimerSetting==4) timerperiod=60;
    if (TimerSetting==5) timerperiod=30;
    if (timerperiod!=0)
    {
     timer1=TimeToStr(iTime(Symbol(), timerperiod, 4));
     timer2=TimeToStr(iTime(Symbol(), timerperiod, 3));
     timer3=TimeToStr(iTime(Symbol(), timerperiod, 2));
     timer4=TimeToStr(iTime(Symbol(), timerperiod, 1));
     timer5=TimeToStr(iTime(Symbol(), timerperiod, 0));
    }
  
    string trademode;
    suffix=StringSubstr(Symbol(),6,1);
    RefreshRates();
 
    int column=10;
    int nextcolumn=200;
    display_IA(StrToTime(timer1), column);  
    column = column+nextcolumn;      
    display_IA(StrToTime(timer2), column);
    column = column+nextcolumn;
    display_IA(StrToTime(timer3), column);    
    column = column+nextcolumn;
    display_IA(StrToTime(timer4), column); 
    column = column+nextcolumn;
    display_IA(StrToTime(timer5), column);     
     
 
    if (tradetype==1) trademode=" - Buy all pairs IA_v2";
    if (tradetype==2) trademode=" - Sell all pairs IA_v2";
    time=StringConcatenate("Current Broker Time= ", 
                           TimeToStr(TimeCurrent(), 
                           TIME_DATE)," (", TimeToStr(TimeCurrent(), 
                           TIME_MINUTES), ")", trademode);
                           
    drawLabel("CurrentTime", time, 13, "Arial", Yellow, 0, 10, 10); 
    drawLabel("Copyright", "1000pips Club © www.oasiswealthbuilders.com", 8, "Arial Bold", Yellow, 1, 10, 10); 

    return (0);
  }
//+------------------------------------------------------------------+   
void display_IA (datetime timer, int xdistt)
{
 double open, close, profit, totalprofit, spreadpips, spreadcurr;
 int pips, totalpips;
 string textnames, textname, texttitle, Sym;
 textnames="IA";
 datetime date, temdate;
 color PipsColor, SymColor;
 
 ydist=60;
 int ystatusdist=ydist-14;
   
 totalprofit=0;
 spreadpips=0;
 spreadcurr=0;
 totalpips=0;
 for(int i=0; i<ArraySize(iPairs); i++)
 {
  Sym          =StringConcatenate(iPairs[i],suffix);
  spread[i]    =MarketInfo(Sym, MODE_SPREAD);
  Shift        =iBarShift(Sym, period, timer);
  symbol[i]    =Sym;
  openbuy[i]   =iOpen(Sym, period, Shift)+(spread[i]*MarketInfo(Sym, MODE_POINT));
  closebuy[i]  =MarketInfo(Sym, MODE_BID);
  opensell[i]  =iOpen(Sym, period, Shift);
  closesell[i] =MarketInfo(Sym, MODE_ASK);
  pipsbuy[i]   =(closebuy[i]-openbuy[i])/MarketInfo(Sym, MODE_POINT);
  pipssell[i]  =(opensell[i]-closesell[i])/MarketInfo(Sym, MODE_POINT);
  profitbuy[i] =pipsbuy[i]*MarketInfo(Sym, MODE_TICKVALUE)*Lots;
  profitsell[i]=pipssell[i]*MarketInfo(Sym, MODE_TICKVALUE)*Lots;
  if (tradetype==1)  
  {
   totalprofit=totalprofit+profitbuy[i];
   totalpips  =totalpips+ pipsbuy[i];
  }
  if (tradetype==2)
  {
   totalprofit=totalprofit+profitsell[i];  
   totalpips  =totalpips+ pipssell[i];
  }
  spreadpips=spreadpips+spread[i];
  spreadcurr=spreadcurr+(spreadpips*MarketInfo(Sym, MODE_TICKVALUE)*Lots);
  
 }
 string strTemp;
 double dblTemp;
 
 for(i=0;i<ArraySize(iPairs);i++)
 {
  for(int j=i;j<ArraySize(iPairs);j++)
  {
   if((tradetype==1 && profitbuy[j]<profitbuy[i]) || (tradetype==2 && profitsell[j]<profitsell[i]))
   {
    strTemp=symbol[i];
    symbol[i]=symbol[j];
    symbol[j]=strTemp;

    dblTemp=openbuy[i];
    openbuy[i]=openbuy[j];
    openbuy[j]=dblTemp;               

    dblTemp=closebuy[i];
    closebuy[i]=closebuy[j];
    closebuy[j]=dblTemp;               

    dblTemp=opensell[i];
    opensell[i]=opensell[j];
    opensell[j]=dblTemp;               

    dblTemp=closesell[i];
    closesell[i]=closesell[j];
    closesell[j]=dblTemp;          

    dblTemp=pipsbuy[i];
    pipsbuy[i]=pipsbuy[j];
    pipsbuy[j]=dblTemp;               

    dblTemp=pipssell[i];
    pipssell[i]=pipssell[j];
    pipssell[j]=dblTemp;               

    dblTemp=profitbuy[i];
    profitbuy[i]=profitbuy[j];
    profitbuy[j]=dblTemp;               

    dblTemp=profitsell[i];
    profitsell[i]=profitsell[j];
    profitsell[j]=dblTemp;      
    
    dblTemp=spread[i];
    spread[i]=spread[j];
    spread[j]=dblTemp;         
    
  
   
   }
  }
 } 
 date=0;
 for(i=0;i<ArraySize(iPairs);i++)
 {
  Sym       =StringConcatenate(iPairs[i],suffix);
  temdate   =iTime(Sym, period, Shift);
  if(temdate>date) date=temdate;
 }
 xdist     =xdistt;
 time=StringConcatenate(TimeToStr(date, TIME_DATE), " (", TimeToStr(date,TIME_MINUTES), ")" ) ;
 textname=StringConcatenate(textnames, "Date", DoubleToStr(xdistt, 0));
 drawLabel(textname, time, 9, "Arial", Ivory, 0, xdist, ystatusdist-12);  

 textname=StringConcatenate(textnames, "Title", DoubleToStr(xdistt, 0) );
 drawLabel(textname, "Symbol      Spr   Pips    Profit       ", 9, "Arial", Yellow, 0, xdist, ystatusdist);   

 for(i=0; i<ArraySize(iPairs); i++)
 {
  if (tradetype==1)
  {
   open=openbuy[i];
   close=closebuy[i];
   pips=pipsbuy[i];
   profit=profitbuy[i];
  }
  if (tradetype==2)
  {
   open=opensell[i];
   close=closesell[i];
   pips=pipssell[i];
   profit=profitsell[i];
  }

  Sym       =StringConcatenate(symbol[i],suffix);
  int digit =MarketInfo(Sym, MODE_DIGITS); 
  xdist     =xdistt;
  SymColor  =White;
  
 
  if (StringSubstr(symbol[i],0,6)=="GBPJPY" || StringSubstr(symbol[i],0,6)=="EURJPY" || StringSubstr(symbol[i],0,6)=="GBPUSD" )
     SymColor=LightSalmon;
     
       //====================================
    
      if (StringFind(symbol[i],currency1,0)!=-1) SymColor=Olive;
      if (StringFind(symbol[i],currency2,0)!=-1) SymColor=SteelBlue;
     
 
 //==================================

  textname  =StringConcatenate(textnames, symbol[i], DoubleToStr(xdistt, 0) );
  drawLabel(textname, symbol[i], 10, "Courier New", SymColor, 0, xdist, ydist);   
  
  xdist=xdist+60;   
  textname=StringConcatenate(textnames, symbol[i], "Spread", DoubleToStr(xdistt, 0) );
  drawLabel(textname, DoubleToStr(spread[i],0), 9, "Courier New", Gray, 0, xdist, ydist);  
  
  xdist=xdist+25;   
  textname=StringConcatenate(textnames, symbol[i], "Pips", DoubleToStr(xdistt, 0) );
  drawLabel(textname, DoubleToStr(MathAbs(pips),0), 9, "Courier New", statcolor (pips), 0, xdist, ydist);      
   
  xdist=xdist+37;   
  textname=StringConcatenate(textnames, symbol[i], "Profit", DoubleToStr(xdistt, 0) );
  drawLabel(textname, DoubleToStr(MathAbs(profit),2), 9, "Courier New", statcolor (profit), 0, xdist, ydist);  
  
 xdist=xdist+50;   
  ydist=ydist+12; 
 }

 textname=StringConcatenate(textnames, symbol[i], "totalProfit", DoubleToStr(xdistt, 0) );
 drawLabel(textname, DoubleToStr(MathAbs(totalprofit),2), 9, "Courier New", statcolor (totalprofit), 0, xdist-50, ydist);
 
 textname=StringConcatenate(textnames, symbol[i], "totalpips", DoubleToStr(xdistt, 0) );
 drawLabel(textname, DoubleToStr(MathAbs(totalpips),0), 9, "Courier New", statcolor (totalpips), 0, xdist-88, ydist);
 
 string Spreadtxt=StringConcatenate("Total Spread = ", DoubleToStr(spreadpips,0), " (", DoubleToStr(spreadcurr,2), ")" );
 textname=StringConcatenate(textnames, symbol[i], "spreadtotal");
 drawLabel(textname, Spreadtxt, 10, "Courier New", Yellow, 0, 10, ydist+25); 
 
 if (Simulation==1) lineypos=ydist-(15*12+1); else lineypos=ydist-(8*12+1);
 textname=StringConcatenate(textnames, "Line1", DoubleToStr(xdistt, 0) );
 drawLabel(textname, "_______________________", 9, "Courier New", Silver, 0, xdistt, lineypos);   
 
 lineypos=lineypos+12*2;
 textname=StringConcatenate(textnames, "Line2", DoubleToStr(xdistt, 0) );
 drawLabel(textname, "_______________________", 9, "Courier New", Gray, 0, xdistt, lineypos);
 lineypos=lineypos-12*4;
 textname=StringConcatenate(textnames, "Line3", DoubleToStr(xdistt, 0) );
 drawLabel(textname, "_______________________", 9, "Courier New", Gray, 0, xdistt, lineypos);
}
//+------------------------------------------------------------------+ 
color statcolor (double total)
{
 color pipscolor=Olive;
 if (total>0) pipscolor=LimeGreen;
 if (total<0) pipscolor=Tomato;
 return (pipscolor);
}
//+------------------------------------------------------------------+   
void drawLabel (string Ln, string Lt, int tz, string ts, color Lc, int cr, int xp, int yp)
{
 ObjectCreate(Ln, OBJ_LABEL, 0, 0, 0);
  ObjectSetText(Ln, Lt,tz, ts, Lc);
  ObjectSet(Ln, OBJPROP_CORNER, cr);
  ObjectSet(Ln, OBJPROP_XDISTANCE, xp);
  ObjectSet(Ln, OBJPROP_YDISTANCE, yp);  
}

