
#property copyright "KG"
#property link ""

#property indicator_separate_window
#property indicator_buffers 6

#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Lime
#property indicator_color5 Lime
#property indicator_color6 White

//#property indicator_minimum 0
//#property indicator_maximum 100
#property indicator_level1 50
#property indicator_level2 75
#property indicator_level3 25
#property indicator_levelcolor DarkSlateGray

extern int Stoch_Periode = 48;
int Trigger_MA_Mode=0;
//extern int Trigger_A=32;
//extern int Trigger_B=24;
//extern int Trigger_C=16;
//extern int Trigger_D=8;
string mlong_basket1= "EURUSD";
string mlong_basket2= "EURGBP";
string mlong_basket3= "EURJPY";
string mlong_basket4= "EURCHF";
string mlong_basket5= "EURAUD";
string mlong_basket6= "EURNZD";
string mlong_basket7= "EURCAD";
string tanda,tanda1,tanda2,tanda3;
string long_basket1, long_basket2, long_basket3, long_basket4, long_basket5, long_basket6, long_basket7;
extern int All_Bars = 1000;
double MAArray[];
double stochArray[];
double UpperBuffer[];
double LowerBuffer[];
double TriggerBuffer1[];
double TriggerBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators setting
SetIndexStyle(0,DRAW_LINE,0,2);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexStyle(2,DRAW_LINE,STYLE_DOT);
SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
SetIndexStyle(4,DRAW_LINE,STYLE_DOT);
SetIndexStyle(5,DRAW_LINE,0,2);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

SetIndexBuffer(0,MAArray);
SetIndexBuffer(1,UpperBuffer);
SetIndexBuffer(2,LowerBuffer);
SetIndexBuffer(3,TriggerBuffer1);
SetIndexBuffer(4,TriggerBuffer2);
SetIndexBuffer(5,stochArray);

GetCorrectPairs();

//---- variable reset

//----
return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//if (Period() < 60 || Period() > 60) return(-1);
int limit=All_Bars;
double current,prev,main0, main1,A0,A1,B0,B1,C0,C1,D0,D1;
//---- indicator calculation

for(int i=limit; i>=0; i--)
{
   stochArray[i] = GetSTOCHbasket(i);
}

for(i=limit; i>=0; i--)
{
   MAArray[i]=iMAOnArray(stochArray,Bars,Stoch_Periode,0,Trigger_MA_Mode,i);
   UpperBuffer[i]=iBandsOnArray(stochArray,Bars,Stoch_Periode,1,0,MODE_UPPER,i);//iMAOnArray(stochArray,Bars,Trigger_A,0,Trigger_MA_Mode,i);//
   LowerBuffer[i]=iBandsOnArray(stochArray,Bars,Stoch_Periode,1,0,MODE_LOWER,i);//iMAOnArray(stochArray,Bars,Trigger_B,0,Trigger_MA_Mode,i);//
   TriggerBuffer1[i]=iBandsOnArray(stochArray,Bars,Stoch_Periode,2,0,MODE_UPPER,i);//iMAOnArray(stochArray,Bars,Trigger_C,0,Trigger_MA_Mode,i);
   TriggerBuffer2[i]=iBandsOnArray(stochArray,Bars,Stoch_Periode,2,0,MODE_LOWER,i);//iMAOnArray(stochArray,Bars,Trigger_D,0,Trigger_MA_Mode,i);
}
//----
for(i=limit; i>=0; i--)
{
current=stochArray[i];
prev=stochArray[i+1];
main0=MAArray[i];
main1=MAArray[i+1];
A0=UpperBuffer[i];
A1=UpperBuffer[i+1];
B0=LowerBuffer[i];
B1=LowerBuffer[i+1];
C0=TriggerBuffer1[i];
C1=TriggerBuffer1[i+1];
D0=TriggerBuffer2[i];
D1=TriggerBuffer2[i+1];

if(current>prev)  {tanda="UP";}
if(current<prev)  {tanda="DOWN";}
if(current==prev)  {tanda="FLAT";}

if(main0>main1)  {tanda1="UP";}
if(main0<main1)  {tanda1="DOWN";}
if(main0==main1)  {tanda1="FLAT";}

if(current>A0)  {tanda2="UBNORMAL UP";}
if(current<B0)  {tanda2="UBNORMAL DOWN";}
if(current>=B0 && current<=A0)  {tanda2="NORMAL";}

if(current>main0)  {tanda3="CROSS UP";}
if(current<main0)  {tanda3="CROSS DOWN";}
if(current==main0)  {tanda3="FLAT";}

IndicatorShortName("EUR :   ["+tanda3+"]   "+tanda+"  -  "+tanda1+"  -  "+tanda2+"   ");
}
return(0);
}

double GetSTOCHbasket(int pos)
{
   double STOCHbasket;
   double r1, r2, r3, r4, r5, r6, r7;
   
   r1 = iStochastic(long_basket1,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r2 = iStochastic(long_basket2,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r3 = iStochastic(long_basket3,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r4 = iStochastic(long_basket4,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r5 = iStochastic(long_basket5,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r6 = iStochastic(long_basket6,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   r7 = iStochastic(long_basket7,0,Stoch_Periode,1,1,MODE_SMA,0,MODE_MAIN,pos);
   
   
   STOCHbasket = r1 + r2 + r3 + r4 + r5 + r6 + r7;   
   STOCHbasket = STOCHbasket / 7.0;
   
   return(STOCHbasket);
   
}


void GetCorrectPairs()
{
   long_basket1 = GetCorrectSymbol(mlong_basket1);
   long_basket2 = GetCorrectSymbol(mlong_basket2);
   long_basket3 = GetCorrectSymbol(mlong_basket3);
   long_basket4 = GetCorrectSymbol(mlong_basket4);
   long_basket5 = GetCorrectSymbol(mlong_basket5);
   long_basket6 = GetCorrectSymbol(mlong_basket6);
   long_basket7 = GetCorrectSymbol(mlong_basket7);
   
}

string GetCorrectSymbol(string pair)
{
   string AddChar, myPair;
   
   myPair = pair;
   if (StringLen(pair) > 0)
   {
   if (StringLen(Symbol()) == 7)
     {
      AddChar = StringSubstr(Symbol(), 6, 1);
      myPair = pair + AddChar;
     }
   }
   return(myPair);
   
}
//+------------------------------------------------------------------+