VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 5
声望: 0

正常来说,应该是按交易日计算。
但是我看代码中,计算每日盈亏时,有一个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线的时间,取到的都是自然时间吧,这样一来,不就是按自然日计算每日盈亏了吗?

是我理解的有问题,还是本来就是这样来计算的?

LLM学员
avatar
加入于:
帖子: 1538
声望: 111

回测引擎是按照自然日计算的,主要为了兼容各个市场(证券、期货、期权、外盘等),如果仅针对国内期货,那么可以自己修改为基于交易日实现

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】