时间读取 TB常用的时间函数有CurrentTime,Time,Hour,Minute和Second,但是这里会有一些比较隐秘的错误。 一、CurrentTime不等于Time Time返回的是当前Bar的“开盘”时间;CurrentTime返回的是主机当前的时间。为了让读者更直观地感受二者的区别,我写了下面这段代码:
这段代码有三点要注意:1、时间返回结果是6位小数;2、Text函数是数值转字符,不支持小数点;3、要清除其他位置的字符,不然会重复显示。公式加载到超级图表后会得到下图:
我想,看到这图以后,大家就会发现不同了吧。CurrentTime在历史回测中是不会变的。所以,若以收盘时间或特定时间做条件的代码,在回测中应该用Time。 二、在分钟或更大的周期里,Time和Second返回的秒数都是零 Time返回的结果是0.HHMMSS,所以可以用Time*1000000-Hour*10000-Minute*100得出秒数? 这在分钟或更大的周期里是错的。正如上文所说,Time代表的是这根K线开盘时间,所以,Time的精度是由K线周期决定的。例如上图是1分钟周期,那么最小变动单位就是1分钟,如果是5分钟周期,最小变动单位就是5分钟。分钟周期所有K线用Time得出的秒数都会是0。 甚至Second这个函数,在分钟及以上的周期里,返回的结果也是0。因为Second的正确说明是当前这根Bar开盘时间的秒数,所以返回的结果都是0。 所以在回测时,你在分钟周期里无法实现“在收盘前N秒成交”或“开盘后N秒成交”。因为你无法知道秒值和那时的成交价格。解决办法就是在秒周期上做测试,但需要写自定义函数跨周期。如果是在实盘,那么可以用CurrentTime转换。
|