问题描述
请问get_backtest()中get_result中基准收益是纯指数收益还是包括交易成本么?
解决方案
在 JoinQuant(聚宽)量化平台中,通过 get_backtest() 获取的 get_results() 数据里,基准收益(benchmark_returns)是纯指数收益,不包含任何交易成本(如手续费、印花税、滑点等)。
详细解析
-
基准收益的定义:
基准(Benchmark)在量化回测中通常代表一个“买入并持有(Buy and Hold)”的被动投资组合。在聚宽平台中,默认基准是沪深300指数(000300.XSHG)。benchmark_returns是直接根据该基准标的每日的收盘价格变动计算得出的纯收益率。 -
为什么不包含交易成本?
基准的主要作用是作为衡量策略表现的“标尺”,用于计算策略的超额收益(Alpha)。为了客观反映市场整体的自然表现,基准收益被设定为理想状态下的纯收益。如果强行加入交易成本,反而会使基准失真,不利于评估策略的真实选股或择时能力。 -
策略收益与基准收益的对比:
- 策略收益(
returns):包含了您在策略中设置的所有交易成本(通过set_order_cost设置的佣金、印花税)以及滑点(通过set_slippage设置)。 - 基准收益(
benchmark_returns):不包含任何交易成本和滑点。
- 策略收益(
代码示例回顾
当您在研究环境中使用 get_backtest() 时,获取的数据结构如下:
from jqdata import *
# 获取回测对象
gt = get_backtest("您的回测ID")
# 获取收益曲线数据
results = gt.get_results()
# 打印第一天的收益数据
if results:
print("策略收益:", results[0]['returns'])
print("基准收益:", results[0]['benchmark_returns']) # 这里的数值是纯指数涨跌幅
总结:在进行归因分析或评估策略表现时,请记住您的策略是在“负重(扣除交易成本)”与“轻装(无交易成本)”的基准进行赛跑。如果您的策略收益能稳定跑赢基准收益,说明您的策略具有真正的超额获利能力。