Macdulio Classics: Fau Wee

An auto trendlines routine for higher time frames.

////Fau Wee by Macdulio
#property copyright   "2019, Macdulio"
#property link        "http://www.forexfore.blog"
#property description "Fau Wee"
#property strict

#property indicator_chart_window
#property indicator_minimum    0
#property indicator_maximum    100
#property indicator_buffers    3
#property indicator_color1     Yellow
#property indicator_level1 93
#property indicator_level2 85
#property indicator_level3 44
#property indicator_level4 15
#property indicator_level5 23
#property indicator_level6 7
#property indicator_level7 77
#property indicator_level8 56
#property indicator_levelcolor clrBlue
#property indicator_levelstyle STYLE_DOT
#property indicator_color1     clrNONE
extern int lookback = 400;
extern bool plot_RSI2_divergences = false;
extern bool plot_shadings = false;
extern bool plot_cls = false;
double UML[],DML[],UML240[],DML240[], Crack[], CrackUp[],CrackDn[];
double levels[];
string symbol = Symbol();
double RSI2[], RSI240[], stoch[], stoch2[], stoch60[];
bool boogieman[];
double shu[],shd[];
int dailydir[], dailycol[];
extern double FSize=32;
double FMax = FSize*6/5;
int OnInit(void)
  {
  
   SetIndexBuffer(0,Crack);
   SetIndexStyle(0,DRAW_LINE,2,8,Navy);
   
   SetIndexBuffer(1,CrackUp);
   SetIndexStyle(1,DRAW_LINE,2,6,LimeGreen);
   
   
   SetIndexBuffer(2,CrackDn);
   SetIndexStyle(2,DRAW_LINE,2,6,Pink);
 
  
  // SetIndexStyle(0,DRAW_LINE,EMPTY,5,Black);
  // SetIndexBuffer(0,RSI2);
   return(INIT_SUCCEEDED);
  }
  

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[])
  {
  
ArrayResize(RSI2, Bars);   
ArrayInitialize(RSI2, 0); 
ArrayResize(RSI240, Bars);   
ArrayInitialize(RSI240, 0); 
ArrayResize(UML, Bars);   
ArrayInitialize(UML, EMPTY_VALUE); 
ArrayResize(DML, Bars);   
ArrayInitialize(DML, EMPTY_VALUE); 
ArrayResize(UML240, Bars);   
ArrayInitialize(UML240, EMPTY_VALUE); 
ArrayResize(DML240, Bars);   
ArrayInitialize(DML240, EMPTY_VALUE); 
ArrayResize(dailydir, Bars);
ArrayInitialize(dailydir, 0);
ArrayResize(dailycol, Bars);
ArrayInitialize(dailycol, 0);  
  ArrayResize(stoch, Bars);   
 ArrayInitialize(stoch, 0);   
  ArrayResize(stoch2, Bars);   
 ArrayInitialize(stoch2, 0);  
 ArrayResize(stoch60, Bars);   
 ArrayInitialize(stoch60, 0); 
 ArrayResize(shd, Bars);   
 ArrayInitialize(shd, EMPTY_VALUE); 
ArrayResize(shu, Bars);   
 ArrayInitialize(shu, EMPTY_VALUE); 
 ArrayResize(Crack, Bars);   
 ArrayInitialize(Crack, EMPTY_VALUE); 
  ArrayResize(CrackUp, Bars);   
 ArrayInitialize(CrackUp, EMPTY_VALUE); 
 ArrayResize(CrackDn, Bars);   
 ArrayInitialize(CrackDn, EMPTY_VALUE); 
ArrayResize(boogieman, Bars);   
 ArrayInitialize(boogieman, false); 
ArrayResize(levels, Bars);   
 ArrayInitialize(levels, EMPTY_VALUE); 

 
 
int    i,i2,j,j2,k;
datetime UpFractalTime_1,LowFractalTime_1,UpFractalTime_2,LowFractalTime_2;

for(i=lookback; i>=0; i--){
  RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
  RSI240[i]=iRSI(symbol,240,2,PRICE_MEDIAN,i);
  stoch[i]=iStochastic(symbol,0,7,3,3,MODE_SMA,1,MODE_SIGNAL,i);
  stoch2[i]=iStochastic(symbol,0,13,3,3,MODE_SMA,1,MODE_SIGNAL,i);
  stoch60[i]=iStochastic(symbol,0,60,3,3,MODE_SMA,0,MODE_SIGNAL,i);
}


for (i = 330 ; i >= 1; i--) {     
   Crack[i]=Crack[i+1];
   CrackUp[i]=CrackUp[i+1];
   CrackDn[i]=CrackDn[i+1];
   
   if (RSI2[i]>RSI2[i-1]+2 && RSI2[i]>RSI2[i+1]+2 && RSI2[i]<99 && RSI2[i]>23) shu[i]=High[i];
   if (RSI2[i]<RSI2[i-1]-2 && RSI2[i]<RSI2[i+1]-2 && RSI2[i]>1 && RSI2[i]<56) shd[i]=Low[i];  
   if (stoch60[i+1]<55 && stoch60[i+2]<55 && stoch60[i+3]<55 && stoch60[i+4]<55 && stoch60[i+5]<55 && stoch60[i]>55) {CrackUp[i]=Crack[i]=(High[i]+Low[i])/2; CrackDn[i]=EMPTY_VALUE;}
   else if (stoch60[i+1]>45 && stoch60[i+2]>45 && stoch60[i+3]>45 && stoch60[i+4]>45 && stoch60[i+5]>45 && stoch60[i]<45) {CrackDn[i]=Crack[i]=(High[i]+Low[i])/2; CrackUp[i]=EMPTY_VALUE;}
   if (CrackDn[i]==EMPTY_VALUE && CrackDn[i+1]!=EMPTY_VALUE) Crack[i]=EMPTY_VALUE;
   if (CrackDn[i+1]==EMPTY_VALUE && CrackDn[i+2]!=EMPTY_VALUE) Crack[i]=CrackUp[i];
   
   if (CrackUp[i]==EMPTY_VALUE && CrackUp[i+1]!=EMPTY_VALUE) Crack[i]=EMPTY_VALUE;
   if (CrackUp[i+1]==EMPTY_VALUE && CrackUp[i+2]!=EMPTY_VALUE) Crack[i]=CrackDn[i];
   
}




deletetxt1("BALNA"); 
deletetxt1("ETEAL"); 


int ucount = 0;
int dcount = 0;

for (k = 1 ; k <= 120; k++) {     


if (dcount<104){
j2=k;
while (j2<200){
   if (shd[j2]!=EMPTY_VALUE) break;
   j2++;
}
j=j2+3; 
while (j<j2+11){
   if (shd[j]!=EMPTY_VALUE && shd[j]<shd[j2]) break;
   j++;
}  


if (j2<200 && j<j2+12 && dcount<24) {LowFractalTime_2=iTime(NULL, 0,j2);    LowFractalTime_1=iTime(NULL, 0,j);    


  ObjectDelete(0,"BALNA3_2"+DoubleToStr(k));
     ObjectCreate(0,"BALNA3_2"+DoubleToStr(k),OBJ_TREND,0,LowFractalTime_1,Low[j],LowFractalTime_2,Low[j2]);
    ObjectSetInteger(0,"BALNA3_2"+DoubleToStr(k),OBJPROP_RAY_RIGHT,true);
         if (j<j2+11) ObjectSet("BALNA3_2"+DoubleToStr(k),OBJPROP_COLOR,clrCrimson);
         else ObjectSet("BALNA3_2"+DoubleToStr(k),OBJPROP_COLOR,indicator_color1);
         ObjectSet("BALNA3_2"+DoubleToStr(k),OBJPROP_BACK,1);
         ObjectSet("BALNA3_2"+DoubleToStr(k),OBJPROP_WIDTH,3);
         
   dcount++;
  // if (k<10){      
  //       ObjectCreate("ETEAL"+DoubleToStr(k), OBJ_RECTANGLE, 0, Time[j2], Low[j2]-FSize/2*10*Point, Time[1], Low[j2]);
  //       ObjectSetInteger(0,"ETEAL"+DoubleToStr(k),OBJPROP_COLOR,clrTeal);
  //       ObjectSet("ETEAL"+DoubleToStr(k),OBJPROP_WIDTH,8);}
 }    
}


if (ucount<84){
i2=k;
while (i2<200){
   if (shu[i2]!=EMPTY_VALUE) break;
   i2++;
}

i=i2+3; 
while (i<i2+12){
   if (shu[i]!=EMPTY_VALUE && shu[i]>shu[i2]) break;
   i++;
}  
   
if (i2<200 && i<i2+12 && ucount<24 ) { UpFractalTime_2=iTime(NULL, 0,i2);    UpFractalTime_1=iTime(NULL, 0,i); 

 ObjectDelete(0,"BALNA3_1"+DoubleToStr(k));
         ObjectCreate(0,"BALNA3_1"+DoubleToStr(k),OBJ_TREND,0,UpFractalTime_1,High[i],UpFractalTime_2,High[i2]);
         ObjectSetInteger(0,"BALNA3_1"+DoubleToStr(k),OBJPROP_RAY_RIGHT,true);
         if (i<i2+11) ObjectSet("BALNA3_1"+DoubleToStr(k),OBJPROP_COLOR,clrGreen);
         else  ObjectSet("BALNA3_1"+DoubleToStr(k),OBJPROP_COLOR,indicator_color1);
         ObjectSet("BALNA3_1"+DoubleToStr(k),OBJPROP_BACK,1);
         ObjectSet("BALNA3_1"+DoubleToStr(k),OBJPROP_WIDTH,3);
         ucount++;
  // if (k<10){         
   //      ObjectCreate("ETEAL"+DoubleToStr(k), OBJ_RECTANGLE, 0, Time[i2], High[i2]+FSize/2*10*Point, Time[1], High[i2]);
   //      ObjectSetInteger(0,"ETEAL"+DoubleToStr(k),OBJPROP_COLOR,clrTeal);
   //      ObjectSet("ETEAL"+DoubleToStr(k),OBJPROP_WIDTH,8);}
}
}
}


   return(rates_total);
  }
//+------------------------------------------------------------------+
   void deletetxt1(string text){
   for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
      string   on = ObjectName(iObj);
      if(StringFind(on, text) == 0)  ObjectDelete(on);
}  }

In combination w/ MFI and CounterFore52