加载数据
bars = database_manager.load_bar_data(
"IF888",
exchange = Exchange.CFFEX,
interval=Interval.MINUTE,
start=datetime(2019, 1, 1),
end=datetime(2019, 1, 17)
)
从本地数据库(vnpy运行目录下的.db数据库文件)读取沪深300主力指数合约分钟线数据,存入bars,bars为list,每个元素均为BarData数据结构。
widget = NewChartWidget()
widget.add_plot("candle", hide_x_axis=True)
widget.add_plot("volume", maximum_height=200)
widget.add_item(CandleItem, "candle", "candle")
widget.add_item(VolumeItem, "volume", "volume")
widget.add_item(TopBottomPattern, "topbottom", "candle")
widget.add_cursor()
n = len(bars)
history = bars[:n]
new_data = bars[n:]
widget.update_history(history)
NewChartWidget继承了Widget类,此处与Widget类的区别可忽略。add_plot方法是在窗体中创建绘图区,add_item方法是向指定绘图区中加入ChartItem对象。例如,widget.add_item(CandleItem, “candle”, “candle”) 即是将一个名为candle的CandleItem对象,加载到名为candle的绘图区中。add_item的入参依次为,ChartItem类,对象名称item_name, 绘图区名称plot_name。
上例中,history即为bars的全部数据(1/1至1/17期货指数分钟线)。
widget.update_history(history) 为加载数据的语句,接下来看具体的加载过程和调用关系。
数据加载过程和调用关系
查看Widget类的update_history方法:
def update_history(self, history: List[BarData]) -> None:
"""
Update a list of bar data.
"""
self._manager.update_history(history)
for item in self._items.values():
item.update_history(history)
self._update_plot_limits()
self.move_to_right()
入参为BarData组成的list,本例中即为history(全部数据)。该方法实际上调用了self._manager的update_history方法。self._manager是Widget类内部定义的BarManager对象:
self._manager: BarManager = BarManager()
继续查看BarManager类的update_history方法:
def update_history(self, history: List[BarData]) -> None:
"""
Update a list of bar data.
"""
# Put all new bars into dic