在写策略的时候,不免会遇到使用时间戳的问题,在JS中 时间戳 是个毫秒级别的数字。 通常不是很直观,主要是用来在程序中判断时间先后顺序,计算时间差等等。 在DEBUG或者调试的时候很不方便。为此,平台内置了一个函数 : _D()函数,用来把时间戳显示为字符串便于使用。 同样有时候还需要把一个具体描述的时间转换为时间戳,那怎么处理呢?
给出代码示例:
function main(){
// example TimeString to TimeStamp
//timeStr format: "2016.12.01 13:55:60";
var stamp = new Date("2014-07-10 10:21:12:500").getTime();
Log("stamp:", stamp,"_D(stamp)" ,_D(stamp) ,"srting : 2014-07-10 10:21:12");
//timeStr format: "2016.12.01 13:55:60:300";
var stamp2 = new Date("2014-07-10 10:21:12").getTime();
Log("stamp2:", stamp2,"_D(stamp)" ,_D(stamp2) ,"srting : 2014-07-10 10:21:12");
var nowTimeStamp = new Date().getTime();
var nowTimeStr = _D(nowTimeStamp);
Log(new Date(nowTimeStr).getTime(), nowTimeStamp);
}
代码回测运行:
需要注意的是_D()函数在 Python 中用法是有些不一样的,我们也用代码测试一下。
import time
def main():
# example TimeString to TimeStamp
# timeStr format: "2016.12.01 13:55:60";
# time.mktime(tupletime)
# 接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。
stamp = time.mktime((2014, 7, 10, 10, 21, 12, 5, 0, 0))
Log("stamp:", stamp, "_D(stamp)", _D(stamp)," srting : 2014-07-10 10:21:12")
stamp2 = time.mktime((2014, 7, 10, 10, 21, 12, 0, 0, 0))
Log("stamp2:", stamp2, "_D(stamp)", _D(stamp2), "srting : 2014-07-10 10:21:12")
nowTimeStamp = time.time()
nowTimeStr = _D(nowTimeStamp)
Log("nowTimeStamp:", nowTimeStamp, "nowTimeStr:", nowTimeStr)
回测显示:
super888 _D() 在 python平台上的时间单位是秒,和说明里的不一样。所以k线数据里的Time需要除以1000
发明者量化-小小梦 哦 ~是的 ,感谢提醒 ,我增加 对 python 的解释说明 ^^ , 不过 python 的策略中 使用 _D 传入 的参数 直接用 Python time.time() 返回的值就可以(秒级别的 时间戳), K线数据 中的时间戳是 毫秒级别的,需要在Python 策略中做 除以 1000 的转换,用于对比time.time() 返回的秒级时间戳。