1. save_bar_data()函数的功能

  • 保存一个bar列表bars到表DbBarData中,对已经存在相同索引的bar就更新之
  • 用bars的第一个bar和最后一个bar的时间连同symbol、exchange和interval,计算出数据总揽overview,
  • 果DbBarOverview已经存在一个同symbol、exchange和interval的数据总揽overview0,那么就合并overview0的开始时间start和end,合并的规则如下:
              overview.start = min(bars[0].datetime, overview.start)
              overview.end = max(bars[-1].datetime, overview.end)

2. save_bar_data()生成的数据总揽的特点

它会把DbBarData中相同symbol、exchange和interval的所有bar的生成一个数据总揽overview,
并且overview的起止时间分别为这些bar最早时间戳和最晚时间戳——无论这些bars是由几个时间段构成的。
也就是说,如果您曾经下载过过螺纹rb2201.SHFE的日线数据:

  • 第一次:2021-1-16~2021-2-16 —— BarOverview为 rb2201.SHFE interval='d' 起止时间:2021-1-16~2021-2-16
  • 第二次:2021-2-16~2021-5-16 —— BarOverview为 rb2201.SHFE interval='d' 起止时间:2021-1-16~2021-5-16
  • 第三次:2021-12-1~2021-12-22 —— BarOverview为 rb2201.SHFE interval='d' 起止时间:2021-1-16~2021-12-22

注意:

这三次下载后,rb2201.SHFE的日线数据的BarOverview的起止时间:2021-1-16~2021-12-22,而实际上数据库中是不存在2021-5-17~2021-11-30,除非我们查询明细,否则我们不知道它们还缺少哪些日期的K线数据!

3. 完全没有重叠的两次下载,不应该合并到一起

我觉得对于下载的时间段重叠的可以合并成为一个BarOverview,目前vnpy在这点上的处理就很好。
而对于两个没有任何重叠时间段的两段bars是不应该合并的,因为这会引起误导!仔细地研究下数据管理模块的界面,就会明白我的意思了。