//+------------------------------------------------------------------+
//|                                        Ys-SoporteResistencia.mq4 |
//|                                                            YsEkU |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "YsEkU"
#property link      ""
extern int nodos=100;

int posSup,posInf,posS1=0,posS2=0,posI1=0,posI2=0;
datetime datS1,datS2,datI1,datI2;
double preS1,preS2,preI1,preI2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   ObjectCreate("Resistencia",OBJ_TREND,0,0,0);
   ObjectSet("Resistencia",OBJPROP_RAY,true);
   ObjectSet("Resistencia",OBJPROP_COLOR,Green);
//----
   ObjectCreate("Soporte",OBJ_TREND,0,0,0);    
   ObjectSet("Soporte",OBJPROP_RAY,true);
   ObjectSet("Soporte",OBJPROP_COLOR,Red);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   pivotes();
   controlTS();
   controlTI();
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
void pivotes()
{
posSup=0;
for(int i=2;posSup==0;i++)
   {
   if((High[i+1]<High[i])&&(High[i]>High[i-1]))posSup=i;
   }
posInf=0;
for(i=2;posInf==0;i++)
   {
   if((Low[i+1]>Low[i])&&(Low[i]<Low[i-1]))posInf=i;
   }
//----
posS1=nodos;
posS2=posSup;
posI1=nodos;
posI2=posInf;
//--
datS1=Time[posS1];datS2=Time[posS2];
preS1=High[posS1];preS2=High[posS2];
tendSup();
//--
datI1=Time[posI1];datI2=Time[posI2];
preI1=Low[posI1];preI2=Low[posI2];
tendInf();
}

//+------------------------------------------------------------------+
void tendSup()
{
ObjectSet("Resistencia",OBJPROP_TIME1,datS1);
ObjectSet("Resistencia",OBJPROP_PRICE1,preS1);
ObjectSet("Resistencia",OBJPROP_TIME2,datS2);
ObjectSet("Resistencia",OBJPROP_PRICE2,preS2);
}

//+------------------------------------------------------------------+
void tendInf()
{
ObjectSet("Soporte",OBJPROP_TIME1,datI1);
ObjectSet("Soporte",OBJPROP_PRICE1,preI1);
ObjectSet("Soporte",OBJPROP_TIME2,datI2);
ObjectSet("Soporte",OBJPROP_PRICE2,preI2);
}

//+------------------------------------------------------------------+  
double valorTend(int modo,int pos)
{
string modtex="Soporte";
if(modo==1) modtex="Resistencia";
return(NormalizeDouble(ObjectGetValueByShift(modtex,pos),Digits));
}

//+------------------------------------------------------------------+  
void controlTS()
{
tendSup();
int ft=ftSup();
while(ft!=0)
   {
   preS1=High[ft];
   datS1=Time[ft];
   posS1=ft;
   tendSup();
   ft=ftSup();
   }
}

//+------------------------------------------------------------------+  
void controlTI()
{
tendInf();
int ft=ftInf();
while(ft!=0)
   {
   preI1=Low[ft];
   datI1=Time[ft];
   posI1=ft;
   tendInf();
   ft=ftInf();
   }
}

//+------------------------------------------------------------------+  
int ftSup()
{
for(int i=posS1-1;i>posS2;i--)if(High[i]>valorTend(1,i))return(i);
return(0);
}

//+------------------------------------------------------------------+  
int ftInf()
{
for(int i=posI1-1;i>posI2;i--)if(Low[i]<valorTend(0,i))return(i);
return(0);
}