载入历史数据
负责载入对应品种的历史数据,大概有4个步骤:
根据数据类型不同,分成K线模式和Tick模式;
通过select().where()方法,有条件地从数据库中选取数据,其筛选标准包括:vt_symbol、 回测开始日期、回测结束日期、K线周期(K线模式下);
order_by(DbBarData.datetime)表示需要按照时间顺序载入数据;
载入数据是以迭代方式进行的,数据最终存入self.history_data。
- def load_data(self):
- """"""
- self.output("开始加载历史数据")
- if self.mode == BacktestingMode.BAR:
- s = (
- DbBarData.select()
- .where(
- (DbBarData.vt_symbol == self.vt_symbol)
- & (DbBarData.interval == self.interval)
- & (DbBarData.datetime >= self.start)
- & (DbBarData.datetime <= self.end)
- )
- .order_by(DbBarData.datetime)
- )
- self.history_data = [db_bar.to_bar() for db_bar in s]
- else:
- s = (
- DbTickData.select()
- .where(
- (DbTickData.vt_symbol == self.vt_symbol)
- & (DbTickData.datetime >= self.start)
- & (DbTickData.datetime <= self.end)
- )
- .order_by(DbTickData.datetime)
- )
- self.history_data = [db_tick.to_tick() for db_tick in s]
- self.output(f"历史数据加载完成,数据量:{len(self.history_data)}")