Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

backtesting.py ploting function not working

I'm trying to learn backtesting.py, when I run the following sample code, it pops up these errors, anyone could help? I tried to uninstall the Bokeh package and reinstall an older version, but it doen't work.

BokehDeprecationWarning: Passing lists of formats for DatetimeTickFormatter scales was deprecated in Bokeh 3.0. Configure a single string format for each scale
C:\Users\paul_\AppData\Local\Programs\Python\Python310\lib\site-packages\bokeh\models\formatters.py:399: UserWarning: DatetimeFormatter scales now only accept a single format. Using the first prodvided: '%d %b'
  warnings.warn(f"DatetimeFormatter scales now only accept a single format. Using the first prodvided: {fmt[0]!r} ")
BokehDeprecationWarning: Passing lists of formats for DatetimeTickFormatter scales was deprecated in Bokeh 3.0. Configure a single string format for each scale
C:\Users\paul_\AppData\Local\Programs\Python\Python310\lib\site-packages\bokeh\models\formatters.py:399: UserWarning: DatetimeFormatter scales now only accept a single format. Using the first prodvided: '%m/%Y'
  warnings.warn(f"DatetimeFormatter scales now only accept a single format. Using the first prodvided: {fmt[0]!r} ")
GridPlot(id='p11925', ...)
import bokeh
import datetime
import pandas_ta as ta
import pandas as pd

from backtesting import Backtest
from backtesting import Strategy
from backtesting.lib import crossover
from backtesting.test import GOOG

class RsiOscillator(Strategy):

    upper_bound = 70
    lower_bound = 30
    rsi_window = 14

    # Do as much initial computation as possible
    def init(self):
        self.rsi = self.I(ta.rsi, pd.Series(self.data.Close), self.rsi_window)

    # Step through bars one by one
    # Note that multiple buys are a thing here
    def next(self):
        if crossover(self.rsi, self.upper_bound):
            self.position.close()
        elif crossover(self.lower_bound, self.rsi):
            self.buy()

bt = Backtest(GOOG, RsiOscillator, cash=10_000, commission=.002)
stats = bt.run()
bt.plot()

like image 930
Ka Meng Ng Avatar asked Aug 27 '26 13:08

Ka Meng Ng


2 Answers

An issue was opened for this in the GitHub repo: https://github.com/kernc/backtesting.py/issues/803

A comment in the issue suggests to downgrade bokeh to 2.4.3:

python3 -m pip install bokeh==2.4.3

This worked for me.

NOTE:

Restart your Jupyter notebook after downgrading bokeh, In case you see it still doesn't work.

like image 112
oats Avatar answered Aug 30 '26 01:08

oats


I downgraded bokeh from 3.5.0 to 3.1.0 and worked

pip uninstall bokeh
pip install bokeh==3.1.0

my requirements.txt

pandas==2.2.2
plotly==5.23.0
numpy==2.0.1
Backtesting==0.3.3
bokeh==3.1.0
pip install -r requirements.txt

make sure you have the correct version, as you'll need to restart your Jupiter Notebook or reload the window Ctrl + Shift + P then type Reload Window

import bokeh
print(bokeh.__version__)

// outputs 3.1.0
like image 37
PHANTOM-X Avatar answered Aug 30 '26 03:08

PHANTOM-X