_SECTION_BEGIN("TrendLines");
GraphXSpace = Param("GraphXSpace", 10, 0, 100, 1);
colorHighliter = IIf(C >= O, ColorRGB(0, 128, 0), ColorRGB(128, 0, 0));
//Price
SetBarFillColor(colorHighliter);
Plot(C, "Close", IIf(colorHighliter == ColorRGB(128, 0, 128), ColorRGB(255, 0, 255), IIf(colorHighliter == ColorRGB(128, 128, 0), ColorRGB(255, 255, 0), IIf(C > O, ColorRGB(0, 255, 0), IIf(C < O, ColorRGB(255, 0, 0), ColorRGB(255, 255, 255))))), styleCandle, Null, Null, 0, 0);
// Pivots
SV_LP=Param("Lookback Period for pivot?",5,2,50,1);
PH = H > Ref(HHV(H,SV_LP),-1) AND Ref(HHV(H,SV_LP),SV_LP)<=H;
PHP = ValueWhen(PH,H);
PL = L < Ref(LLV(L,SV_LP),-1) AND Ref(LLV(L,SV_LP),SV_LP)>=L;
if(ParamToggle("Suppress Successive Same Pivots?","No,Yes")){
PH = ExRem(PH,PL);
PL = ExRem(PL,PH);
}
if(ParamToggle("Plot Pivots?","No,Yes",1)){
PlotShapes(IIf(PH,shapeSmallCircle,shapeNone),colorGreen,0,H,12);
PlotShapes(IIf(PL,shapeSmallCircle,shapeNone),colorRed,0,L,-12);
}
//End Pivots
//Demand Point
colorDemandPoint = ParamColor("Demand Line", ColorRGB(0, 128, 255));
DemandPoint = PL;
//Supply Point
colorSupplyPoint = ParamColor("Supply Line", ColorRGB(255, 128, 0));
SupplyPoint = PH;
CountTrendBars = 0;
CurrentBar = BarCount - 1;
dx0 = dx1 = dy0 = dy1 = 0;
sx0 = sx1 = sy0 = sy1 = 0;
y2=0;
y3=0;
Miny = Status("axisminy");
Maxy = Status("axismaxy");
for (i = 0; i < BarCount; i++) {
CurrentBar = (BarCount - 1) - i;
if (DemandPoint[CurrentBar]) {
if (dx1 == 0 & dy1 == 0) {
dx1 = CurrentBar;
dy1 = L[CurrentBar];
} else {
dx0 = CurrentBar;
dy0 = L[CurrentBar];
}
if (dx0 != 0 & dx1 != 0 & dy0 != 0 & dy1 != 0) {
if (dy0 < dy1) {
a = (-dy0 + dy1) / (-dx0 + dx1);
b = dy0 - dx0 * a;
for (j = dx1; j < BarCount; j++) {
if (j != dx1) {
y2 = a * j + b;
// if(y2 == Miny) {break;};
if (C[j] < y2) {
dy1 = y2;
dx1 = j;
colorHighliter[j] = ColorRGB(128, 0, 128);
CountTrendBars[j] = dx1 - dx0 - 1;
break;
}
}
}
if (dy1 != y2) {
dy1 = y2;
dx1 = BarCount - 1;
}
Plot(LineArray(dx0, dy0, dx1, dy1, 0), "", colorDemandPoint, styleLine, Null, Null, 0, 0);
}
dx1 = dx0;
dy1 = dy0;
dx0 = dy0 = 0;
}
}
if (SupplyPoint[CurrentBar]) {
if (sx1 == 0 & sy1 == 0) {
sx1 = CurrentBar;
sy1 = H[CurrentBar];
} else {
sx0 = CurrentBar;
sy0 = H[CurrentBar];
}
if (sx0 != 0 & sx1 != 0 & sy0 != 0 & sy1 != 0) {
if (sy0 > sy1) {
a = (-sy0 + sy1) / (-sx0 + sx1);
b = sy0 - sx0 * a;
for (j = sx1; j < BarCount; j++) {
if (j != sx1) {
y3 = a * j + b;
// if(y3 == Miny) {break;};
if (C[j] > y3) {
sy1 = y3;
sx1 = j;
colorHighliter[j] = ColorRGB(128, 128, 0);
CountTrendBars[j] = sx1 - sx0 - 1;
break;
}
}
}
if (sy1 != y3) {
sy1 = y3;
sx1 = BarCount - 1;
}
Plot(LineArray(sx0, sy0, sx1, sy1, 0), "", colorSupplyPoint, styleLine, Null, Null, 0, 0);
}
sx1 = sx0;
sy1 = sy0;
sx0 = sy0 = 0;
}
}
}
/*
How it work:
========
Supply Line is Orange, Demand Line is Blue.
Trigger: Buy candle is Yellow, Sell Candle is Magenta
*/
_SECTION_END(); //("TrendLines");
_N(Title = StrFormat(EncodeColor( colorPaleGreen ) + "{{NAME}} - {{INTERVAL}} {{DATE}} " + " Open %g," + " Hi %g, "
+ " Lo %g, " + " C %g {{VALUES}}", O, H, L, C )
+ EncodeColor( colorRed ) + "\n"+", LH = " + NumToStr(Ref(H,-1), 1.4) + ", LL = "
+ NumToStr(Ref(L,-1), 1.4) + ", LH2 = " + NumToStr(Ref(H,-2), 1.4) + ", LL2 = " + NumToStr(Ref(L,-2), 1.4));