def plot(self, macd_trace_kwargs=None, signal_trace_kwargs=None, hist_trace_kwargs=None, fig=None, **layout_kwargs): # pragma: no cover """Plot `MACD.macd`, `MACD.signal` and `MACD.hist`. Args: 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`. fig (plotly.graph_objects.Figure): Figure to add traces to. **layout_kwargs: Keyword arguments for layout. Example: ```python-repl >>> vbt.MACD.run(price['Close']).plot() ``` ![](/vectorbt/docs/img/MACD.png)""" if self.wrapper.ndim > 1: raise TypeError("Select a column first. Use indexing.") 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_kwargs(dict(name='MACD'), macd_trace_kwargs) signal_trace_kwargs = merge_kwargs(dict(name='Signal'), signal_trace_kwargs) hist_trace_kwargs = merge_kwargs(dict(name='Histogram'), hist_trace_kwargs) layout_kwargs = merge_kwargs(dict(bargap=0), layout_kwargs) fig = self.macd.vbt.plot(trace_kwargs=macd_trace_kwargs, fig=fig, **layout_kwargs) fig = self.signal.vbt.plot(trace_kwargs=signal_trace_kwargs, fig=fig, **layout_kwargs) # Plot hist hist = self.hist.values hist_diff = generic_nb.diff_1d_nb(hist) marker_colors = np.full(hist.shape, 'silver', dtype=np.object) marker_colors[(hist > 0) & (hist_diff > 0)] = 'green' marker_colors[(hist > 0) & (hist_diff <= 0)] = 'lightgreen' marker_colors[(hist < 0) & (hist_diff < 0)] = 'red' marker_colors[(hist < 0) & (hist_diff >= 0)] = 'lightcoral' hist_bar = go.Bar(x=self.hist.index, y=self.hist.values, marker_color=marker_colors, marker_line_width=0) hist_bar.update(**hist_trace_kwargs) fig.add_trace(hist_bar) return fig
def plot(self, macd_trace_kwargs={}, signal_trace_kwargs={}, histogram_trace_kwargs={}, fig=None, **layout_kwargs): # pragma: no cover """Plot `MACD.macd`, `MACD.signal` and `MACD.histogram`. Args: 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`. histogram_trace_kwargs (dict): Keyword arguments passed to `plotly.graph_objects.Bar` for `MACD.histogram`. fig (plotly.graph_objects.Figure): Figure to add traces to. **layout_kwargs: Keyword arguments for layout. Example: ```py macd[(10, 20, 30, False, True)].plot() ``` ![](/vectorbt/docs/img/MACD.png)""" if self.wrapper.ndim > 1: raise TypeError("You must select a column first") macd_trace_kwargs = merge_kwargs(dict( name=f'MACD ({self.name})' ), macd_trace_kwargs) signal_trace_kwargs = merge_kwargs(dict( name=f'Signal ({self.name})' ), signal_trace_kwargs) histogram_trace_kwargs = merge_kwargs(dict( name=f'Histogram ({self.name})', showlegend=False ), histogram_trace_kwargs) layout_kwargs = merge_kwargs(dict(bargap=0), layout_kwargs) fig = self.macd.vbt.plot(trace_kwargs=macd_trace_kwargs, fig=fig, **layout_kwargs) fig = self.signal.vbt.plot(trace_kwargs=signal_trace_kwargs, fig=fig, **layout_kwargs) # Plot histogram hist = self.histogram.values hist_diff = generic_nb.diff_1d_nb(hist) marker_colors = np.full(hist.shape, 'silver', dtype=np.object) marker_colors[(hist > 0) & (hist_diff > 0)] = 'green' marker_colors[(hist > 0) & (hist_diff <= 0)] = 'lightgreen' marker_colors[(hist < 0) & (hist_diff < 0)] = 'red' marker_colors[(hist < 0) & (hist_diff >= 0)] = 'lightcoral' histogram_bar = go.Bar( x=self.histogram.index, y=self.histogram.values, marker_color=marker_colors, marker_line_width=0 ) histogram_bar.update(**histogram_trace_kwargs) fig.add_trace(histogram_bar) return fig
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 test_diff(self): pd.testing.assert_series_equal(ts['a'].vbt.diff(), ts['a'].diff()) np.testing.assert_array_equal(ts['a'].vbt.diff().values, nb.diff_1d_nb(ts['a'].values)) pd.testing.assert_frame_equal(ts.vbt.diff(), ts.diff())
def plot(self, column=None, macd_trace_kwargs=None, signal_trace_kwargs=None, hist_trace_kwargs=None, row=None, col=None, fig=None, **layout_kwargs): # 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`. row (int): Row position. col (int): Column position. fig (plotly.graph_objects.Figure): Figure to add traces to. **layout_kwargs: Keyword arguments for layout. ## Example ```python-repl >>> vbt.MACD.run(price['Close']).plot() ``` ![](/vectorbt/docs/img/MACD.png)""" self_col = self.select_series(column=column) if fig is None: fig = CustomFigureWidget() 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, row=row, col=col, fig=fig) fig = self_col.signal.vbt.plot(trace_kwargs=signal_trace_kwargs, row=row, col=col, fig=fig) # Plot hist hist = self_col.hist.values hist_diff = generic_nb.diff_1d_nb(hist) marker_colors = np.full(hist.shape, 'silver', dtype=np.object) marker_colors[(hist > 0) & (hist_diff > 0)] = 'green' marker_colors[(hist > 0) & (hist_diff <= 0)] = 'lightgreen' marker_colors[(hist < 0) & (hist_diff < 0)] = 'red' marker_colors[(hist < 0) & (hist_diff >= 0)] = 'lightcoral' 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) fig.add_trace(hist_bar, row=row, col=col) return fig