[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Sibbet's Demand Index



PureBytes Links

Trading Reference Links

Awhile back I was interested in the Demand Index, This is the only code I 
could find for it. I even tried contacting Sibbet, but the phone numbers 
that I found for him were old. This seems to work although the ExpValue and 
the constant seem rather confusing to me.


The ELA has both the indicator and the function.

The indicator:


{       James Sibbet's Demand Index Indicator   }
{       Programmed by David Fenstemaker         }
{       The Demand Index combines price and volume in   }
{       such a way that it is often a leading indicator of      }
{        price change.  }

Inputs: Length(5);

Vars: DMIndx(0);

DMIndx = DeMand.Index (Length) ;

Plot1(DMIndx, "DMI") ;
Plot2(0, "Zero") ;

{       James Sibbet's Demand Index Function     }
{       Programmed by David Fenstemaker }
{       The Demand Index combines price and volume in   }
{       such a way that it is often a leading indicator of      }
{       price change.   }


The function:

Inputs: Length (NumericSeries);

Vars :  WtCRatio(1), VolRatio(1), VolAvg(Volume),
         BuyP(1), SellP(1), Sign(+1), Return(0),
         WghtClose(Close), AvgTR(High - Low),
         Constant(1),  BuyPres(1),  SellPres(1),
         TempDI(1),  DMI(1);

If CurrentBar = 1 then
     Begin
         VolAvg = Average(Volume, Length);
     End;

Return = 0 ;

WghtClose = (High + Low + Close + Close) * 0.25;
AvgTR = Average (Highest (High, 2) -  Lowest ( Low, 2), Length);
VolAvg = ((VolAvg [1] * (Length - 1)) + Volume) / Length;

If WghtClose  <>  0 and WghtClose[1] <> 0 and
         AvgTR  <>  0 and VolAvg <> 0 then
Begin
         WtCRatio = (WghtClose - WghtClose[1]) / MinList(WghtClose,
WghtClose[1]) ;
         VolRatio = Volume / VolAvg;
         Constant   = ((WghtClose * 3) /AvgTR) * AbsValue (WtCRatio);
         If Constant > 88 then Constant = 88;
         Constant   = VolRatio / ExpValue (Constant);
         If WtCRatio > 0 then
         Begin
             BuyP = VolRatio;
             SellP = Constant;
         End
         Else
         Begin
             BuyP = Constant;
             SellP = VolRatio;
         End;

         BuyPres = ((BuyPres [1] * (Length - 1)) + BuyP) / Length;
         SellPres = ((SellPres [1] * (Length - 1)) + SellP) / Length;

         TempDI   =  +1;

         If SellPres  > BuyPres then
         Begin
             Sign  =  -1;
             If SellPres <> 0 then TempDI = BuyPres / SellPres;
         End
         Else
         Begin
             Sign  =  +1;
             If BuyPres <> 0 then TempDI = SellPres / BuyPres;
         End;

         TempDI = TempDI * Sign;
         If TempDI < 0
         then
                 DMI = -1 - TempDI
         else
                 DMI = +1 - TempDI ;

         Return = DMI {* 100.0} ;

End;

Demand.Index = Return ;