Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
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),
    }
Esempio n. 4
0
    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