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

Q:如何在一秒多笔的交易明细时间上加上毫秒标签    

  • A:交易明细中关于时间的精度说明
    由于目前天软的交易明细在存储时,对于时间只记录到了秒,没有记录到毫秒。
    因此导致一秒多笔记录的品种(如期货期权)的交易明细中会存在一秒多条数据的情况。
    数据在接收时,是先来先录的规则,即按数据的顺序查看哪条明细在前,哪条明细在后。

    特殊应用:
    而有些使用场景中,需要通过时间值的大小去判断数据的前后关系。
    因此,本小节中提供一种对交易明细打上毫秒标签的方式供用户参考,增加对明细的顺序判别,方便在有些编程过程中的应用。
    注:此时的毫秒仅指打标签作为识别用,不代表数据真实的毫秒时间。
    除此之外,若用户考虑半秒线行情,也可以显示出毫秒出来,具体实现可参考:FAQ:Q:如何将半秒线行情数据的时间戳显示出毫秒?
    实现逻辑:
    封装TD_TradetableHMDate(Data)模型,对Data中的"date"列进行一秒多笔的数据增加毫秒。
    毫秒增加逻辑:对同一秒的多条数据的['date']列,第1条记录不处理,其它记录在前一条数据的['date']的基础上增加100毫秒

    第一步:TD_TradetableHMDate的具体实现:需要用户封装该函数
    Function TD_TradetableHMDate(Data);//Data是数据表格类型
    Begin
    {
    对1秒多笔的数据时间进行处理,每笔在上一条基础上增加100毫秒
    }
      data[:,'date1']:=Data[:,'date'];
      dt:=1/24/60/60/1000*100;
      for i:=1 to length(data)-1 do
      begin
       if data[i]['date1']=data[i-1]['date1'] then data[i]['date']:=data[i-1]['date']+dt;
      end
      DeleteColumnByField(data,'date1');
      return data;
    End;

    第二步:调用实例
    //-一条多条记录,将重复秒的记录后面加上毫秒
      t:=select ['date'],['close']
      from tradetable datekey 20240710.08T to 20240710.16T
      of "AP2412" end;
      t:= TD_TradetableHMDate(t);
      return t;
    //--若需要将时间转成字符串后返回,则用下面这个命令实现
      return select *,FormatDateTime('yyyy-mm-dd hh:nn:ss:zzz',['date']) as 'date' from t end;

    返回结果: