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;
返回结果:
