(returns: pd.Series)
| 28 | |
| 29 | |
| 30 | def geometric_mean(returns: pd.Series) -> float: |
| 31 | returns = returns.fillna(0) + 1 |
| 32 | if np.any(returns <= 0): |
| 33 | return 0 |
| 34 | return np.exp(np.log(returns).sum() / (len(returns) or np.nan)) - 1 |
| 35 | |
| 36 | |
| 37 | def compute_stats( |