分享

TB编程常见错误(五) 时间读取

 蜡笔小签 2016-07-26

时间读取

 

 

    TB常用的时间函数有CurrentTime,Time,Hour,Minute和Second,但是这里会有一些比较隐秘的错误。

    一、CurrentTime不等于Time

    Time返回的是当前Bar的“开盘”时间;CurrentTime返回的是主机当前的时间。为了让读者更直观地感受二者的区别,我写了下面这段代码:

 

TB编程常见错误(五) <wbr>时间读取


    这段代码有三点要注意:1、时间返回结果是6位小数;2、Text函数是数值转字符,不支持小数点;3、要清除其他位置的字符,不然会重复显示。公式加载到超级图表后会得到下图:

 

TB编程常见错误(五) <wbr>时间读取


    我想,看到这图以后,大家就会发现不同了吧。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转换。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多