//+------------------------------------------------------------------+
//|                                                    HackedInd.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
//--- input parameters
extern int        MagicNumber = 133714;

extern string     fontName = "Arial";
extern int        fontSize = 8;
extern int        posX     = 800;
extern int        posY     = 20;
extern int        maxWaves = 9;

static string iName = "HackedInd";
static int OrdersInHistory = 0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   ObjectCreate(iName+1,OBJ_LABEL,0,0,0);
   ObjectSet(iName+1,OBJPROP_XDISTANCE,posX);
   ObjectSet(iName+1,OBJPROP_YDISTANCE,posY);
   ObjectCreate(iName+2,OBJ_LABEL,0,0,0);
   ObjectSet(iName+2,OBJPROP_XDISTANCE,posX);
   ObjectSet(iName+2,OBJPROP_YDISTANCE,posY+fontSize*2);
   ObjectCreate(iName+3,OBJ_LABEL,0,0,0);
   ObjectSet(iName+3,OBJPROP_XDISTANCE,posX);
   ObjectSet(iName+3,OBJPROP_YDISTANCE,posY + fontSize*4);

   for(int i=1;i<=maxWaves;i++){
      ObjectCreate(iName+"W"+i,OBJ_LABEL,0,0,0);
      ObjectSet(iName+"W"+i,OBJPROP_XDISTANCE,posX);
      ObjectSet(iName+"W"+i,OBJPROP_YDISTANCE,posY + fontSize*6+fontSize*i*2);
   }

   OrdersInHistory=0;


//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

   ObjectDelete(iName+1);
   ObjectDelete(iName+2);
   ObjectDelete(iName+3);
   for(int i=1;i<=maxWaves;i++){
      ObjectDelete(iName+"W"+i);
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      
      int nMax=OrdersHistoryTotal();
      
      if (OrdersInHistory == nMax)
            return (0);
      
      int nMaxMagic=0;
      int nWaves=0;

      datetime waveTime[10000];
      int waveCount[10000];
      double waveProfit[10000];
      double waveSwap[10000];

      for(int i=0;i<1000;i++){
         waveTime[i]=0;
         waveCount[i]=0;
         waveProfit[i]=0;
         waveSwap[i]=0;
      }

      for (i=0;i<nMax;i++){
            OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
            if(OrderMagicNumber()==MagicNumber){
                  nMaxMagic++;
                  int inWave=-1;
                  for(int j=0;j<nWaves;j++)
                     if(OrderCloseTime()==waveTime[j])
                           inWave=j;
                  if (inWave==-1){ // new Wave
                     waveTime[nWaves]=OrderCloseTime();
                     waveCount[nWaves]=1;
                     waveProfit[nWaves]=OrderProfit();
                     waveSwap[nWaves]=OrderSwap();
                     nWaves++;
                  } else { // exising Wave
                     waveCount[inWave]+=1;
                     waveProfit[inWave]+=OrderProfit();
                     waveSwap[inWave]+=OrderSwap();
                  }
            }
      }
   
      ObjectSetText(iName+1,"Total History Orders: "+nMax,fontSize,fontName,White);
      ObjectSetText(iName+2,"Magic History Orders: "+nMaxMagic,fontSize,fontName,White);
      ObjectSetText(iName+3,"Total Waves: "+nWaves,fontSize,fontName,White);

      for(i=1;i<=maxWaves;i++){
         int wNumber=0;
         double wProfit=0;
         double wSwap=0;
         
         for(j=0;j<nWaves;j++)
            if(waveCount[j]==i){
                  wNumber++;
                  wProfit+=waveProfit[j];
                  wSwap+=waveSwap[j];
            }
               
         ObjectSetText(iName+"W"+i,"wave " +i+ " :   " + wNumber + "      " + DoubleToStr(wProfit,2) + "  " + DoubleToStr(wSwap,2) ,fontSize,fontName,White);
      }

      
//----
   return(0);
  }
//+------------------------------------------------------------------+