//+------------------------------------------------------------------+
//|                                        Trader101 TradeBasket.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 15
#property indicator_buffers 1
#property indicator_color1 Red

extern string Remark4 = "== Global Settings ==";
extern int BarsBack = 10;
extern color Color = Red;
extern string Remark5 = "";
extern string Remark1 = "== Buy Direction Pairs ==";
extern string Buy1 = "GBPUSD";
extern bool ShowRank1 = False;
extern string Buy2 = "EURGBP";
extern bool ShowRank2 = False;
extern string Buy3 = "GBPCHF";
extern bool ShowRank3 = False;
extern string Buy4 = "CHFJPY";
extern bool ShowRank4 = False;
extern string Buy5 = "AUDJPY";
extern bool ShowRank5 = False;
extern string Buy6 = "EURJPY";
extern bool ShowRank6 = False;
extern string Buy7 = "USDCHF";
extern bool ShowRank7 = False;

extern string Remark2 = "";
extern string Remark3 = "== Sell Direction Pairs ==";
extern string Sell1 = "CADJPY";
extern bool ShowRank8 = False;
extern string Sell2 = "AUDUSD";
extern bool ShowRank9 = False;
extern string Sell3 = "USDJPY";
extern bool ShowRank10 = False;
extern string Sell4 = "EURUSD";
extern bool ShowRank11 = False;
extern string Sell5 = "EURCHF";
extern bool ShowRank12 = False;
extern string Sell6 = "GBPJPY";
extern bool ShowRank13 = False;
extern string Sell7 = "USDCAD";
extern bool ShowRank14 = False;


//---- buffers
double Rank[];


double StartingArray[13];
string StartingName[13];
double ReferenceArray[13];
string ReferenceName[13];
int RankArray[13];
string PairUsed;
    int RankCount = 0;  
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
  
  if(ShowRank1) RankCount++;
  if(ShowRank2) RankCount++;
  if(ShowRank3) RankCount++;
  if(ShowRank4) RankCount++;
  if(ShowRank5) RankCount++;
  if(ShowRank6) RankCount++;
  if(ShowRank7) RankCount++;
  if(ShowRank8) RankCount++;
  if(ShowRank9) RankCount++;
  if(ShowRank10) RankCount++;
  if(ShowRank11) RankCount++;
  if(ShowRank12) RankCount++;
  if(ShowRank13) RankCount++;
  if(ShowRank14) RankCount++;
  if(RankCount != 1) {Alert("ERROR: Please select one rank to display only");
  return(0);
  }
  Print("Checking Rank Count");
      if(ShowRank1) PairUsed = Buy1;
      if(ShowRank2) PairUsed = Buy2;
      if(ShowRank3) PairUsed = Buy3;
      if(ShowRank4) PairUsed = Buy4;
      if(ShowRank5) PairUsed = Buy5;
      if(ShowRank6) PairUsed = Buy6;
      if(ShowRank7) PairUsed = Buy7;
      if(ShowRank8) PairUsed = Sell1;
      if(ShowRank9) PairUsed = Sell2;
      if(ShowRank10) PairUsed = Sell3;
      if(ShowRank11) PairUsed = Sell4;
      if(ShowRank12) PairUsed = Sell5;
      if(ShowRank13) PairUsed = Sell6;
      if(ShowRank14) PairUsed = Sell7;
  
  
//---- indicators
   SetIndexStyle(0,DRAW_LINE, EMPTY, 5, Color);
   SetIndexBuffer(0,Rank);
   SetIndexLabel(0, PairUsed);
   



//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
//----

i=Bars-counted_bars-1;

while(i>=0) 
{
   StartingArray[0] = BuyProfit(Buy1, i);
   StartingArray[1] = BuyProfit(Buy2, i);
   StartingArray[2] = BuyProfit(Buy3, i);
   StartingArray[3] = BuyProfit(Buy4, i);
   StartingArray[4] = BuyProfit(Buy5, i);
   StartingArray[5] = BuyProfit(Buy6, i);
   StartingArray[6] = BuyProfit(Buy7, i);
   StartingArray[7] = SellProfit(Sell1, i);
   StartingArray[8] = SellProfit(Sell2, i);
   StartingArray[9] = SellProfit(Sell3, i);
   StartingArray[10] = SellProfit(Sell4, i);
   StartingArray[11] = SellProfit(Sell5, i);
   StartingArray[12] = SellProfit(Sell6, i);
   StartingArray[13] = SellProfit(Sell7, i);

   
   StartingName[0] = Buy1;
   StartingName[1] = Buy2;
   StartingName[2] = Buy3;
   StartingName[3] = Buy4;
   StartingName[4] = Buy5;
   StartingName[5] = Buy6;
   StartingName[6] = Buy7;
   StartingName[7] = Sell1;
   StartingName[8] = Sell2;
   StartingName[9] = Sell3;
   StartingName[10] = Sell4;
   StartingName[11] = Sell5;
   StartingName[12] = Sell6;
   StartingName[13] = Sell7;

   ReferenceArray[0] = BuyProfit(Buy1, i);
   ReferenceArray[1] = BuyProfit(Buy2, i);
   ReferenceArray[2] = BuyProfit(Buy3, i);
   ReferenceArray[3] = BuyProfit(Buy4, i);
   ReferenceArray[4] = BuyProfit(Buy5, i);
   ReferenceArray[5] = BuyProfit(Buy6, i);
   ReferenceArray[6] = BuyProfit(Buy7, i);
   ReferenceArray[7] = SellProfit(Sell1, i);
   ReferenceArray[8] = SellProfit(Sell2, i);
   ReferenceArray[9] = SellProfit(Sell3, i);
   ReferenceArray[10] = SellProfit(Sell4, i);
   ReferenceArray[11] = SellProfit(Sell5, i);
   ReferenceArray[12] = SellProfit(Sell6, i);
   ReferenceArray[13] = SellProfit(Sell7, i);

   
   ReferenceName[0] = Buy1;
   ReferenceName[1] = Buy2;
   ReferenceName[2] = Buy3;
   ReferenceName[3] = Buy4;
   ReferenceName[4] = Buy5;
   ReferenceName[5] = Buy6;
   ReferenceName[6] = Buy7;
   ReferenceName[7] = Sell1;
   ReferenceName[8] = Sell2;
   ReferenceName[9] = Sell3;
   ReferenceName[10] = Sell4;
   ReferenceName[11] = Sell5;
   ReferenceName[12] = Sell6;
   ReferenceName[13] = Sell7;

   
   
   bool swapped = true;
   int pos;
   double tempd;
   string temps;
   
   while (swapped)
   {
   swapped = false;
   pos = 0;
   while (pos < 14)
   {
   if (StartingArray[pos] > StartingArray[pos+1]) // flip to > if you want smallest to largest
   {
   tempd = StartingArray[pos];
   StartingArray[pos] = StartingArray[pos+1];
   StartingArray[pos+1] = tempd;
   temps = StartingName[pos];
   StartingName[pos] = StartingName[pos+1];
   StartingName[pos+1] = temps;
   swapped = true;
   }
   pos++;
   }
   }

   
   for(int j = 0; j<14; j++) {
      for(int k = 0; k <14; k++){
         if(StartingName[j] == ReferenceName[k]) RankArray[k] = j + 1;

         }
      }

  
  if(ShowRank1 && RankCount == 1) Rank[i] = RankArray[0];
  if(ShowRank2 && RankCount == 1) Rank[i] = RankArray[1];
  if(ShowRank3 && RankCount == 1) Rank[i] = RankArray[2];
  if(ShowRank4 && RankCount == 1) Rank[i] = RankArray[3];
  if(ShowRank5 && RankCount == 1) Rank[i] = RankArray[4];
  if(ShowRank6 && RankCount == 1) Rank[i] = RankArray[5];
  if(ShowRank7 && RankCount == 1) Rank[i] = RankArray[6];
  if(ShowRank8 && RankCount == 1) Rank[i] = RankArray[7];
  if(ShowRank9 && RankCount == 1) Rank[i] = RankArray[8];
  if(ShowRank10 && RankCount == 1) Rank[i] = RankArray[9];
  if(ShowRank11 && RankCount == 1) Rank[i] = RankArray[10];
  if(ShowRank12 && RankCount == 1) Rank[i] = RankArray[11];
  if(ShowRank13 && RankCount == 1) Rank[i] = RankArray[12];
  if(ShowRank14 && RankCount == 1) Rank[i] = RankArray[13];

  


  
  i--;
   }
   
   Comment(ReferenceArray[0], "\n",
   ReferenceArray[1],"\n",
   ReferenceArray[2],"\n",
   ReferenceArray[3],"\n",
   ReferenceArray[4],"\n",
   ReferenceArray[5],"\n",
   ReferenceArray[6],"\n",
   ReferenceArray[7],"\n",
   ReferenceArray[8],"\n",
   ReferenceArray[9],"\n",
   ReferenceArray[10],"\n",
   ReferenceArray[11],"\n",
   ReferenceArray[12],"\n",
   ReferenceArray[13]);

//----
   return(0);
  }
//+------------------------------------------------------------------+


double BuyProfit(string Symbols, int Shift) {
   
   double ProfitsBuy = (iClose(Symbols, 0, Shift) - iClose(Symbols, 0, BarsBack)) / MarketInfo(Symbols, MODE_POINT);
   
   return(ProfitsBuy);
   }

double SellProfit(string Symbols, int Shift) {
   
   double ProfitsSell = (iClose(Symbols, 0, BarsBack) - iClose(Symbols, 0, Shift)) / MarketInfo(Symbols, MODE_POINT);
   
   return(ProfitsSell);
   }