载入历史数据

负责载入对应品种的历史数据,大概有4个步骤:

  • 根据数据类型不同,分成K线模式和Tick模式;

  • 通过select().where()方法,有条件地从数据库中选取数据,其筛选标准包括:vt_symbol、 回测开始日期、回测结束日期、K线周期(K线模式下);

  • order_by(DbBarData.datetime)表示需要按照时间顺序载入数据;

  • 载入数据是以迭代方式进行的,数据最终存入self.history_data。

  1. def load_data(self):
  2. """"""
  3. self.output("开始加载历史数据")
  4.  
  5. if self.mode == BacktestingMode.BAR:
  6. s = (
  7. DbBarData.select()
  8. .where(
  9. (DbBarData.vt_symbol == self.vt_symbol)
  10. & (DbBarData.interval == self.interval)
  11. & (DbBarData.datetime >= self.start)
  12. & (DbBarData.datetime <= self.end)
  13. )
  14. .order_by(DbBarData.datetime)
  15. )
  16. self.history_data = [db_bar.to_bar() for db_bar in s]
  17. else:
  18. s = (
  19. DbTickData.select()
  20. .where(
  21. (DbTickData.vt_symbol == self.vt_symbol)
  22. & (DbTickData.datetime >= self.start)
  23. & (DbTickData.datetime <= self.end)
  24. )
  25. .order_by(DbTickData.datetime)
  26. )
  27. self.history_data = [db_tick.to_tick() for db_tick in s]
  28.  
  29. self.output(f"历史数据加载完成,数据量:{len(self.history_data)}")