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"||) );|
