VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 420
声望: 173

在ChartWidget基础上创建的指标是不能改变主图或副图的参数的,如何做才能给让指标传递不同参数?
以MacdItem为例,步骤如下:

1. MacdItem是一个有参数的显示控件

MacdItem的实现见:为K线图表添砖加瓦——解决MACD绘图部件显示范围BUG,这里就不再贴代码。

2. 修改ChartWidget的add_item()方法,使得它可以接受指标参数

    def add_item(
        self,
        item_class: Type[ChartItem],
        item_name: str,
        plot_name: str,     
        **kwargs     # hxxjava add
    ) -> None:
        """
        Add chart item.
        """
        # item: ChartItem = item_class(self._manager) 
        item: ChartItem = item_class(self._manager) if not kwargs else item_class(self._manager,**kwargs)   # hxxjava change

        self._items[item_name] = item

        plot: pg.PlotItem = self._plots.get(plot_name)
        plot.addItem(item)

        self._item_plot_map[item] = plot

3. MyChartWidget是一个包含ChartWidget的窗口

class MyChartWidget(QtWidgets.QFrame):
    """
    订单流K线图表控件,
    """
    def __init__(self,title:str="K线图表"):
        """"""
        super().__init__()
        self.init_ui()
        self.setWindowTitle(title)

    def init_ui(self):
        """"""
        self.resize(1400, 800)

        # Create chart widget
        self.chart = ChartWidget()
        self.chart.add_plot("candle", hide_x_axis=True)
        self.chart.add_plot("fast_macd", maximum_height=100,hide_x_axis=True)
        self.chart.add_plot("slow_macd", maximum_height=100,hide_x_axis=True)
        self.chart.add_plot("volume", maximum_height=100,hide_x_axis=False)

        self.chart.add_item(CandleItem, "candle", "candle")  
        self.chart.add_item(MacdItem, "fast_macd", "fast_macd",short_window=6,long_window=19,M=9)   # 相当于MACD(6,19,9)
        self.chart.add_item(MacdItem, "slow_macd", "slow_macd",short_window=19,long_window=39,M=9)  # 相当于MACD(19,39,9)
        self.chart.add_item(VolumeItem, "volume", "volume")

        self.chart.add_cursor()
Member
avatar
加入于:
帖子: 1468
声望: 105

感谢分享!

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】