示例#1
0
    def summary(self):
        """在最后输出简要回测结果"""
        d = {}

        balance = self.env.recorder.balance.dataframe()
        daily_basis_balance = balance.resample('D').last().dropna()
        initial_balance = balance.values[0][0]
        end_balance = balance.values[-1][0]
        total_return = end_balance / initial_balance - 1
        max_drawdown = get_max_drawdown(balance)
        max_drawdown_date = get_max_drawdown_date(balance)
        max_duration_in_drawdown = get_max_duration_in_drawdown(
            daily_basis_balance)
        sharpe_ratio = get_sharpe_ratio(daily_basis_balance)

        d["Fromdate"] = self.env.fromdate
        d["Todate"] = self.env.todate
        d["Initial_Value"] = f'${initial_balance:.2f}'
        d["Final_Value"] = f'${end_balance:.2f}'
        d["Total_Return"] = f'{total_return*100:.3f}%'
        d["Max_Drawdown"] = f'{max_drawdown*100:.3f}%'
        d["Max_Duration"] = f'{max_duration_in_drawdown} days'
        d["Max_Drawdown_Date"] = f'{max_drawdown_date}'
        d["Sharpe_Ratio"] = f'{sharpe_ratio:.2f}'
        dict_to_table(d)
示例#2
0
def check_setting(dict_data, name, check_only=False):
    if dict_data == {}:
        print('>' * 10, f'Attention!! There is No {name}!!!', '<' * 10)
    else:
        if not check_only:
            counter = count(1)
            dict_to_table(
                {f'{name}_{next(counter)}': key
                 for key in dict_data})
示例#3
0
 def summary(self):
     """在最后输出简要回测结果"""
     total = pd.DataFrame(list(self.env.recorder.balance))
     total.set_index("date", inplace=True)
     pct_returns = total.pct_change()
     total = total / self.env.recorder.initial_cash
     max_drawdown, duration = create_drawdowns(total["value"])
     initial_cash = self.env.recorder.initial_cash
     final_value = self.env.recorder.balance.latest()
     sharpe_ratio = create_sharpe_ratio(pct_returns, len(pct_returns))
     d = {}
     d["Final_Value"] = f'${final_value:.2f}'
     d["Total_return"] = f'{(final_value/initial_cash-1)*100:.5f}%'
     d["Max_Drawdown"], d["Duration"] = f'{max_drawdown*100:.5f}%', duration
     d["Sharpe_Ratio"] = f'{sharpe_ratio:.5f}'
     print(dict_to_table(d))
示例#4
0
 def summary2():
     analysis = AmazingAnalysis()
     dict_to_table(analysis.general_summary())
     print(analysis.detail_summary())