//-----------------------------------------------------------------------------
//                                                 Mn HeatMap                 |
//-----------------------------------------------------------------------------

#property copyright "Mn"
#property indicator_separate_window

extern int mDelay = 120;
extern color mTextCol = Black;

int mVertTab = 50, mHorizTab = 50, mSpace = 12;
int mTextSize = 7, mCorner = 0; 

string mPairs[20] = {"EURUSD", "GBPUSD", "AUDUSD", "AUDJPY", "EURJPY", "GBPJPY", "EURGBP",
                     "EURAUD", "EURNZD", "EURCAD", "EURCHF", "USDJPY", "CADJPY", "GBPCHF", 
                     "CADJPY", "USDCAD", "AUDNZD", "AUDCHF", "USDCHF", "AUDCAD"};
color  mCols[20]  = {LightCyan, PaleTurquoise, LightBlue, SkyBlue, Turquoise, DeepSkyBlue, SteelBlue,
                     Blue, MediumBlue, Maroon, Crimson, Red, DeepPink, Orchid, 
                     Violet, Plum, LightPink, Pink, MistyRose, Seashell},
       mPriceCol = Blue;
double   mData[20][3];                     
int mFirstVTab = 10, mFirstHTab = 14, mWind; 
bool mFirstTime = true;

//-----------------------------------------------------------------------------
void init()
 {
   IndicatorShortName("mn HeatMap");
   
 }

//-----------------------------------------------------------------------------
void start() 
 {
   double mVal1;
   static int mTime;
   if(mFirstTime)
     {
       mWind = WindowFind("mn HeatMap");
       CreateObjs();
     }
   if(TimeCurrent() > mTime + mDelay)
     {
      for(int m = 0; m < 20; m++)
        {
          mData[m][0] = (iClose(mPairs[m], 1, 0) - iClose(mPairs[m], 1440, 1)) / iClose(mPairs[m], 1440, 1) * 100;
          mData[m][1] = m;
          mData[m][2] = iClose(mPairs[m], 1, 0);
        }
      ArraySort( mData); 
      for(int i = 0; i < 20; i++)
       {
         ObjectSetText("m.Data"+i, DoubleToStr(mData[i][0], 2) + "%", mTextSize, "Arial", mTextCol);
         int mPair = mData[i][1];
         ObjectSetText("m.Pr"+i, mPairs[mPair], mTextSize - 1, "Arial", mTextCol);
         ObjectSetText("m.Cl"+i, DoubleToStr(mData[i][2], MathMin(4, Digits)), mTextSize, "Arial", CLR_NONE);
       }     // for i
      mTime = TimeCurrent();
     }

   return(0);
 }

//-----------------------------------------------------------------------------
void deinit()
 {
  string mObj;
  for(int i = ObjectsTotal() - 1; i >= 0; i--)
   {
     mObj = ObjectName(i);
     if(StringSubstr(mObj, 0, 2) == "m.")
       ObjectDelete(mObj);
   }
     
   return(0);
 }
//-----------------------------------------------------------------------------
void CreateObjs()
 {
  for(int i = 0; i < 20; i++)
   {
      ObjectCreate("m.Data"+i, OBJ_LABEL, mWind, 0, 0, 0, 0);
      ObjectSet("m.Data"+i, OBJPROP_CORNER, mCorner);
      ObjectSet("m.Data"+i, OBJPROP_YDISTANCE, mFirstVTab + 15 + mSpace + mVertTab * MathCeil(i/5));
      ObjectSet("m.Data"+i, OBJPROP_XDISTANCE, mFirstHTab + mHorizTab * (MathMod(i, 5)));
      ObjectSetText("m.Data"+i, "", mTextSize, "Arial", CLR_NONE);

      ObjectCreate("m.Pr"+i, OBJ_LABEL, mWind, 0, 0, 0, 0);
      ObjectSet("m.Pr"+i, OBJPROP_CORNER, mCorner);
      ObjectSet("m.Pr"+i, OBJPROP_YDISTANCE, mFirstVTab + 15 + mVertTab * MathCeil(i/5));
      ObjectSet("m.Pr"+i, OBJPROP_XDISTANCE, mFirstHTab + mHorizTab * (MathMod(i, 5)));
      ObjectSetText("m.Pr"+i, "", mTextSize, "Arial", CLR_NONE);

      ObjectCreate("m.Cl"+i, OBJ_LABEL, mWind, 0, 0, 0, 0);
      ObjectSet("m.Cl"+i, OBJPROP_CORNER, mCorner);
      ObjectSet("m.Cl"+i, OBJPROP_YDISTANCE, mFirstVTab + 40 + mVertTab * MathCeil(i/5));
      ObjectSet("m.Cl"+i, OBJPROP_XDISTANCE, mFirstHTab + mHorizTab * (MathMod(i, 5)));
      ObjectSetText("m.Cl"+i, "", mTextSize, "Arial", mPriceCol);

      ObjectCreate("m.Rect"+i, OBJ_LABEL, mWind, 0, 0, 0, 0);
      ObjectSet("m.Rect"+i, OBJPROP_CORNER, mCorner);
      ObjectSet("m.Rect"+i, OBJPROP_YDISTANCE, mFirstVTab + mVertTab * MathCeil(i/5));
      ObjectSet("m.Rect"+i, OBJPROP_XDISTANCE, 1 + mHorizTab * (MathMod(i, 5)));
      ObjectSetText("m.Rect"+i, CharToStr(168), 50, "WingDings", mCols[i]);
   }    // for i
   mFirstTime = false;
   
   return(0);
 }
//-----------------------------------------------------------------------------

