现在0-24点取得的数据为相同,如果有0点后的夜盘,则对该交易小节的判断会出现问题,将此函数改为15点到15点取得数据一致更为合适。
这个函数取得的小节定义包含日期,如下面的数据。
2024-05-28 23:59:00
[[20240527.210000000,20240528.023000000],[20240528.090000000,20240528.101500000],[20240528.103000000,20240528.113000000],[20240528.133000000,20240528.150000000]]
2024-05-29 00:00:00
[[20240528.210000000,20240529.023000000],[20240529.090000000,20240529.101500000],[20240529.103000000,20240529.113000000],[20240529.133000000,20240529.150000000]]
2024-05-28 23:59:00 为K线的日期时间,下面的两行为函数取得的小节定义数组。
当用(K线日期时间>=小节开始日期时间 and k线日期时间<小节结束日期时间)判断时,0点前为False,0点后为True。
我提个建议吧,你在使用这个函数的时候,可以直接取当根bar对应的真实交易日期,也就是trudedate,不要加时间
假如你是5.28日夜盘10点的bar执行truedate,返回的是5.29日,那么就可以正确取到对应的时间分段
不知道是不是你的TBQ版本比较旧,升级到最新版本的TBQ再次试一下,因为我按照你的逻辑写了以下测试代码,得到的session的结果与你的结果不一样。测试代码如下:
Events
OnBar(ArrayRef<Integer> indexs){
Array<Array<TimeStamp>> sessions;
TimeStamp BarDateTime;
If(BarStatus != 2) Return;
BarDateTime = 20240528.235900;
Print(\"BarDateTime =\" + DateTimeToString(BarDateTime));
GetSessionDateTime(Symbol, BarDateTime, sessions);
Print(TextArray(sessions));
ArrayClear(sessions);
BarDateTime = 20240529.000000;
Print(\"BarDateTime = \" + DateTimeToString(BarDateTime));
GetSessionDateTime(Symbol, BarDateTime, sessions);
Print(TextArray(sessions));
}
【2024-05-28 23:59:00】和【2024-05-29 00:00:00】这两个参数通过【GetSessionDateTime】返回的交易时间段是完全一致的。
哦,我本来以为是因为函数有问题。
试了一下,确实函数是正常的,直接使用bar的datetime数据来获取交易时段,也是正确的
是我的问题,不好意思添麻烦了。
取值session时使用的GetSessionDateTime(Symbol,Date,sessionTime),只用了date,发现有问题检查时用的date+time输出时间,但取值没有改,看了两位的代码,我再检查我的代码,才发现是取值没有加time。
谢谢两位解答。
听不明白你在说什么,0-24点都相同了,怎么0点以后又会出问题?不是都相同吗