集合竞价的数据与交易明细都是由交易所盘口推出,数据与连续竞价的数据收录在一起,即Tradetable表中,根据实际交易时间进行区分。
集合竞价报价数据:
交易明细中连续竞价开盘前的明细数据即为集合竞价,通过实际交易时间区间即可获取。
集合竞价数据包括:买一价、卖一价,买一量、卖一量,买二量与卖二量等,在撮合成交之前当前成交价与成交量都表现为0。
集合竞价成交数据:
集合竞价的撮合数据有一条,会在集合竞价后几秒或十几秒,在连续竞价之前公布。用户可以根据时间判断提取。
数据一般表现为,有当天的第一个不为0的成交价,不为0的成交量。
比如取股票的集合竞价数据,股票的集合竞价时间为09:15:00-09:25:00,集合竞价数据会在09:25:00之后 09:30:00之前发布,一般是在09:25:00之后的几秒。所以取数据的时候,可以用09:25:00和09:29:40这两个时间作为判断依据,为准确排除掉无意义的数据,可以用是否有成交量来进行筛选。
取数范例:
取数范例1:提取万科A股在2022-05-23日的集合竞价报价的数据
stockid:='SZ000002';
vEndt:=20220523T;
bt:=9/24; //09:00:00
et:=strtotime("09:29:40"); //09:29:40
return select ['StockID'],['StockName'],datetimetostr(['date']) as 'date',
['price'],['vol'],['buy1'],['sale1'],['bc1'],['bc2'],['sc1'],['sc2']
from tradetable datekey vEndt+bt to vEndt+et of stockid end;
//返回结果:
取数范例2:多个票在区间内每日的集合竞价的数据
//注:数据量也比较多,建议用户在合理的范围内提取,大量的可以分批提取,本案例中50个票,6个交易日的数据有2.8+万条记录
stocks:=getbk('上证50');//股票组合
begt:=20220515T;//开始时间
endt:=20220523T;//截止时间
setsysparam(pn_cycle(),cy_day());
Tarr:=MarketTradeDayQk(begt,endt);//日线交易日序列
//--交易明细的时间区间
bt:=9/24; //09:00:00
et:=strtotime("09:29:40"); //09:29:40
ret:=array();//数据存储
//按日提取,避免对全盘交易明细的时间进行判断,提高效率
for i:=0 to length(Tarr)-1 do
begin
vEndt:=Tarr[i];
ret&=select ['StockID'],['StockName'],
datetimetostr(['date']) as 'date',
['price'],['vol'],['buy1'],['sale1'],
['bc1'],['bc2'],['sc1'],['sc2']
from tradetable datekey vEndt+bt to vEndt+et
of stocks end;
end
return ret;
取数范例3:提取万科A股在2019-11-13日的集合竞价成交数据
stockid:='SZ000002';
vEndt:=20191113T;
bt:=9/24+24/24/60;
et:=strtotime("09:29:40");
return select ['StockID'],['StockName'],
datetimetostr(['date']) as 'Date',['price'],['vol'],['amount']
from tradetable datekey vEndt+bt to vEndt+et of stockid
where ['vol']>0 end;
//返回结果:
取数范例4:提取全市场在2019-11-11日到2019-11-13日的集合竞价成交数据
r:=array();
begt:=20191111T;
endt:=20191113T;
stocks:=getbk('深证A股;上证A股;创业板;科创板;终止上市;暂停上市');//中小企业板被合并入深证A股
bt:=9/24+24/24/60;
et:=strtotime("09:29:40");
t:=MarketTradeDayQk(BegT,EndT);
for i:=0 to length(t)-1 do
begin
vEndt:=t[i];
r&=select ['StockID'],['StockName'],datetimetostr(['date']) as 'Date',['price'],['vol'],['amount']
from tradetable datekey vEndt+bt to vEndt+et of stocks
where ['vol']>0 end;
end
return r;
//返回结果(部分结果展示):