def MonthlyRet(self, hedge=True): month_year = pd.Series( self.Ret.index).apply(lambda x: x.year * 100 + x.month) is_month_end = (~month_year.duplicated('last')).tolist() if hedge: monthRet = pd.Series( stats.aggregate_returns(self.activeRet, 'monthly')) monthRet.index = self.activeRet.index[is_month_end] else: monthRet = pd.Series(stats.aggregate_returns(self.Ret, 'monthly')) monthRet.index = self.Ret.index[is_month_end] return monthRet
def BenchmarkMonthlyRet(self): benchmarkRet = self.BenchmarkRet.reindex(self.Ret.index) month_year = pd.Series( self.Ret.index).apply(lambda x: x.year * 100 + x.month) is_month_end = (~month_year.duplicated('last')).tolist() monthRet = pd.Series(stats.aggregate_returns(benchmarkRet, 'monthly')) monthRet.index = self.Ret.index[is_month_end] return monthRet
def get_metrics_single_model(ret): return { "Mean": ret.mean(), "Mean (Yearly)": aggregate_returns(ret, convert_to="yearly").mean(), "Standard Deviation": ret.std(), "Sharpe Ratio": sharpe_ratio(ret, period='monthly'), "Skewness": skew(ret), "Kurtosis": kurtosis(ret), "Max Drawdown": max_drawdown(ret), }
def YearlyPerformance(self): monthlyRet = self.MonthlyRet(False) # 单边做多模型月度收益率 benchmarkMonthlyRet = self.BenchmarkMonthlyRet() hedgeMonthlyRet = self.MonthlyRet(True) # 对冲组合月收益率 a = stats.aggregate_returns(monthlyRet, 'yearly') # 多头组合分年收益 b = stats.aggregate_returns(benchmarkMonthlyRet, 'yearly') # 基准组合分年收益 _l = [] for i, year in enumerate(a.index): hedgeMonthlyRet_current_year = hedgeMonthlyRet.ix[str(year)] monthlyRet_current_year = monthlyRet.ix[str(year)] benchmarkMonthlyRet_current_year = benchmarkMonthlyRet.ix[str( year)] hdSharp_current_year = stats.sharpe_ratio( hedgeMonthlyRet_current_year, annualization=12) hdMaxDown_current_year = stats.max_drawdown( hedgeMonthlyRet_current_year) hdReturn_current_year = stats.annual_return( hedgeMonthlyRet_current_year, annualization=12) hdWinRate_current_year = stats.win_rate( monthlyRet_current_year, benchmarkMonthlyRet_current_year) _l.append([ hdSharp_current_year, hdReturn_current_year, hdMaxDown_current_year, hdWinRate_current_year ]) # 计算全年收益表现 hdSharp_all = stats.sharpe_ratio(hedgeMonthlyRet, annualization=12) hdMaxDown_all = stats.max_drawdown(hedgeMonthlyRet) hdReturn_all = stats.annual_return(hedgeMonthlyRet, annualization=12) hdWinRate_all = stats.win_rate(hedgeMonthlyRet, benchmarkMonthlyRet) _l.append([hdSharp_all, hdReturn_all, hdMaxDown_all, hdWinRate_all]) result = pd.DataFrame(_l, columns=['夏普比率', '年化收益', '最大回撤', '胜率'], index=list(a.index) + ['All']) return result