4.97K 浏览
0

问题在图片上,datetime 列到底有什么含义?

lookis 已回答的问题 2020年8月26日
2

我只能说我表达能力有限,看代码和输出的结果吧,最后有一列 datetime_dt 是用 time_to_datetime转换的,看看是不是你设想中的数据

lookis 已回答的问题 2020年8月26日
2

from datetime import date

import pandas as pd
from tqsdk import TqApi, TqBacktest, TqKq
from tqsdk.tafunc import time_to_datetime

pd.options.display.float_format = '{:20.0f}'.format
SYMBOL = 'SHFE.rb2010'
api = TqApi(
    backtest=TqBacktest(start_dt=date(2020, 8, 10), end_dt=date(2020, 8, 20)))
klines = api.get_kline_serial(SYMBOL, duration_seconds=60 * 5, data_length=10)
klines['datetime_dt'] = klines['datetime'].apply(time_to_datetime)
print(klines)
api.close()

在使用天勤量化之前,默认您已经知晓并同意以下免责条款,如果不同意请立即停止使用:https://www.shinnytech.com/blog/disclaimer/
              datetime                   id                 open                 high                  low                close               volume              open_oi             close_oi       symbol  duration         datetime_dt
0  1596780600000000000                12188                 3836                 3839                 3833                 3835                13977              1149495              1148265  SHFE.rb2010       300 2020-08-07 14:10:00
1  1596780900000000000                12189                 3835                 3840                 3835                 3837                12770              1148265              1147665  SHFE.rb2010       300 2020-08-07 14:15:00
2  1596781200000000000                12190                 3837                 3837                 3833                 3834                 5832              1147665              1147704  SHFE.rb2010       300 2020-08-07 14:20:00
3  1596781500000000000                12191                 3834                 3836                 3830                 3834                 8532              1147704              1148467  SHFE.rb2010       300 2020-08-07 14:25:00
4  1596781800000000000                12192                 3834                 3837                 3833                 3834                 4680              1148467              1147365  SHFE.rb2010       300 2020-08-07 14:30:00
5  1596782100000000000                12193                 3834                 3837                 3833                 3835                 6611              1147365              1145200  SHFE.rb2010       300 2020-08-07 14:35:00
6  1596782400000000000                12194                 3835                 3841                 3835                 3837                11648              1145200              1143732  SHFE.rb2010       300 2020-08-07 14:40:00
7  1596782700000000000                12195                 3837                 3838                 3834                 3834                 7980              1143732              1143844  SHFE.rb2010       300 2020-08-07 14:45:00
8  1596783000000000000                12196                 3834                 3837                 3831                 3831                11881              1143844              1141372  SHFE.rb2010       300 2020-08-07 14:50:00
9  1596783300000000000                12197                 3831                 3835                 3831                 3832                17305              1141372              1137326  SHFE.rb2010       300 2020-08-07 14:55:00

lookis 编辑答案 2020年8月26日
2

直接用time_to_datetime试试吧,有惊喜,python打印出来的科学计数法精度有限,麻烦你不要再拷贝出来用网页转换了,精度在你从屏幕拷贝出来的时候就损失掉了,这也是我上一个回答里说你精度损失的意思

你可以看看那个数值,只保留了6位小数,但后面其实应该有18个小数位,所以从第七位开始你都看不到了,这个完全是显示的问题,内存里的数值是正确的,在显示的时候被截断了,所以你看到的数字是一样的,那是因为更多的小数部分被print打印出来的时候舍弃掉了

ringo 发表新评论 2020年8月27日

嗯,经过核实,基本确定是数值显示的问题,datetime 列数值小数点后并不是只有6位,从第7位就被四舍五入了,所以小周期 K 线就会看到相同的 datetime 值,其实 datetime 值就是当下 k 线的开盘时间;

另外,有一点很重要,比如从日线级别看螺纹钢 8.25 的 datetime 信息,得到的值会是 8.25-00:00:00,但因为螺纹钢是有夜盘的,这个值应该是前一交易日的晚9点即 8.24-21:00:00;感谢官方的回复;

我不是官方啊……我也只是一个用户……

日kline的datetime不具有参考意义,其实是包含这个交易日的夜盘到第二天白盘的数据的