//+------------------------------------------------------------------+
//|                                                   betterMACD.mq4 |
//|                                                          ASugler |
//|                                             inyushinalex@mail.ru |
//+------------------------------------------------------------------+

#property copyright "ASugler"
#property link      "inyushinalex@mail.ru"
#property version   "1.00"
#property strict
//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 clrBlack


//--- indicator parameters
input string Symb1 = "EURUSD";
input string Symb2 = "GBPUSD";
input string Symb3 = "AUDUSD";
input string Symb4 = "USDCHF";
input string Symb5 = "USDJPY";
input string Symb6 = "USDCAD";
input double kSymb1 = 1;
input double kSymb2 = 0;
input double kSymb3 = 0;
input double kSymb4 = 0;
input double kSymb5 = 0;
input double kSymb6 = 0;

double MAX = -100000;
double MIN = 100000;
double OPEN = 0;
double CLOSE = 0;
datetime Timer = 100;

double buffer_Close[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(Digits);
//--- indicator buffers mapping
SetIndexBuffer(0,buffer_Close);


SetIndexStyle(0,3,0,1);SetIndexArrow(0,158);



//---
   IndicatorShortName("MyPair");
   SetIndexLabel(0,"Close");


//---
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
ObjectsDeleteAll(ChartID(),1,OBJ_TREND);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
int limit = Bars-1-prev_calculated;
if(limit<1) limit=1;
//---
for (int i=0; i<limit; i++)
{
if (iClose(Symb1,0,i)!=0 && iClose(Symb2,0,i)!=0 && iClose(Symb3,0,i)!=0)
buffer_Close[i] = kSymb1*1/iClose(Symb1,0,i)+kSymb2*1/iClose(Symb2,0,i)+kSymb3*1/iClose(Symb3,0,i)+kSymb4*iClose(Symb4,0,i)+kSymb5*iClose(Symb5,0,i)+kSymb6*iClose(Symb6,0,i);
}
CLOSE = kSymb1*1/iClose(Symb1,0,0)+kSymb2*1/iClose(Symb2,0,0)+kSymb3*1/iClose(Symb3,0,0)+kSymb4*iClose(Symb4,0,0)+kSymb5*iClose(Symb5,0,0)+kSymb6*iClose(Symb6,0,0);
if (Timer!=Time[1] && iClose(Symb1,0,0)!=0 && iClose(Symb2,0,0)!=0 && iClose(Symb3,0,0)!=0)
{
MAX = kSymb1*1/iClose(Symb1,0,0)+kSymb2*1/iClose(Symb2,0,0)+kSymb3*1/iClose(Symb3,0,0)+kSymb4*iClose(Symb4,0,0)+kSymb5*iClose(Symb5,0,0)+kSymb6*iClose(Symb6,0,0);
MIN = kSymb1*1/iClose(Symb1,0,0)+kSymb2*1/iClose(Symb2,0,0)+kSymb3*1/iClose(Symb3,0,0)+kSymb4*iClose(Symb4,0,0)+kSymb5*iClose(Symb5,0,0)+kSymb6*iClose(Symb6,0,0);
OPEN = kSymb1*1/iClose(Symb1,0,0)+kSymb2*1/iClose(Symb2,0,0)+kSymb3*1/iClose(Symb3,0,0)+kSymb4*iClose(Symb4,0,0)+kSymb5*iClose(Symb5,0,0)+kSymb6*iClose(Symb6,0,0);
Timer=Time[1];
}
if (CLOSE>MAX) MAX = CLOSE;
if (CLOSE<MIN) MIN = CLOSE;
if(ObjectFind(Time[0])==-1)
{
ObjectCreate(ChartID(),Time[0],OBJ_TREND,1,Time[0],MIN,Time[0],MAX);
ObjectSet(Time[0],10,false);
ObjectSet(Time[0],6,clrBlack);
ObjectSet(Time[0],8,2);
}
if(ObjectFind("BODY"+Time[0])==-1)
{
ObjectCreate(ChartID(),"BODY"+Time[0],OBJ_TREND,1,Time[0],OPEN,Time[0],CLOSE);
ObjectSet("BODY"+Time[0],10,false);
ObjectSet("BODY"+Time[0],6,clrBlack);
ObjectSet("BODY"+Time[0],8,4);
}
ObjectSet(Time[0],1,MIN);
ObjectSet(Time[0],3,MAX);
ObjectSet("BODY"+Time[0],3,CLOSE);
if (CLOSE>OPEN) ObjectSet("BODY"+Time[0],6,clrGreen);
if (CLOSE<OPEN) ObjectSet("BODY"+Time[0],6,clrRed);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

