Thanks Tomasz for your help. I do see the logic on how to code in arrays vs
loop. However, your code does not seem to calculate the correct drawdown for
the given period. So heads up to other users.

 

From: [email protected] [mailto:[email protected]] On Behalf
Of Tomasz Janeczko
Sent: Friday, March 05, 2010 4:38 AM
To: [email protected]
Subject: Re: [amibroker] Drawdown Calculation

 

  

Hello,

You should better use array functions.

dtstart = StrToDateTime(From);
dtend = StrToDateTime(To);

dt = DateTime();
mask = dtstart >= dt AND dt <= dtend;

hh = Highest( IIF( mask, array, 0 ) );
ll = Lowest( IIF( mask, array, 99999 ) );

dd = (ll - hh )/ hh;

MaxDD = LastValue( dd );

Best regards,
Tomasz Janeczko
amibroker.com

On 2010-03-05 06:09, ta wrote: 

 

I have written the following function to calculate the drawdown between two
dates. Does anybody know how eliminate the loop or make it run faster? TIA 

  

function MaxDDFromTo(Array, From, To) 
{ 
   Last = LastValue(BarIndex()); 
   Start = LastValue(ValueWhen(DateTime() == StrToDateTime(From),
BarIndex())); 
   End = LastValue(ValueWhen(DateTime() == StrToDateTime(To), BarIndex())); 

   Price = Array; 
   MaxPrice = DD = MaxD = Bars = 0; 
   for( i = Start; i < End; i++ ) 
   { 
      Bars = Bars + 1; 
      MaxPrice = Max(MaxPrice, HHV( Price, Bars )); 
      DD = 100 * ( Price[i] - MaxPrice ) / MaxPrice; 
      MaxD = Min(MaxD, LLV( DD, Bars )); 
   } 
   return MaxD; 
} 

_TRACE("from: " + "12/29/2000" + " To:  " + "12/31/2009" + " MaxDD: " +
MaxDDFromTo(C, "12/29/2000", "12/31/2009") ); 

 



Reply via email to