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;
返回结果(部分结果展示):
...