vnpy+缠论测试笔记1: chart绘图标识顶底分型

  • Post author:
  • Post category:其他




加载数据

    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:
        



版权声明:本文为Homer_Meng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。