11. Backtester 策略回测器

Backtester类用于对operator对象进行回测操作。

本类的属性包括回测计算中所需的所有参数,包括回测过程中产生的结果数据,这些结果数据以ndarray的形式 在对象的生命周期内长期保存,并可以反复刷新。

这个类只有在operator对象被创建之后才能被实例化,因为Backtester类需要依赖operator对象来生成交易 信号和执行交易。典型用法如下:

operator = Operator( ... )  # 创建Operator对象
backtested = Operator.backtest( signal_count=100, share_count=10, **kwargs)  # 创建Backtester对象
# get backtest raw results:
backtested.cash_investment_array
backtested.own_cashes
...
# get backtest results as DataFrame:
result_df = backtested.value_records()
trade_log_df = backtested.trade_logs()
trade_summary_df = backtested.trade_summary()
class qteasy.backtest.Backtester(op: Operator, shares: list[str], cash_plan: CashPlan, cash_investment_array: ndarray, cash_inflation_array: ndarray, delivery_day_indicators: ndarray, cost_params: ndarray, signal_parsing_params: dict, trading_moq_params: dict, trading_delivery_params: dict, trade_price_data: ndarray, benchmark_data: Optional[Union[DataFrame, Series]] = None, evaluate_price_data: Optional[DataFrame] = None, enable_tracing: bool = False, logger: Optional[Logger] = None)[源代码]

Backtester类用于对operator对象进行回测操作。 本类的属性包括回测计算中所需的所有参数,包括回测过程中产生的结果数据,这些结果数据以ndarray的形式 在对象的生命周期内长期保存,并可以反复刷新。

这个类只有在operator对象被创建之后才能被实例化,因为Backtester类需要依赖operator对象来生成交易 信号和执行交易。典型用法如下:

operator = Operator( ... )  # 创建Operator对象
backtested = Operator.backtest( signal_count=100, share_count=10, **kwargs)  # 创建Backtester对象
# get backtest raw results:
backtested.cash_investment_array
backtested.own_cashes
...
# get backtest results as DataFrame:
result_df = backtested.value_records()
trade_log_df = backtested.trade_logs()
trade_summary_df = backtested.trade_summary()
op

交易操作对象,包含交易信号生成和交易执行的逻辑

Type:

Operator

clear_backtest_buffers()[源代码]

清除回测结果缓存数据,将回测结果数据重置为空数组,以便重新进行回测计算

返回类型:

None

evaluate_result(indicators: str) dict[源代码]

生成交易结果的评价报告,保存在self.evaluate_result属性中

参数:

indicators (str) – 回测结果评价指标,详情参见qteasy.evaluate.evaluate()函数

generate_trade_logs(save_to_file_path: Optional[str] = None) DataFrame[源代码]

根据回测结果生成交易日志,交易日志是一份完整的交易记录文件,包含每一个交易期间的下列信息。

每一个交易期间包含 8 行数据,分别为:

  • 0, trade signal:每一支股票的当期交易信号

  • 1, price:每一支股票的当期交易价格

  • 2, traded amounts:每一支股票的当期交易数量,如果没有交易则为 0

  • 3, cash changed:每一支股票的当期现金变动金额,买入为负数,卖出为正数

  • 4, trade cost:每一支股票的当期交易费用

  • 5, own amounts:每一支股票的当期末持有数量

  • 6, available amounts:每一支股票的当期末可用数量

  • 7, summary:当期每一支股票的持仓价值,同时包含汇总数据(当期末持有现金、可用现金、总资产价值)

以上信息以 DataFrame 形式保存,行索引为多级索引,第一/二层为时间/策略组索引,第三层为上述 8 个数据类别。 交易日志文件可以被保存为 csv 格式,文件名为 trade_log.csv

参数:

save_to_file_path (str, optional) – 如果提供了文件路径,则将交易日志保存为CSV文件,默认值为None

返回:

trade_log – 交易模拟结果数据

返回类型:

pd.DataFrame

generate_trade_summary(share_names: Optional[list[str]] = None, save_to_file_path: Optional[str] = None) DataFrame[源代码]

生成 trade summary 交易摘要表 (一个更加紧凑的交易汇总表,包含每次交易的关键信息, 以一种更加易于人类阅读的方式呈现,并过滤掉无交易的记录),函数的输入trade_log_df是函数 generate_trade_logs()的返回值。

参数:
  • share_names (list[str], optional) – 交易标的名称列表, 如果为None,则使用“N/A”作为名称

  • save_to_file_path (str, optional) – 如果提供了文件路径,则将交易摘要表保存为CSV文件,默认值为None,不保存文件

plot_result(plot_title: str, show_positions: bool, buy_sell_markers: bool) None[源代码]

以图表形式生成交易结果

参数:
  • plot_title (str) – 图表的标题名称

  • show_positions (bool) – 是否显示持股仓位区间信息,如果设置为True,则在收益率曲线图上 以红色/绿色条带显示区间的持仓类型(绿色表示持多仓,红色表示持 空仓)颜色越深持仓比例越高

  • buy_sell_markers (bool) – 是否在收益率曲线图上显示买卖点,如果设置为True,则在收益率曲 线图上以红绿色小箭头标示出买卖点

返回类型:

None

report_result(trade_log: Optional[str] = None, trade_summary: Optional[str] = None) str[源代码]

生成回测结果的明细报告,报告为纯文本格式,可以使用print命令打印

参数:
  • trade_log (str, optional) – 交易日志文件的存储路径,默认值为None,如果给出该路径,则在报告中打印交易日志的存储路径

  • trade_summary (str, optional) – 交易汇总记录文件的存储路径,默认值为None,如果给出,则在报告中打印交易汇总记录的存储路径

返回:

report_str – 以打印格式排版的回测结果报告

返回类型:

str

run() Backtester[源代码]

执行回测计算,生成回测结果数据并存入对象属性中

save_complete_values(save_to_file_path: Optional[str] = None) Optional[str][源代码]

将 complete_values 保存为 CSV 文件(当 trade_log=True 时由 qt_operator 调用)

参数:

save_to_file_path (str, optional) – 保存路径,若为 None 则不写入

返回:

成功时返回保存路径,否则返回 None

返回类型:

str or None

trace_result_df() Optional[DataFrame][源代码]

根据回测结果生成交易过程记录,输出内容为DataFrame格式

trace 行与 op_signal_index 的对齐由 Operator 在写入时保证(update_trace_step 使用 全局 signal 行号),此处仅按策略 concat 后设置 index 为 op_signal_index。

返回:

trade_trace – 交易模拟过程数据

返回类型:

pd.DataFrame

trade_result_df() DataFrame[源代码]

根据回测结果生成资产价值记录,输出内容为DataFrame格式

返回:

value_history – 交易模拟结果数据

返回类型:

pd.DataFrame

trade_result_final_value()[源代码]

直接快速计算返回回测的终值结果

trade_result_max_drawdown()[源代码]

直接快速计算返回回测的最大回撤结果

trade_result_volatility()[源代码]

直接快速计算返回回测的波动率结果