def plot(self, column: tp.Optional[tp.Label] = None, macd_trace_kwargs: tp.KwargsLike = None, signal_trace_kwargs: tp.KwargsLike = None, hist_trace_kwargs: tp.KwargsLike = None, add_trace_kwargs: tp.KwargsLike = None, fig: tp.Optional[tp.BaseFigure] = None, **layout_kwargs) -> tp.BaseFigure: # pragma: no cover """Plot `MACD.macd`, `MACD.signal` and `MACD.hist`. Args: column (str): Name of the column to plot. macd_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `MACD.macd`. signal_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `MACD.signal`. hist_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Bar` for `MACD.hist`. add_trace_kwargs (dict): Keyword arguments passed to `add_trace`. fig (Figure or FigureWidget): Figure to add traces to. **layout_kwargs: Keyword arguments for layout. ## Example ```python-repl >>> vbt.MACD.run(ohlcv['Close']).plot() ``` ![](/docs/img/MACD.svg)""" self_col = self.select_one(column=column) if fig is None: fig = make_figure() fig.update_layout(bargap=0) fig.update_layout(**layout_kwargs) if macd_trace_kwargs is None: macd_trace_kwargs = {} if signal_trace_kwargs is None: signal_trace_kwargs = {} if hist_trace_kwargs is None: hist_trace_kwargs = {} macd_trace_kwargs = merge_dicts(dict( name='MACD' ), macd_trace_kwargs) signal_trace_kwargs = merge_dicts(dict( name='Signal' ), signal_trace_kwargs) hist_trace_kwargs = merge_dicts(dict(name='Histogram'), hist_trace_kwargs) fig = self_col.macd.vbt.plot( trace_kwargs=macd_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) fig = self_col.signal.vbt.plot( trace_kwargs=signal_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) # Plot hist hist = self_col.hist.values hist_diff = generic_nb.diff_1d_nb(hist) marker_colors = np.full(hist.shape, adjust_opacity('silver', 0.75), dtype=object) marker_colors[(hist > 0) & (hist_diff > 0)] = adjust_opacity('green', 0.75) marker_colors[(hist > 0) & (hist_diff <= 0)] = adjust_opacity('lightgreen', 0.75) marker_colors[(hist < 0) & (hist_diff < 0)] = adjust_opacity('red', 0.75) marker_colors[(hist < 0) & (hist_diff >= 0)] = adjust_opacity('lightcoral', 0.75) hist_bar = go.Bar( x=self_col.hist.index, y=self_col.hist.values, marker_color=marker_colors, marker_line_width=0 ) hist_bar.update(**hist_trace_kwargs) if add_trace_kwargs is None: add_trace_kwargs = {} fig.add_trace(hist_bar, **add_trace_kwargs) return fig
def plot(self, column: tp.Optional[tp.Label] = None, plot_close: bool = True, close_trace_kwargs: tp.KwargsLike = None, middle_trace_kwargs: tp.KwargsLike = None, upper_trace_kwargs: tp.KwargsLike = None, lower_trace_kwargs: tp.KwargsLike = None, add_trace_kwargs: tp.KwargsLike = None, fig: tp.Optional[tp.BaseFigure] = None, **layout_kwargs) -> tp.BaseFigure: # pragma: no cover """Plot `BBANDS.middle`, `BBANDS.upper` and `BBANDS.lower` against `BBANDS.close`. Args: column (str): Name of the column to plot. plot_close (bool): Whether to plot `MA.close`. close_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `BBANDS.close`. middle_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `BBANDS.middle`. upper_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `BBANDS.upper`. lower_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Scatter` for `BBANDS.lower`. add_trace_kwargs (dict): Keyword arguments passed to `add_trace`. fig (Figure or FigureWidget): Figure to add traces to. **layout_kwargs: Keyword arguments for layout. ## Example ```python-repl >>> vbt.BBANDS.run(ohlcv['Close']).plot() ``` ![](/docs/img/BBANDS.svg) """ from vectorbt._settings import settings plotting_cfg = settings['plotting'] self_col = self.select_one(column=column) if fig is None: fig = make_figure() fig.update_layout(**layout_kwargs) if close_trace_kwargs is None: close_trace_kwargs = {} if middle_trace_kwargs is None: middle_trace_kwargs = {} if upper_trace_kwargs is None: upper_trace_kwargs = {} if lower_trace_kwargs is None: lower_trace_kwargs = {} lower_trace_kwargs = merge_dicts(dict( name='Lower Band', line=dict( color=adjust_opacity(plotting_cfg['color_schema']['gray'], 0.75) ), ), lower_trace_kwargs) upper_trace_kwargs = merge_dicts(dict( name='Upper Band', line=dict( color=adjust_opacity(plotting_cfg['color_schema']['gray'], 0.75) ), fill='tonexty', fillcolor='rgba(128, 128, 128, 0.2)' ), upper_trace_kwargs) # default kwargs middle_trace_kwargs = merge_dicts(dict( name='Middle Band' ), middle_trace_kwargs) close_trace_kwargs = merge_dicts(dict( name='Close', line=dict(color=plotting_cfg['color_schema']['blue']) ), close_trace_kwargs) fig = self_col.lower.vbt.plot( trace_kwargs=lower_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) fig = self_col.upper.vbt.plot( trace_kwargs=upper_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) fig = self_col.middle.vbt.plot( trace_kwargs=middle_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) if plot_close: fig = self_col.close.vbt.plot( trace_kwargs=close_trace_kwargs, add_trace_kwargs=add_trace_kwargs, fig=fig) return fig