PureBytes Links
Trading Reference Links
|
The following approach can be simplified with identical results....
BEFORE
If MinusDM >= PlusDM Then
PlusDM = 0
else if absvalue(MinusDM-PlusDM)<=0.000001 then
PlusDM=0;
AFTER
If MinusDM >= PlusDM - 0.000001 Then
PlusDM = 0 ;
In general, try these formats:
If x <= y + 0.000001 then ....
If x >= y - 0.000001 then ....
- mark jurik
----------
From: Bengtsson, Mats
Sent: Tuesday, July 17, 2001 11:04 AM
To: Jack Griffin; omega-list@xxxxxxxxxx
Subject: RE: I think I have to change my opinion from bad precision to buggy c alculations
I can not rewrite the functions since they are write protected, so I can not
help as well as you suggest. What I have done is to create copies of them,
giving them similar names and calling them instead. Below is the changed
code for dmiplus, and the changes to dmiminus is similar. I have not yet
tested if 0.000001 is the best value. It finds a number of occurances, but
maybe 0.00001 would be better, normally prices never have data below 0.001
so it should be both enough and safe to use.
As you can see, the only change I have done is to add a test after the test
"if minusdm>=plusdm" saying "else if absvalue(MinusDM-PlusDM)<=0.000001
then" and setting the value to zero. (the change need to be written in two
places in both plusdmi and minusdmi)
{*******************************************************************
Description: Directional Movement Index Plus
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Length(NumericSimple) ;
Variables: Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0),
MinusDM(0);
If CurrentBar = 1 Then Begin
MyRange = Length;
MIBDMIPlus = 0;
PlusDM14 = 0;
TRange = 0;
For Counter = 0 To MyRange - 1 Begin
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0
Else
MinusDM = Low[Counter+1] - Low[Counter];
If MinusDM >= PlusDM Then
PlusDM = 0
else if absvalue(MinusDM-PlusDM)<=0.000001 then
PlusDM=0;
{MinusDM not set to 0 because it is not used}
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
End;
If TRange <> 0 Then
MIBDMIPlus = 100 * PlusDM14 / TRange
Else
MIBDMIPlus = 0 ;
End
Else
If CurrentBar > 1 Then Begin
If High[0] - High[1] < 0 Then
PlusDM = 0
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0
Else
MinusDM = Low[1] - Low[0];
If MinusDM >= PlusDM Then
PlusDM = 0
else if absvalue(MinusDM-PlusDM)<=0.000001 then begin
PlusDM=0;
End;
{MinusDM not set to 0 because it is not used}
If MyRange > 0 Then Begin
TRange = TRange[1] - (TRange[1] / MyRange) +
TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) +
PlusDM;
End;
If TRange <> 0 Then
MIBDMIPlus = 100 * PlusDM14 / TRange
Else
MIBDMIPlus = 0 ;
End ;
> -----Original Message-----
> From: Jack Griffin [mailto:jack_2231@xxxxxxxxx]
> Sent: den 17 juli 2001 14:03
> To: Bengtsson, Mats; pierre.orphelin@xxxxxxxxxxxxxx;
> omega-list@xxxxxxxxxx
> Subject: RE: I think I have to change my opinion from bad
> precision to bug gy c alculations
>
>
> --- "Bengtsson, Mats" <mats.bengtsson@xxxxxxxx> wrote:
> > I have found a bug. I have reported the bug. I have
> > made clear examples of
>
> Hey Mats, when I find bugs in functions and indicators
> I often post the debugged code. After you are done
> writing debugged versions (using absvalue(x-y)<.001)
> of the associated functions and indicators please post
> your debugged DMI, etc.. I am sure many of us would
> like copies. Thanks.
>
> Jack
>
>
>
This message contains information that may be privileged or confidential and is the property of the Cap Gemini Ernst & Young Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message.
|