FAQ > 金融建模 > 数据提取 > 行情数据

Q:如何提取股票集合竞价的数据    

  • 集合竞价的数据与交易明细都是由交易所盘口推出,数据与连续竞价的数据收录在一起,即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;
    //返回结果(部分结果展示):