修复回测bug
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user