PureBytes Links
Trading Reference Links
|
Steve - the "88" limit was imposed to avoid a "floating point numerical
limit" error in Tradestation.
If you trace it, you will see that the first Constant calculation rarely
goes above the range of 20-40.
> -----Original Message-----
> From: Steve Gibbons [mailto:sg27@xxxxxxxxxxxxxx]
> Sent: Monday, April 29, 2002 5:59 AM
> To: omega-list@xxxxxxxxxx
> Subject: RE: Sibbet's Demand Index
>
>
> 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 ;
>
>
|