Maximum Drawdown and Maximum Relative Drawdown% calculating functions.
I needed a way to calculate the maxDD% of a serie of datas from an array (the different values of my balance account). I didn't find any builtin pinescript way to do it, so here it is.
There are 2 algorithms to calculate maxDD and relative maxDD%, one non optimized needs n*(n - 1)/2 comparisons for a collection of n datas, the other one only needs n-1 comparisons.
In the example we calculate the maxDDs of the last 10 close values.
There a 2 functions : "maximum_relative_drawdown" and "maximum_dradown" (and "optimized_maximum_relative_drawdown" and "optimized_maximum_drawdown") with names speaking for themselves.
Input : an array of floats of arbitrary size (the values we want the DD of) Output : an array of 4 values [maxDD, peak, trough, iterations]
I added the iteration number just for fun.
Basically my script is the implementation of these 2 algos I found on the net :
var peak = 0; var n = prices.length for (var i = 1; i < n; i++){ dif = prices[peak] - prices; peak = dif < 0 ? i : peak; maxDrawdown = maxDrawdown > dif ? maxDrawdown : dif; }
var n = prices.length for (var i = 0; i < n; i++){ for (var j = i + 1; j < n; j++){ dif = prices - prices[j]; maxDrawdown = maxDrawdown > dif ? maxDrawdown : dif; } }