历史图标上最后一根Bar的OnBarClose不触发且QuoteDataExist值不对

在交易时段外的图标上加载运行如下代码,预期运行到最后一根Bar的OnBarClose会被触发,且QuoteDataExist在各个Bar上应该都是False (因为是交易时段外,没有行情数据)Events OnInit() { PrintClear(); } OnBarOpen(ArrayRef<Integer> indexes) { PlotAuto("BarIndex",Text(CurrentBar),Low); Print("--------Bar #" + Text(CurrentBar) +"---------"); Print("OnBarOpen - " + Text(CurrentBar)); Print(" * BarStatus: " + Text(BarStatus)); Print(" * QuoteStatus:" + Text(QuoteStatus())); Bool ret = QuoteDataExist(); Print(" * QuoteDataExist:" + IIFString(ret, "True", "False")); } OnBarClose(ArrayRef<Integer> indexes) { Print("OnBarClose - " + Text(CurrentBar)); Print(" * BarStatus: " + Text(BarStatus)); Print(" * QuoteStatus:" + Text(QuoteStatus())); Bool ret = QuoteDataExist(); Print(" * QuoteDataExist:" + IIFString(ret, "True", "False")); }只加载了4根Bar, 实际运行结果如下:请问:#1 为什么最后一个Bar的OnBarClose代码没执行?#2 为什么最后一个Bar的QuoteDataExist值为True?

熬夜伤身体。

>#1 为什么最后一个Bar的OnBarClose代码没执行?因为你对【OnBarClose】的驱动时机的机制还没有掌握,简单来说结论:【OnBarClose】的驱动信号是【OnBarOpen】但是又先于【OnBarOpen】被执行。原因和原理可以看以下视频:https://www.bilibili.com/video/BV18G411f7YF/?spm_id_from=333.1387.collection.video_card.clickhttps://video.tbquant.net/video?id=video398>#2 为什么最后一个Bar的QuoteDataExist值为True?官网的原文文档:【如果当前数据源订阅实时行情,并且是最后一根bar,则行情数据有效。】原文只要求【订阅】实时行情,并没要求是【实时Bar】,并且【QuoteDataExist返回为True的Bar】的确是【最后一根Bar】,没毛病。按在官网文档的语义描述与测试结果是一致的。

回复:#1 快速拖了一下,明白您说的“【OnBarClose】的驱动信号是【OnBarOpen】但是又先于【OnBarOpen】被执行” 的含义了,睡醒了仔细看下#2 把策略单元的【范围】改成了时间起始和结束的时间段,果然为False了,之前看文档还是不够仔细,臆断了再次感谢老师的指点