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

Q:有夜盘数据时,如何确定当前时点的数据属于哪个交易日?    

  • A:由于交易时间段的不一致,要通用各大证券类型,可根据一般白盘截止时间进行划分推算。
    比如,一般国内证券会在下午4点前收盘,晚盘在晚上8点后开盘,考虑到港股可能是在4点左右,我们可以将白盘截止时间设定为下午6点,即18:00。
    如此,可比较当前时间,若当前时间在这之前,则认为其交易日为当日,若当前时间大于这个时间,则应该划分到下一个交易日。
    封装函数如下:

    Function GetDate(endt);
    begin
      day:=dateof(endt)+18/24;//取日期时间的日期部分,生成这一日的白盘截止时间点
      
    //当指定时间大于白盘截止时间时或非交易日时,取下一个交易日
      with *,array(pn_stock():'SH000001',pn_cycle():cy_day(),pn_date():endt) do
      begin 
        if endt<day and istradeday(day) then return dateof(endt);
        else return ref(sp_time(),-1);
      end
    end
    {特注:该函数由于需要推到下一个交易日,所以只支持历史日期情况,不支持实时盘前与夜盘盘中时的判断。
    用户若还需要支持盘前与盘中的情景,需要借助市场交易日历,或其它相关的数据进行处理。
    由于判断越多,则效率越低下,所以,这里封装只支持一般场景。
    }

    调用案例如下:

    setsysparam(pn_cycle(),cy_1m());
    setsysparam(pn_stock(),'SH000001');
    t:= select datetostr(GetDate(['date'])) as '交易日',
        FormaTDateTime("yyyy-mm-dd hh:nn:ss",["date"]) as "DateTime",
        ["StockID"],['close']
        from Markettable
        DateKey 20220101T to 20220110.16T
        of 'RB2202' end;
    return t;

    返回结果(部分结果展示):

    ...