//+------------------------------------------------------------------+
//|                                              MTF_Basket_Pips.mq4 |
//|                                                      version 1.1 |
//|                          Copywrong © 2010, Splash Software Corp. |
//|                                                               ;) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Description: Dis phile is an MQL4 indicator file.                |
//| Indicator shows basket pips on the several timeframes.           |
//+------------------------------------------------------------------+
#property copyright "© 2010, Splash"
#property indicator_chart_window
//+------------------------------------------------------------------+
#define MIN_PAIRS       1
#define MAX_PAIRS       14
#define MIN_BARS        1
#define MAX_BARS        10
#define MAX_TIMEFRAMES  6
//+------------------------------------------------------------------+
//| Input parameters                                                 |
//+------------------------------------------------------------------+
extern int     NumPairs =  14;
extern string  Pair1 =     "GBPJPY";
extern string  Pair2 =     "EURJPY";
extern string  Pair3 =     "AUDJPY";
extern string  Pair4 =     "GBPUSD";
extern string  Pair5 =     "NZDUSD";
extern string  Pair6 =     "USDCHF";
extern string  Pair7 =     "EURGBP";
extern string  Pair8 =     "NZDJPY";
extern string  Pair9 =     "USDJPY";
extern string  Pair10 =    "CHFJPY";
extern string  Pair11 =    "AUDUSD";
extern string  Pair12 =    "EURUSD";
extern string  Pair13 =    "GBPCHF";
extern string  Pair14 =    "EURCHF";
extern int     NumBars =   5;
extern int     X =         10;   // X;
extern int     Y =         500;   // Y;
extern int     Size =      10;   // Size;
//+------------------------------------------------------------------+
//| Variables                                                        |
//+------------------------------------------------------------------+
string   Pairs[];                // Basket;
double   PairPoints[];
double   Pips[][MAX_TIMEFRAMES];
int      TimeFrames[MAX_TIMEFRAMES];
string   TimeFrameNames[MAX_TIMEFRAMES];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int i, j;

   if ((NumPairs < MIN_PAIRS) || (NumPairs > MAX_PAIRS))
    NumPairs = MAX_PAIRS;
   if ((NumBars < MIN_BARS) || (NumBars > MAX_BARS))
    NumBars = MAX_BARS;
   
   IndicatorShortName("MTF_Basket_Pips_("+ NumPairs + ")");
   ArrayResize(Pairs, NumPairs);
   ArrayResize(PairPoints, NumPairs);
   ArrayResize(Pips, NumBars);

   switch (NumPairs)
   {
    case 14:   Pairs[13] = Pair14;
    case 13:   Pairs[12] = Pair13;
    case 12:   Pairs[11] = Pair12;
    case 11:   Pairs[10] = Pair11;
    case 10:   Pairs[9] =  Pair10;
    case 9:    Pairs[8] =  Pair9;
    case 8:    Pairs[7] =  Pair8;
    case 7:    Pairs[6] =  Pair7;
    case 6:    Pairs[5] =  Pair6;
    case 5:    Pairs[4] =  Pair5;
    case 4:    Pairs[3] =  Pair4;
    case 3:    Pairs[2] =  Pair3;
    case 2:    Pairs[1] =  Pair2;
    case 1:    Pairs[0] =  Pair1;
   }

   if (MarketInfo("EURUSD", MODE_DIGITS) == 5)  j = 10;
   else                                         j = 1;
   for (i = 0; i < NumPairs; i++)
    PairPoints[i] = MarketInfo(Pairs[i], MODE_POINT) * j;

   TimeFrames[0] = 10080;
   TimeFrames[1] = 1440;
   TimeFrames[2] = 240;
   TimeFrames[3] = 60;
   TimeFrames[4] = 30;
   TimeFrames[5] = 15;
   
   TimeFrameNames[0] = "W1";
   TimeFrameNames[1] = "D1";
   TimeFrameNames[2] = "H4";
   TimeFrameNames[3] = "H1";
   TimeFrameNames[4] = "M30";
   TimeFrameNames[5] = "M15";

   return (0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   clear();
   
   return (0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   calculate();
   draw();

   return (0);
}
//+------------------------------------------------------------------+
//| Custom indicator calculation function                            |
//+------------------------------------------------------------------+
void calculate()
{
   int i, j, k;

   for (i = NumBars - 1; i >= 0; i--)
   {
    for (j = MAX_TIMEFRAMES - 1; j >= 0; j--)
    {
     Pips[NumBars-1-i][j] = 0.0;
     for (k = 0; k < NumPairs; k++)
      Pips[NumBars-1-i][j] += MathRound((iClose(Pairs[k], TimeFrames[j], i) - iOpen(Pairs[k], TimeFrames[j], i)) / PairPoints[k]);
    }
   }
}
//+------------------------------------------------------------------+
//| Custom indicator draw function                                   |
//+------------------------------------------------------------------+
void draw()
{
   int i, j;
   color cl;

   for (i = 0; i < NumBars; i++)
    draw_label("mbp_lbl_bar_" + i, X, Y + (2*Size) + (i * 2*Size), "BAR" + (NumBars - 1 - i), Size, "Calibri Bold", Silver);
   for (i = 0; i < MAX_TIMEFRAMES; i++)
    draw_label("mbp_lbl_tf_" + i, X + (4*Size) + (i * 3*Size), Y, TimeFrameNames[i], Size, "Calibri Bold", Silver);
   for (i = 0; i < NumBars; i++)
   {
    for (j = 0; j < MAX_TIMEFRAMES; j++)
    {
     if (Pips[i][j] > 0)   cl = Lime;
     if (Pips[i][j] == 0)  cl = Silver;
     if (Pips[i][j] < 0)   cl = Red;
     draw_label("mbp_lbl_pips_" + i + j, X + (4*Size) + (j * 3*Size), Y + (2*Size) + (i * 2*Size), DoubleToStr(MathAbs(Pips[i][j]), 0), Size, "Calibri Bold", cl);
    }
   }
}
//+------------------------------------------------------------------+
//| Custom indicator clear function                                  |
//+------------------------------------------------------------------+
void clear()
{
   int i, j;

   for (i = 0; i < NumBars; i++)
    clear_label("mbp_lbl_bar_" + i);
   for (i = 0; i < MAX_TIMEFRAMES; i++)
    clear_label("mbp_lbl_tf_" + i);
   for (i = 0; i < NumBars; i++)
   {
    for (j = 0; j < MAX_TIMEFRAMES; j++)
     clear_label("mbp_lbl_pips_" + i + j);
   }
}
//+------------------------------------------------------------------+
//| Draw label function                                              |
//+------------------------------------------------------------------+
void draw_label(string name, int dist_x, int dist_y, string text, int font_size, string font_name, color text_color)
{
   if (ObjectFind(name) == -1)
    ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name, OBJPROP_XDISTANCE, dist_x);
   ObjectSet(name, OBJPROP_YDISTANCE, dist_y);
   ObjectSetText(name, text, font_size, font_name, text_color);
}
//+------------------------------------------------------------------+
//| Clear label function                                             |
//+------------------------------------------------------------------+
void clear_label(string name)
{
   if (ObjectFind(name) != -1)
    ObjectDelete(name);
}
//+------------------------------------------------------------------+
//| EOF :)                                                           |
//+------------------------------------------------------------------+

