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()[原始碼]

直接快速計算返回回測的波動率結果