跑回测没跑几下,就提示错误了,
2025-12-15 17:37:01.102020 开始加载历史数据
2025-12-15 17:37:01.102312 加载进度:# [0%]
找不到数据库驱动vnpy_vnpy,使用默认的SQLite数据库
2025-12-15 17:37:01.261603 加载进度:# [10%]
2025-12-15 17:37:01.417251 加载进度:## [20%]
2025-12-15 17:37:01.545205 加载进度:### [30%]
2025-12-15 17:37:01.665197 加载进度:#### [40%]
2025-12-15 17:37:01.801579 加载进度:##### [50%]
2025-12-15 17:37:01.949051 加载进度:###### [60%]
2025-12-15 17:37:02.086661 加载进度:####### [70%]
2025-12-15 17:37:02.247213 加载进度:######## [80%]
2025-12-15 17:37:02.375154 加载进度:######### [90%]
2025-12-15 17:37:02.515111 加载进度:########## [100%]
2025-12-15 17:37:02.528006 历史数据加载完成,数据量:75420
2025-12-15 17:37:02.528461 策略初始化完成
2025-12-15 17:37:02.528481 开始回放历史数据
2025-12-15 17:37:02.571451 回放进度:= [0%]
2025-12-15 17:37:02.615695 回放进度:== [10%]
2025-12-15 17:37:02.659968 回放进度:=== [20%]
2025-12-15 17:37:02.664531 触发异常,回测终止
2025-12-15 17:37:02.665798 Traceback (most recent call last):
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\backtesting.py", line 239, in run_backtesting
func(data)
~~~~^^^^^^
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\backtesting.py", line 623, in new_bar
self.strategy.on_bar(bar)
~~~~~~~~~~~~~~~~~~~~^^^^^
File "C:\Users\Administrator\strategies\Spvc3_Strategy.py", line 127, in on_bar
self.check_order_timeout()
~~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\Users\Administrator\strategies\Spvc3_Strategy.py", line 314, in check_order_timeout
if (current_time - order_time).total_seconds() >= self.order_timeout * 60:
~~~^~~~~~
TypeError: can't subtract offset-naive and offset-aware datetimes
2025-12-15 17:37:02.665910 开始计算逐日盯市盈亏
2025-12-15 17:37:02.665922 回测成交记录为空
2025-12-15 17:37:02.667027 逐日盯市盈亏计算完成
2025-12-15 17:37:02.667095 开始计算策略统计指标
2025-12-15 17:37:02.670149 ------------------------------
2025-12-15 17:37:02.670172 首个交易日: 2025-01-15
2025-12-15 17:37:02.670181 最后交易日: 2025-05-06
2025-12-15 17:37:02.670187 总交易日: 70
2025-12-15 17:37:02.670192 盈利交易日: 0
2025-12-15 17:37:02.670197 亏损交易日: 0
2025-12-15 17:37:02.670205 起始资金: 1,000,000.00
2025-12-15 17:37:02.670213 结束资金: 1,000,000.00
2025-12-15 17:37:02.670219 总收益率: 0.00%
2025-12-15 17:37:02.670225 年化收益: 0.00%
2025-12-15 17:37:02.670232 最大回撤: 0.00
2025-12-15 17:37:02.670238 百分比最大回撤: 0.00%
2025-12-15 17:37:02.670243 最大回撤天数: 0
2025-12-15 17:37:02.670248 总盈亏: 0.00
2025-12-15 17:37:02.670254 总手续费: 0.00
2025-12-15 17:37:02.670260 总滑点: 0.00
2025-12-15 17:37:02.670265 总成交金额: 0.00
2025-12-15 17:37:02.670270 总成交笔数: 0
2025-12-15 17:37:02.670275 日均盈亏: 0.00
2025-12-15 17:37:02.670281 日均手续费: 0.00
2025-12-15 17:37:02.670286 日均滑点: 0.00
2025-12-15 17:37:02.670296 日均成交金额: 0.00
2025-12-15 17:37:02.670302 日均成交笔数: 0.0
2025-12-15 17:37:02.670308 日均收益率: 0.00%
2025-12-15 17:37:02.670313 收益标准差: 0.00%
2025-12-15 17:37:02.670318 Sharpe Ratio: 0.00
2025-12-15 17:37:02.670323 EWM Sharpe: 0.00
2025-12-15 17:37:02.670329 收益回撤比: 0.00
2025-12-15 17:37:02.670477 策略统计指标计算完成
然后我跑去问DeeSeek,给我的建议是这样的,但是我感觉不太对劲,找社区文档没找到相关对时区处理的文档....求大神指点。。
def on_5min_bar(self, bar: BarData):
"""5分钟K线更新回调"""
# 更新ArrayManager
self.am.update_bar(bar)
if not self.am.inited:
return
# 检查并处理委托超时(传入当前K线时间)
self.check_order_timeout(bar.datetime) # 添加参数
# ... 其余代码保持不变 ...
def check_order_timeout(self, current_time: datetime):
"""检查委托超时并撤单"""
# 注意:现在current_time是参数,不是datetime.now()
timeout_orders = []
for orderid, order_time in self.order_time_dict.items():
if (current_time - order_time).total_seconds() >= self.order_timeout * 60:
timeout_orders.append(orderid)
# 撤销超时订单
for orderid in timeout_orders:
self.cancel_order(orderid)
del self.order_time_dict[orderid]
if orderid in self.active_orders:
self.active_orders.remove(orderid)