股票策略回测的一些统计工作怎么做?


(夹心巧克力^_^) #1

最近老板逼着我们开发策略,整天搬砖,也没有时间看详细文档。我有个疑问,股票策略回测完毕以后,会输出策略结果。但是我想做一些统计工作,比如统计持仓时间排名前十的股票有哪些,收益贡献排名前十的股票有哪些,每日持仓权重前十的股票有哪些,等等。不知道怎么做,大神快来指导一下吧。


(华尔街的猫) #2

您好。回测完成以后,持仓的数据可以通过策略测试回报来查看。一句代码搞定:

detail = m.raw_perf.read_df()

截取部分表格入下:

通过这个表中单元格的内容,就可以查看。
持仓时间、收益贡献等数据可以通过策略结果统计的可视化图形来查看。一句代码搞定:

statistics = m.pyfolio_full_tear_sheet()

输出的内容特别丰富,部分截图入下:


(cwxuzhou) #3

请问为何我的结果是这样的?-

Exception Traceback (most recent call last)
in ()
126 )
127
--> 128 statistics = M.pyfolio_full_tear_sheet()
129 detail = M.read_raw_perf.v1(1)

Exception: version is required, e.g. M.pyfolio_full_tear_sheet.v1(1, 2, 3)


(小Q) #4

@cwxuzhou,你好!这里原因是,M.pyfolio_full_tear_sheet()中的M有问题,M被当做平台内置的Module(模块)来处理了,应该将M修改为你回测接口函数的那个对象。
比如:
m = M.backtest.v5(
instruments=m7.instruments,
start_date=m7.start_date,
end_date=m7.end_date,
initialize=initialize,
handle_data=handle_data_2,
before_trading_start=before_trading_start,
order_price_field_buy='open',
order_price_field_sell='close',
capital_base=float("1.0e6")*2,
benchmark='000300.SHA',
options={'ranker_prediction': m7.predictions, 'hold_days': conf.hold_days/2, 'weights': conf.stock_weights, 'max_cash_per_instrument': conf.max_cash_per_instrument}
)
这里就对应为:m.pyfolio_full_tear_sheet()


(cwxuzhou) #5

理解了 ,非常感谢


(solarhe2006) #6

statistics = m.pyfolio_full_tear_sheet()
能基于风险平价给个详细的代码吗?


(小Q) #7

你好,statistics = m.pyfolio_full_tear_sheet()是事后对策略进行一些分析,比如月度收益率、年度收益率、月度收益率分布、盈利最大前10只股票、亏损最大前10只股票等。

我们所理解的风险平价理论是资产配置的一种方式,比如确定一个组合中每只股票的权重。不知道我们理解的风险平价(risk parity)和你所理解的风险平价是否是同一个意思?