Page 1 of 1

Ledge and Congestion Indicator

Posted: 27 May 2016
by maxmax68

Code: Select all

// _Max_Ledge_Indicator
// provided by Massimo Rizzi
// 27/05/2016
Inputs:
LookBack(10),
Tick_Tolerance(0),
RangeValue(50);

Vars:
vLedge_Flag(False),
v1stHi_Flag(False),
v2ndHi_Flag(False),
v1stHi(0),
v2ndHi(0),
v2ndHi_BarNumber(0),
v1stLo_Flag(False),
v2ndLo_Flag(False),
v1stLo(0),
v2ndLo(0),
v2ndLo_BarNumber(0),
vI(0),
vTick(0);

once if vTick=0 then vTick=MinMove;
once print(NumToStr(vTick,0));

vLedge_Flag=False;
v1stHi_Flag=False;
v2ndHi_Flag=False;
v1stHi=0;
v2ndHi=0;
v2ndHi_BarNumber=0;
v1stLo_Flag=False;
v2ndLo_Flag=False;
v1stLo=0;
v2ndLo=0;
v2ndLo_BarNumber=0;

for vI=1 to LookBack begin
// se non abbiamo ancora 2nd max del ledge
if v2ndHi_Flag=false then begin
// se abbiamo trovato nuovo max diventa v2ndHi
if H[vI]>H[vI+1] then begin
v2ndHi=H[vI];
v2ndHi_BarNumber=BarNumber-vI;
v2ndHi_Flag=True;
end;
end
// se invece abbiamo gia' 2nd max del ledge
else begin
// se non abbiamo ancora 1st max del ledge
if v1stHi_Flag=false then begin
// se abbiamo trovato nuovo max
if H[vI]>H[vI+1] then begin
// se nuovo max >= 2nd Max del Ledge, allora lo sostituisce
if H[vI]>=v2ndHi then begin
v2ndHi=H[vI];
v2ndHi_BarNumber=BarNumber-vI;
end
// altrimenti se distante almeno 2 barre da 2nd max abbiamo trovato nuovo 1st max del ledge
else if (v2ndHi_BarNumber-(BarNumber-vI))>1 then begin
v1stHi=H[vI];
v1stHi_Flag=True;
end;
end;
end
// se invece abbiamo 1st max
else begin
// se nuovo H>1st max del ledge
if H[vI]>=v1stHi then begin
v1stHi=H[vI];
end;
end;
end;
// se non abbiamo ancora 2nd min del ledge
if v2ndLo_Flag=false then begin
// se abbiamo trovato nuovo min diventa v2ndLo
if L[vI]<L[vI+1] then begin
v2ndLo=L[vI];
v2ndLo_BarNumber=BarNumber-vI;
v2ndLo_Flag=True;
end;
end
// se invece abbiamo gia' 2nd min del ledge
else begin
// se non abbiamo ancora 1st min del ledge
if v1stLo_Flag=false then begin
// se abbiamo trovato nuovo min
if L[vI]<L[vI+1] then begin
// se nuovo min > 2nd Min del Ledge, allora lo sostituisce
if L[vI]<=v2ndLo then begin
v2ndLo=L[vI];
v2ndLo_BarNumber=BarNumber-vI;
end
// altrimenti se distante almeno 2 barre da 2nd min abbiamo trovato nuovo 1st min del ledge
else if (v2ndLo_BarNumber-(BarNumber-vI))>1 then begin
v1stLo=L[vI];
v1stLo_Flag=True;
end;
end;
end
// se invece abbiamo 1st min
else begin
// se nuovo L<1st min del ledge
if L[vI]<=v1stLo then begin
v1stLo=L[vI];
end;
end;
end;
end;
// Se trovati sia 1st che 2nd max del ledge e loro valore circa uguale+/-tolleranza allora bingo
// e trovati sia 1st che 2nd min del ledge e loro valore circa uguale+/-tolleranza allora bingo
If v1stHi_Flag And v2ndHi_Flag
and absvalue(v1stHi-v2ndHi)<=Tick_Tolerance*vTick
and v1stHi>0 and v2ndHi>0
and v1stLo_Flag And v2ndLo_Flag
and absvalue(v1stLo-v2ndLo)<=Tick_Tolerance*vTick
and v1stLo>0 and v2ndLo>0
and (v2ndHi-v2ndLo)<=RangeValue

then begin
vLedge_Flag=True;
end;

if vLedge_Flag=true then Plot1(v2ndHi);
if vLedge_Flag=true then Plot2(v2ndLo);