正常来说,应该是按交易日计算。
但是我看代码中,计算每日盈亏时,有一个DailyResult类,这个就是用于计算每日盈亏等相关统计的。
而这个类的对象创建时,是根据K线的日期进行分组的。
def new_bar(self, bar: BarData) -> None:
""""""
self.bar = bar
self.datetime = bar.datetime
self.cross_limit_order()
self.cross_stop_order()
self.strategy.on_bar(bar)
self.update_daily_close(bar.close_price)
def update_daily_close(self, price: float) -> None:
""""""
d: date = self.datetime.date()
daily_result: Optional[DailyResult] = self.daily_results.get(d, None)
if daily_result:
daily_result.close_price = price
else:
self.daily_results[d] = DailyResult(d, price)
回测时,每回放一根K线,就调一次new_bar方法,然后就将K线的datetime更新到self.datetime。
这样,update_daily_close方法执行的时候,就是根据K线时间取日期当做Key,对应value是DailyResult对象,一天一个,后面就基于这个计算的。
但是这个K线的时间,取到的都是自然时间吧,这样一来,不就是按自然日计算每日盈亏了吗?
是我理解的有问题,还是本来就是这样来计算的?