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