求问!多数据源情况下集合竞价,哪里出问题了呢?
程序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的部分也都不工作了?

求大神帮忙看看哪里出问题了
求帮看下,信号消失是哪里出问题了
套利策略指标中,显示错误,代码问题在哪里了呢?
集合竞价和小节休息,我该怎么写出来。求
多图层数据源对齐
求问TB多周期运行的底层机制是什么,第一次测了下感觉有未来函数
请问 TBQuant如何在没有手工添加数据源的情况下执行程序?
请问高手哪里出问题了
Log出来的那容去哪里看呢?
不同数据源的数据时间起点不同,在多个图层存在的情况下如何判断某个时刻有哪些数据源有数据。
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