Beispiel #1
0
 def abs_yearly_performance(self):
     idx = GetDatetimeLastDayOfYear(self.portfolio_return.index)
     gfunc = lambda x: x.year
     df = self.portfolio_return.groupby(gfunc).agg({
         'cum_return':
         (lambda x: stats.cum_returns_final(
             self.portfolio_return.reindex(x.index)) - stats.
          cum_returns_final(self.benchmark_return.reindex(x.index))),
         'volatility':
         lambda x: np.std(x, ddof=1) * 250**0.5,
         'sharp_ratio':
         lambda x: stats.sharpe_ratio(x, simple_interest=True),
         'maxdd':
         stats.max_drawdown,
         'IR':
         lambda x: stats.information_ratio(x, self.benchmark_return),
         'monthly_win_rate':
         lambda x: stats.win_rate(x, self.benchmark_return, 'monthly'),
         'weekly_win_rate':
         lambda x: stats.win_rate(x, self.benchmark_return, 'weekly'),
         'daily_win_rate':
         lambda x: stats.win_rate(x, self.benchmark_return, 'daily')
     })
     df.index = idx
     return df
Beispiel #2
0
 def rel_monthly_performance(self):
     func_dict = {
         'cum_return': (lambda x: stats.cum_returns_final(
             self.portfolio_ret.reindex(x.index)) - stats.cum_returns_final(
                 self.benchmark_ret.reindex(x.index))),
         'volatility':
         lambda x: np.std(x, ddof=1) * 20**0.5,
         'weekly_win_rate':
         lambda x: stats.win_rate(x, 0, 'weekly'),
         'daily_win_rate':
         lambda x: stats.win_rate(x, 0, 'daily')
     }
     df = resample_func(self.active_return, convert_to='1m', func=func_dict)
     return df
Beispiel #3
0
 def rel_monthly_performance(self):
     idx = GetDatetimeLastDayOfMonth(self.active_return.index)
     gfunc = [lambda x: x.year, lambda x: x.month]
     df = self.active_return.groupby(gfunc).agg({
         'cum_return':
         (lambda x: stats.cum_returns_final(
             self.portfolio_return.reindex(x.index)) - stats.
          cum_returns_final(self.benchmark_return.reindex(x.index))),
         'volatility':
         lambda x: np.std(x, ddof=1) * 20**0.5,
         'weekly_win_rate':
         lambda x: stats.win_rate(x, 0, 'weekly'),
         'daily_win_rate':
         lambda x: stats.win_rate(x, 0, 'daily')
     })
     df.index = idx
     return df
Beispiel #4
0
    def get_summary(self, freq='m'):
        if freq == 'm':
            monthlyRet = self.MonthlyRet(False)
            monthlyBenchmarkRet = self.BenchmarkMonthlyRet()
            hedgeMonthlyRet = self.MonthlyRet()

            _dict = {
                'annual_return':
                stats.annual_return(hedgeMonthlyRet, annualization=12),
                'annual_vol':
                stats.annual_volatility(hedgeMonthlyRet, annualization=12),
                'IR':
                stats.information_ratio(monthlyRet, monthlyBenchmarkRet),
                't_stats':
                stats_scp.ttest_1samp(hedgeMonthlyRet, 0)[0],
                'win_rate':
                stats.win_rate(monthlyRet, monthlyBenchmarkRet),
                'max_drawdown':
                stats.max_drawdown(hedgeMonthlyRet),
                'drawn_down_start':
                pf.timeseries.get_top_drawdowns(hedgeMonthlyRet, 1)[0][0],
                'draw_down_end':
                pf.timeseries.get_top_drawdowns(hedgeMonthlyRet, 1)[0][1],
            }
        else:
            _dict = {
                'annual_return':
                stats.annual_return(self.activeRet, annualization=12),
                'annual_vol':
                stats.annual_volatility(self.activeRet, annualization=12),
                'IR':
                stats.information_ratio(self.Ret, self.BenchmarkRet),
                't_stats':
                stats_scp.ttest_1samp(self.activeRet, 0)[0],
                'win_rate':
                stats.win_rate(self.Ret, self.BenchmarkRet),
                'max_drawdown':
                stats.max_drawdown(self.activeRet),
                'drawn_down_start':
                pf.timeseries.get_top_drawdowns(self.activeRet, 1)[0],
                'draw_down_end':
                pf.timeseries.get_top_drawdowns(self.activeRet, 1)[1],
            }
        return pd.Series(_dict)
Beispiel #5
0
 def abs_yearly_performance(self):
     func_dict = {
         'cum_return':
         lambda x: stats.cum_returns_final(
             self.portfolio_ret.reindex(x.index)),
         'volatility':
         lambda x: np.std(x, ddof=1) * 250**0.5,
         'sharp_ratio':
         lambda x: stats.sharpe_ratio(x, simple_interest=True),
         'maxdd':
         stats.max_drawdown,
         'IR':
         lambda x: stats.information_ratio(x, self.benchmark_ret),
         'monthly_win_rate':
         lambda x: stats.win_rate(x, 0.0, 'monthly'),
         'weekly_win_rate':
         lambda x: stats.win_rate(x, 0.0, 'weekly'),
         'daily_win_rate':
         lambda x: stats.win_rate(x, 0.0, 'daily')
     }
     df = resample_func(self.portfolio_ret, convert_to='1y', func=func_dict)
     return df
Beispiel #6
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
Beispiel #7
0
 def total_performance(self):
     """策略全局表现"""
     win_rate_func = lambda x, y: stats.win_rate(
         x, factor_returns=0, period=y)
     df = pd.DataFrame(
         [[
             self.abs_total_return, self.total_benchmark_return,
             self.rel_total_return
         ],
          [
              self.abs_maxdrawdown,
              stats.max_drawdown(self.benchmark_return),
              self.rel_maxdrawdown
          ],
          [
              self.abs_annual_volatility,
              stats.annual_volatility(self.benchmark_return),
              self.rel_annual_volatility
          ],
          [
              self.abs_annual_return,
              stats.annual_return(self.benchmark_return),
              self.rel_annual_return
          ],
          [
              self.abs_sharp_ratio,
              stats.sharpe_ratio(self.benchmark_return,
                                 simple_interest=True), self.rel_sharp_ratio
          ],
          [
              win_rate_func(self.portfolio_return, 'monthly'),
              win_rate_func(self.benchmark_return, 'monthly'),
              win_rate_func(self.active_return, 'monthly')
          ]],
         columns=['portfolio', 'benchmark', 'hedge'],
         index=[
             'total_return', 'maxdd', 'volatility', 'annual_return',
             'sharp', 'win_rate'
         ])
     return df
Beispiel #8
0
    def WinRate(self, period='monthly'):

        return stats.win_rate(self.Ret, self.BenchmarkRet, period=period)