求问!多数据源情况下集合竞价,哪里出问题了呢?

程序1: //------------------------------------------------------------------------ // 简称: gp1 // 名称: // 类别: 策略应用 // 类型: 用户应用 // 输出: Void //------------------------------------------------------------------------ Params // 参数定义 Numeric numdate(1); Vars // 变量定义 Global Numeric i; Global Numeric k; Global Numeric n; Global array<string> mysymbol; Global Numeric CurrentBarIndex; Global Array<Numeric> prevClose; // 昨日收盘价 Global Array<Numeric> currentfx; Events // 初始化事件函数 OnInit() { mysymbol=["002129.SZSE", "600732.SSE", "300438.SZSE","688256.SSE"]; //mysymbol=["SR605.CZCE","OI605.CZCE", "FG605.CZCE", "MA601.CZCE"]; Numeric date1=PreTradingDay(mysymbol[0], CurrentDate(), numdate); for i =0 to GetArraySize(mysymbol)-1 { SubscribeBar(mysymbol[i],"1m",date1); } for i =0 to GetArraySize(mysymbol)-1 { SubscribeBar(mysymbol[i],"1d",date1); } n=GetArraySize(mysymbol); } OnBaropen(ArrayRef<Integer> indexs) { CurrentBarIndex = data[0].BarsSinceToday(); } OnBar(ArrayRef<Integer> indexs) { if (Date>=CurrentDate) { for k = 0 to GetArraysize(indexs) - 1 { i = indexs[k]; if (i < n) { print(DateTimeToString(date + CurrentTime) + "图层" + text(i) + data[i].SymbolName + "3正常运行" + text(data[i].close)+"bar时间"+TimeToString(data[i].time)); } } } } 程序2: 只对订阅的股票进行了改动,其他位置未变: mysymbol=["399317.SZSE","002129.SZSE", "600732.SSE", "300438.SZSE","688256.SSE"]; 程序1输出:程序2输出:可以发现,指数第一个tick到来时间比较晚,9:25:13左右,股票第一个tick在9:25:07左右。那问题是,为什么程序2只是增加订阅了1个指数,股票数据怎么在集合竞价不输出了呢?是程序语法的问题吗?如果图层0的数据没来,即使图层1的数据来的时候,所有的onbar内容不涉及图层0的部分也都不工作了?

Numeric date1=PreTradingDay(mysymbol[0], CurrentDate(), numdate);是不是这句问题这个函数对指数是否无效?

回复:从订阅的角度来讲,都订阅成功了,并且onInit只执行一次对不对,这样的话应该对后面没有影响,对吧?你上次说的对齐的原因和老师说的多图层运行机制的原因,我大概明白了。应该是这方面的原因。但是还有一些关于指数的细节还没有搞明白

回复:好吧,明天我再试试是不是你现在说的这个原因

回复:if (Date>=CurrentDate) {}目前从逻辑上来看,上面这条语句隐含了data0.Date>=CurrentDate的条件,所以,data0第一个tick数据没来的时候,if后面的程序没有执行。

回复:data0.Date>=CurrentDate这句是有问题指数的tick会晚3秒个股是正常的传输所以被屏蔽了

回复:https://bbs.tbquant.net/thread/20250715134720931774 我之前策略也用到指数所以测试过延时是3秒钟所以还重新做了算法修正如果你需要用到指数且必然会订阅个股那就用Data1的Date作为判断

回复:还有个问题一并提醒你一下第一笔tick未必是集合竞价数据有时候是标志是历史数据所以要做个判断并抛弃掉

回复:你说的“第一笔tick未必是集合竞价数据,有时候是标志是历史数据”是下面这种情况吗?“如果data0第一个tick来的时候,data1第一个tick还没来,此刻应用data1.close是引用的历史数据。”

回复:好的!看起来应该是破案了!

回复:你说的“第一笔tick未必是集合竞价数据,有时候是标志是历史数据”是下面这种情况吗?“如果data0第一个tick来的时候,data1第一个tick还没来,此刻引用data1.close是引用的历史数据。

回复:不完全是这个意思你说的,是我上个帖子告诉你的数据对齐范畴有时候因为个股基础数据有很多集合竞价数据传过来之前会有历史补充数据传过来触发onbar需要加入诸如此类的校验if(Data[x].QuoteStatus != Enum_QuoteStatus_Supplement && Data[x].QuoteStatus != Enum_QuoteStatus_History)

9:25:13 有时间就证明有集合竞价tick至于你后面说的一堆东西,先理解多图层的公式运行机制

回复:好的,多谢指点!

回复:https://tbq3.tbquant.net/helper?product_id=991&keyword=440&content_id=2594&type=article#%E5%8D%95%E6%95%B0%E6%8D%AE%E6%BA%90%E6%83%85%E5%BD%A2