全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
多周期在OnBarClose内的执行问题
2023-03-27 11:16

根据2023年2月2日腾讯课堂“模型编写实战演练”第一个问题的回答,下述小程序在大周期的onbarclose内执行错误,具体表现为:

  1. 交易时间内偶尔执行一次大周期的onbarclose,不能控制。
  2. 在历史Bar上,例如刷新后,执行正确

请问这是个什么情况呢?


Params

String symb(SA305.CZCE);

Integer Length(7);

Vars

Global Integer Data_0;

Global Integer Data_N;

Natural Series<Numeric> MA;

Natural Series<Numeric> C_MA;

Events

OnInit()

{

Data_0 = SubscribeBar(symb, 3m,DateTimeAdd(CurrentDate(),-1*60*60)); // 大周期图层编号

Data_N = SubscribeBar(symb,20s,Data[Data_0].BeginDateTime); // 小周期图层编号

}

OnBar(ArrayRef<Integer> indexs)

{

Range[Data_0:Data_0]

{

MA = Average(Close,Length);        // 用来校验

Commentary(---  OnBar  ---);

Commentary(    MA= +Text(MA));

PlotString(BarNr,Text(CurrentBar),Low,Yellow);

PlotAuto(MA,MA,0,Green,Enum_Cross);

}

}

OnBarClose(ArrayRef<Integer> indexs)

{

If(ArrayFind(indexs,Data_0))

{

Range[Data_0:Data_0]

{

C_MA = Average(Close,Length);

Commentary(---  OnBarClose  ---);

Commentary(C_MA= +Text(C_MA));

PlotAuto(C_MA,C_MA,0,Yellow,Enum_Dot,Enum_3Pix);

If(BarStatus==2)

{

Print(----- CurrentBar= +Text(CurrentBar));

Print(         C_MA= +Text(C_MA)+ / MA= +Text(MA));

}

}

}

}



data-href=

TB_Futures

请老师复现一下

OnBarClose到底是什么一个执行机制?

2023-03-28 00:45
kyover

偶尔执行一次是什么意思 这个没看出来哪里有问题

2023-03-28 10:53
TB_Futures

程序在OnBar和OnBarClose里分别计算同一参数的均线,两个均线值在历史Bar上是相等的,但是在实时Bar上的结果不同。

实时Bar上onBarClose里的计算结果print出来经常是上一根onBarClose的结果,并且onBarClose里的Commentary也没有显示,那就表示OnBarClose里没有执行。但偶尔又会执行一次,使结果和OnBar里的计算一致。

不知我表述清楚没有,还没有的话请加载上面的程序跑一下,谢谢!

2023-03-28 11:46
kyover

onbarclose的触发时机本来就应该是下一根bar的onbaropen之前....

2023-03-28 16:33
TB_Futures

首先,和OnBarOpen没有关系。

上面的程序在每根大周期Bar上的OnBar和OnBarClose里分别用同一参数计算简单移动平均值,记为MA和C_MA。我的理解是,OnBar里计算的终值应该和OnBarClose里计算的值相等,也就是说 C_MA==MA。


但是结果确显示,在OnBarClose里打印出来的这两个值不相等,具体如下图所示。红色框内是在OnBarClose里的计算结果,黄色框内是OnBar的计算结果。经过若干不相同的结果后,绿色框内又显示两者相同了。


知道老师们挺忙的,我这儿也提供了完整程序和图片说明,行数也不多。请劳驾把上述程序加载,在交易时间执行一下,花不了几分钟的时间。请不要先入为主,理解一下我的意思。

data-href=

2023-03-28 23:35
kyover
@TB_Futures

代码过不了编译,还得手动修改

下次直接导出工作区文件作为附件上传,记得附带策略公式,尽量开源

2023-03-29 10:02
kyover

修改完代码以后复现你说的内容了,转给研发人员看看什么问题

2023-03-29 10:47
bert718

非常感谢您提供示例,我们才得以快速的定位问题。

1.多数据源对齐机制时,当对不齐时,落后数据源的序列变量和信号会被冻结。

如白盘合约,与有夜盘合约对齐时,夜盘行情来时,白盘的合约的数据源的序列变化和信号会被冻结。

2.盘中行情也有先后顺序,也会触发对不齐的情况,我们下个版本会完善这个问题。

3.最近会更新版本,请留意升级

2023-03-29 17:42
rsdy184****1520
@bert718

请问老师,我这个帖子里遇到的问题是否也是您说的情况,是否近期升级后可以解决? https://www.tbquant.net/forumDetail?cur=tbquan&id=10245&cid=all 

2023-04-01 00:22
您未登录,请先 登录注册 后发表评论
顶部