
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