Ledge and Congestion Indicator

Studies that have been contributed to the community by other users. If you’ve got something useful to share, that’s great!
maxmax68
Posts: 149
Joined: 20 Nov 2012
Has thanked: 52 times
Been thanked: 41 times

Ledge and Congestion Indicator

Postby maxmax68 » 27 May 2016

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);



Return to “User Contributed Studies and Indicator Library”