
#property strict
#property indicator_chart_window

string sTrades[1][2];
int iTrades=0;

         string   curr[]={"AUD","EUR","CAD","CHF","GBP","JPY","NZD","USD"};
         string   pairs[],
                  pair,
                  suffix;
         int      totPairs;
   string cmt2="";
   string cmt;
   int pair_idx=0;
//--- indicator settings
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
      Comment("");
      totPairs=0;
      suffix=StringSubstr(Symbol(),6,StringLen(Symbol())-6);
      for(int c=0;c<ArraySize(curr);c++)
      {
         for(int p=0;p<ArraySize(curr);p++)
         {
            ArrayResize(pairs,totPairs+1);
            pair=curr[c]+curr[p]+suffix;
            if(iClose(pair,0,0)!=0)
            {
               pairs[totPairs]=pair;
               totPairs++;
            }
         }
      }
   return(INIT_SUCCEEDED);
  }
void deinit()
{
   Comment("");
   return;
}  
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   calc_trades();
   return(rates_total);
  }
//+------------------------------------------------------------------+
void calc_trades()
{
   cmt="";
   iTrades=0;
   
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))      
      {
         ArrayResize(sTrades,iTrades+1);
         if(OrderType()==OP_BUY)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="BUY "+OrderLots()+" trade_equity "+NormalizeDouble(OrderProfit()+OrderSwap()+OrderCommission(),2);
            //Comment(get_pair_idx(OrderSymbol())+" "+OrderSymbol());
         }else
         if(OrderType()==OP_SELL)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="SELL "+OrderLots()+" trade_equity "+NormalizeDouble(OrderProfit()+OrderSwap()+OrderCommission(),2);
         }else
         if(OrderType()==OP_BUYSTOP)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="BUYSTOP "+OrderLots()+" at "+NormalizeDouble(OrderOpenPrice(),Digits);
         }else
         if(OrderType()==OP_SELLSTOP)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="SELLSTOP "+OrderLots()+" at "+NormalizeDouble(OrderOpenPrice(),Digits);
         }else
         if(OrderType()==OP_BUYLIMIT)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="BUYLIMIT "+OrderLots()+" at "+NormalizeDouble(OrderOpenPrice(),Digits);
         }else
         if(OrderType()==OP_SELLLIMIT)
         {
            sTrades[iTrades][0]=get_pair_idx(OrderSymbol());
            sTrades[iTrades][1]="SELLLIMIT "+OrderLots()+" at "+NormalizeDouble(OrderOpenPrice(),Digits);
         }
         iTrades++;
      }
   }
   for(int i=0;i<ArraySize(pairs);i++)
   {
      for(int t=0;t<ArraySize(sTrades)/2;t++)
      {
         pair_idx=sTrades[t][0];
         if(pairs[pair_idx]==pairs[i])
         {
            if(sTrades[t][0]==i)cmt=cmt+"\n"+pairs[pair_idx]+" "+sTrades[t][1];
         }
      }   
   }
   
   Comment(cmt);
   
   return;
}

int get_pair_idx(string PR)
{
   for(int i=0;i<ArraySize(pairs);i++)
   {
      if(PR==pairs[i])
      {
         return(i);
         break;
      }
   }
   return(0);
}
