修复回测bug

This commit is contained in:
2025-06-23 23:49:43 +08:00
parent afed83f96f
commit 4521939b95
5 changed files with 9935 additions and 212 deletions

View File

@@ -1,5 +1,5 @@
# src/backtest_engine.py
from datetime import datetime
from typing import Type, Dict, Any, List, Optional
import pandas as pd
@@ -22,7 +22,10 @@ class BacktestEngine:
initial_capital: float = 100000.0,
slippage_rate: float = 0.0001,
commission_rate: float = 0.0002,
roll_over_mode: bool = False): # 新增换月模式参数
roll_over_mode: bool = False,
start_time: Optional[datetime] = None, # 新增开始时间
end_time: Optional[datetime] = None # 新增结束时间
): # 新增换月模式参数
"""
初始化回测引擎。
@@ -63,6 +66,10 @@ class BacktestEngine:
self._last_processed_bar_symbol: Optional[str] = None # 记录上一根 K 线的 symbol
self.is_rollover_bar: bool = False # 标记当前 K 线是否为换月 K 线(禁止开仓)
# 新增时间过滤属性
self.start_time = start_time
self.end_time = end_time
print("\n--- 回测引擎初始化完成 ---")
print(f" 策略: {strategy_class.__name__}")
print(f" 初始资金: {initial_capital:.2f}")
@@ -85,6 +92,14 @@ class BacktestEngine:
if current_bar is None:
break # 没有更多数据,回测结束
if self.start_time and current_bar.datetime < self.start_time:
continue
# 如果设置了结束时间且当前K线在结束时间之后则终止回测
if self.end_time and current_bar.datetime >= self.end_time:
print(f"到达结束时间 {self.end_time},回测终止。")
break
# --- 换月逻辑判断和处理 (在处理 current_bar 之前进行) ---
# 1. 重置 is_rollover_bar 标记
self.is_rollover_bar = False