def output_summary_stats(self): """ Creates a list of summary statistics for the portfolio. """ total_return = self.equity_curve['equity_curve'][-1] returns = self.equity_curve['returns'] pnl = self.equity_curve['equity_curve'] sharpe_ratio = create_sharpe_ratio(returns, periods=252 * 60 * 6.5) #import time #time0 = time.time() max_dd, dd_duration = create_drawdowns(pnl) #time1 = time.time() #print('timing create drawdown: {}'.format(time1 - time0)) stats = dict() stats['Total Return'] = (total_return - 1.0) stats['Annualized Return'] = ( total_return ** (365 / len(self.equity_curve.index))) - 1 stats['Length of Series'] = len(self.equity_curve.index) stats['Sharpe Ratio'] = sharpe_ratio stats['Max Drawdown'] = max_dd stats['Drawdown Duration'] = floor(dd_duration) self.equity_curve.to_csv('equity.csv') return stats
def test_create_sharpe_ratio1(self): """ test for non volatility serie """ simm = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] prices = pd.Series(simm) returns = prices.pct_change() result = performance.create_sharpe_ratio(returns) self.assertTrue(math.isnan(result))
def test_create_sharpe_ratio0(self): """ test for correct calculations """ simm = [10, 9, 11, 10, 12, 11, 13, 12, 14, 13, 15] prices = pd.Series(simm) returns = prices.pct_change() result = performance.create_sharpe_ratio(returns) expected = 5.85973697 self.assertAlmostEqual(result, expected)
def output_summary_stats(self): """ Crea un elenco di statistiche di riepilogo per il portafoglio come lo Sharpe Ratio e le informazioni sul drowdown. """ total_return = self.equity_curve['equity_curve'][-1] returns = self.equity_curve['returns'] pnl = self.equity_curve['equity_curve'] sharpe_ratio = create_sharpe_ratio(returns, periods=252 * 6.5 * 60) drawdown, max_dd, dd_duration = create_drawdowns(pnl) self.equity_curve['drawdown'] = drawdown stats = [("Total Return", "%0.2f%%" % \ ((total_return - 1.0) * 100.0)), ("Sharpe Ratio", "%0.2f" % sharpe_ratio), ("Max Drawdown", "%0.2f%%" % (max_dd * 100.0)), ("Drawdown Duration", "%d" % dd_duration)] self.equity_curve.to_csv('equity.csv') return stats