Skip to content

Commit

Permalink
fixed as_pct bug in dd
Browse files Browse the repository at this point in the history
  • Loading branch information
ranaroussi committed Nov 16, 2021
1 parent 443704e commit f490659
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions quantstats/reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,8 @@ def metrics(returns, benchmark=None, rf=0., display=True,
pct = 100

# return df
dd = _calc_dd(df, display=(display or "internal" in kwargs))
dd = _calc_dd(df, display=(display or "internal" in kwargs),
as_pct=kwargs.get("as_pct", False))

metrics = _pd.DataFrame()

Expand Down Expand Up @@ -694,7 +695,7 @@ def plots(returns, benchmark=None, grayscale=False,
prepare_returns=False)


def _calc_dd(df, display=True):
def _calc_dd(df, display=True, as_pct=False):
dd = _stats.to_drawdown_series(df)
dd_info = _stats.drawdown_details(dd)

Expand All @@ -706,17 +707,14 @@ def _calc_dd(df, display=True):
else:
ret_dd = dd_info

# pct multiplier
pct = 1 if display else 100

dd_stats = {
'returns': {
'Max Drawdown %': ret_dd.sort_values(
by='max drawdown', ascending=True
)['max drawdown'].values[0] / pct,
)['max drawdown'].values[0] / 100,
'Longest DD Days': str(_np.round(ret_dd.sort_values(
by='days', ascending=False)['days'].values[0])),
'Avg. Drawdown %': ret_dd['max drawdown'].mean() / pct,
'Avg. Drawdown %': ret_dd['max drawdown'].mean(),
'Avg. Drawdown Days': str(_np.round(ret_dd['days'].mean()))
}
}
Expand All @@ -725,16 +723,20 @@ def _calc_dd(df, display=True):
dd_stats['benchmark'] = {
'Max Drawdown %': bench_dd.sort_values(
by='max drawdown', ascending=True
)['max drawdown'].values[0] / pct,
)['max drawdown'].values[0] / 100,
'Longest DD Days': str(_np.round(bench_dd.sort_values(
by='days', ascending=False)['days'].values[0])),
'Avg. Drawdown %': bench_dd['max drawdown'].mean() / pct,
'Avg. Drawdown %': bench_dd['max drawdown'].mean(),
'Avg. Drawdown Days': str(_np.round(bench_dd['days'].mean()))
}

# pct multiplier
pct = 100 if display or as_pct else 1

dd_stats = _pd.DataFrame(dd_stats).T
dd_stats['Max Drawdown %'] = dd_stats['Max Drawdown %'].astype(float)
dd_stats['Avg. Drawdown %'] = dd_stats['Avg. Drawdown %'].astype(float)
dd_stats['Max Drawdown %'] = dd_stats['Max Drawdown %'].astype(float) * pct
dd_stats['Avg. Drawdown %'] = dd_stats['Avg. Drawdown %'].astype(float) * pct

return dd_stats.T


Expand Down

0 comments on commit f490659

Please sign in to comment.