From b708e90b5f51e9774677a19316db30088d35bc72 Mon Sep 17 00:00:00 2001 From: Thomas Wiecki Date: Mon, 21 Dec 2015 11:40:52 +0100 Subject: [PATCH] WIP Move function and fix global variable names. --- pyfolio/timeseries.py | 72 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/pyfolio/timeseries.py b/pyfolio/timeseries.py index 91988c85..02adb503 100644 --- a/pyfolio/timeseries.py +++ b/pyfolio/timeseries.py @@ -756,40 +756,6 @@ def perf_stats(returns, factor_returns=None): return stats -def get_max_drawdown_underwater(underwater): - """Determines peak, valley, and recovery dates given and 'underwater' - DataFrame. - - An underwater DataFrame is a DataFrame that has precomputed - rolling drawdown. - - Parameters - ---------- - underwater : pd.Series - Underwater returns (rolling drawdown) of a strategy. - - Returns - ------- - peak : datetime - The maximum drawdown's peak. - valley : datetime - The maximum drawdown's valley. - recovery : datetime - The maximum drawdown's recovery. - - """ - - valley = np.argmax(underwater) # end of the period - # Find first 0 - peak = underwater[:valley][underwater[:valley] == 0].index[-1] - # Find last 0 - try: - recovery = underwater[valley:][underwater[valley:] == 0].index[0] - except IndexError: - recovery = np.nan # drawdown not recovered - return peak, valley, recovery - - def perf_stats_bootstrap(returns, factor_returns=None): """Calculates various performance metrics of a strategy, for use in plotting.show_perf_stats. @@ -822,16 +788,50 @@ def do_boostrap(stat_func, *args): stats.loc[stat_name, '5%'] = bootstrap_stats['5%'] stats.loc[stat_name, '95%'] = bootstrap_stats['95%'] - for stat_func in simple_stat_funcs: + for stat_func in SIMPLE_STAT_FUNCS: do_boostrap(stat_func, returns) if factor_returns is not None: - for stat_func in factor_stat_funcs: + for stat_func in FACTOR_STAT_FUNCS: do_bootstrap(stat_func, returns, factor_returns) return stats +def get_max_drawdown_underwater(underwater): + """Determines peak, valley, and recovery dates given and 'underwater' + DataFrame. + + An underwater DataFrame is a DataFrame that has precomputed + rolling drawdown. + + Parameters + ---------- + underwater : pd.Series + Underwater returns (rolling drawdown) of a strategy. + + Returns + ------- + peak : datetime + The maximum drawdown's peak. + valley : datetime + The maximum drawdown's valley. + recovery : datetime + The maximum drawdown's recovery. + + """ + + valley = np.argmax(underwater) # end of the period + # Find first 0 + peak = underwater[:valley][underwater[:valley] == 0].index[-1] + # Find last 0 + try: + recovery = underwater[valley:][underwater[valley:] == 0].index[0] + except IndexError: + recovery = np.nan # drawdown not recovered + return peak, valley, recovery + + def get_max_drawdown(returns): """ Finds maximum drawdown.