A:
已有相关公用函数(支持未来交易日,依据SH000001的753表数据):
StockEndTAfterNDay:指定日期向后推N个交易日期,函数说明:FAQ:
StockEndTAfterNDay
注:
1、为负数则向历史推,为正数则向未来推
2、该函数适用于,当指定日为交易日时,则当指定日为当前时间
当指定日为非交易日时,则指定下个交易日为当前时间
3、当需要取到未来交易日时,只适用于日线,否则返回0。
StockTradeDaysQkAfterN:指定日期向后推N个交易日期,函数说明:FAQ:
StockTradeDaysQkAfterN
注:
1、为负数则向历史推,为正数则向未来推
2、该函数适用于,当指定日为交易日时,则当指定日为当前时间
当指定日为非交易日时,则指定上个交易日为当前时间
注意这里与StockEndTAfterNDay的区别
3、当需要取到未来交易日时,只适用于日线,否则返回结果按日线处理。
调用范例:
//执行程序时间:2021-1-13日,得到在2021-01-12日的后第二个交易日
return StockEndTAfterNDay(20210112T,2); //20210112T是交易日:返回2021-1-14
return StockTradeDaysQkAfterN(20210112T,2); //20210112T是交易日:返回2021-1-14
return StockEndTAfterNDay(20210109T,2); //20210109T是非交易日:返回2021-01-13 (以20210111日为当前时间)
return StockTradeDaysQkAfterN(20210109T,2);//20210109T是非交易日:返回2021-01-12 (以20210108日为当前时间)
历史解决方法:用户封装实现模型
天软已提供未来交易日数据,可查看证券数据专家-》表格数据-》指数.市场交易日历。目前提供的是本年的交易日数据,在每年的节假日安排出来后,天软数据组人员会即时更新。
提取数据范例(模型提供附件):
1、提取开始日到截止日之间的交易日序列(开始日和截止日都可以是未来的日期):
Function FutureTradedayQK(BegT,EndT);
Begin
begt_:=datetoint(begt);
endt_:=datetoint(endt);
dayArr:=sselect inttodate(['截止日']) from infotable 753 of 'SH000001'
where ['截止日']>=begt_
and ['截止日']<=endt_
and ['是否交易日']=1
order by ['截止日'] end;
if not istable(dayArr) then endt1:=endt;
else endt1:=dayArr[0];
hisArr:=MarketTradeDayQk(begt,endt1);
return hisArr union2 dayArr;
End;
2、指定日是否交易日(可判断未来日期):
Function IfTradeDay1(EndT);
Begin
if EndT<today() then
return istradeday(endt);
else
begin
EndT_:=datetoint(EndT);
r:=sselect ['截止日'] from infotable 753 of 'SH000001'
where ['是否交易日']=1 end;
if EndT_ in r then return 1;
else return 0;
end;
End;
3、取指定日后N个的交易日:
Function DateAfterNDays(EndT,Days);
Begin
oV:=BackUpSystemParameters2();
SetSysParam(PN_Date(),EndT);
setsysparam(pn_cycle(),cy_day());
//未来N日
if days=0 and endt>=today() then
begin
endt_:=datetoint(endt);
d:=vSelect drange(0 to 0) ['截止日'] from infoTable 753 of 'SH000001'
where ['截止日']<=endt_ order by ['截止日'] desc end;
return inttodate(d);
end
else if days>=0 then
begin
DateAfter:=ref(sp_time(),-Days);
if DateAfter=0 then
begin
if endt>=today() then
begin
day_:=datetoint(EndT);
days2:=days;
end
else
begin
day_:=datetoint(today());
days2:=days-tradedays(endt,today());
end;
t:=Select drange(0 to Days-1) ['截止日'] from infoTable 753 of 'SH000001'
where ['截止日']>day_ order by ['截止日'] end;
if isTable(t) then
begin
if Days2-1>length(t)-1 then return 0;
return IntToDate(t[Days2-1]['截止日']);
end
end
else
return DateAfter;
end
else
begin
if EndT>=today() then
begin
//begt_:=datetoint(today());
endt_:=datetoint(endt);
t:=Select drange(-days to -Days) ['截止日'] from infoTable 753 of 'SH000001'
where ['截止日']<=endt_ order by ['截止日'] desc end;
len:=length(t);
if len>=-days then
begin
return IntToDate(t[-Days-1]['截止日']);
end
else
begin
days1:=(-days)-len+1;
return ref(sp_time(),Days1);
end
end
else
return ref(sp_time(),-Days);
end
End;
[关键字]:未来交易日、未来、是否交易日、交易日序列