1 year ago

#382866

test-img

teralee

Backtrder animated plotting

Im looking for a way to animate backtest plotting of the Backtrder. I searched for appropriate tools and I found FuncAnimation:

FuncAnimation(figure, animation_function, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)

My problem is how to set its first 2 inputs in the plot method of the cerebro class:

def plot(self, plotter=None, numfigs=1, iplot=True, start=None, end=None,
         width=16, height=9, dpi=300, tight=True, use=None,
         **kwargs):
    '''
    Plots the strategies inside cerebro

    If ``plotter`` is None a default ``Plot`` instance is created and
    ``kwargs`` are passed to it during instantiation.

    ``numfigs`` split the plot in the indicated number of charts reducing
    chart density if wished

    ``iplot``: if ``True`` and running in a ``notebook`` the charts will be
    displayed inline

    ``use``: set it to the name of the desired matplotlib backend. It will
    take precedence over ``iplot``

    ``start``: An index to the datetime line array of the strategy or a
    ``datetime.date``, ``datetime.datetime`` instance indicating the start
    of the plot

    ``end``: An index to the datetime line array of the strategy or a
    ``datetime.date``, ``datetime.datetime`` instance indicating the end
    of the plot

    ``width``: in inches of the saved figure

    ``height``: in inches of the saved figure

    ``dpi``: quality in dots per inches of the saved figure

    ``tight``: only save actual content and not the frame of the figure
    '''
    if self._exactbars > 0:
        return

    if not plotter:
        from . import plot
        if self.p.oldsync:
            plotter = plot.Plot_OldSync(**kwargs)
        else:
            plotter = plot.Plot(**kwargs)

    # pfillers = {self.datas[i]: self._plotfillers[i]
    # for i, x in enumerate(self._plotfillers)}

    # pfillers2 = {self.datas[i]: self._plotfillers2[i]
    # for i, x in enumerate(self._plotfillers2)}

    figs = []
    for stratlist in self.runstrats:
        for si, strat in enumerate(stratlist):
            rfig = plotter.plot(strat, figid=si * 100,
                                numfigs=numfigs, iplot=iplot,
                                start=start, end=end, use=use)
            # pfillers=pfillers2)

            figs.append(rfig)

        plotter.show()

    return figs

Thanks in advance

python

algorithmic-trading

matplotlib-animation

backtrader

0 Answers

Your Answer

Accepted video resources