backtesting.py icon indicating copy to clipboard operation
backtesting.py copied to clipboard

ValueError: Invalid frequency: ME

Open xXgordonXx opened this issue 8 months ago • 1 comments

Expected behavior

what i do:

  1. pip install backtesting
  2. run from backtesting import Backtest, Strategy from backtesting.lib import crossover

from backtesting.test import SMA, GOOG

class SmaCross(Strategy): def init(self): price = self.data.Close self.ma1 = self.I(SMA, price, 10) self.ma2 = self.I(SMA, price, 20)

def next(self):
    if crossover(self.ma1, self.ma2):
        self.buy()
    elif crossover(self.ma2, self.ma1):
        self.sell()

bt = Backtest(GOOG, SmaCross, commission=.002, exclusive_orders=True) stats = bt.run() bt.plot()

  1. expected result: is ploting a sample graph

Code sample

from backtesting import Backtest, Strategy
from backtesting.lib import crossover

from backtesting.test import SMA, GOOG


class SmaCross(Strategy):
    def init(self):
        price = self.data.Close
        self.ma1 = self.I(SMA, price, 10)
        self.ma2 = self.I(SMA, price, 20)

    def next(self):
        if crossover(self.ma1, self.ma2):
            self.buy()
        elif crossover(self.ma2, self.ma1):
            self.sell()


bt = Backtest(GOOG, SmaCross, commission=.002,
              exclusive_orders=True)
stats = bt.run()
bt.plot()

Actual behavior

  1. error/ related report [ValueError: Invalid frequency: ME]

Image

reference: https://github.com/pandas-dev/pandas/issues/57197

Additional info, steps to reproduce, full crash traceback, screenshots

  1. seems there is typo in _plot_superimposed_ohlc() function

    def _plot_superimposed_ohlc(): """Superimposed, downsampled vbars""" time_resolution = pd.DatetimeIndex(df['datetime']).resolution resample_rule = (superimpose if isinstance(superimpose, str) else dict(day='ME', hour='D', minute='h', second='min', millisecond='s').get(time_resolution))

Software versions

  • Backtesting version: 0.?.?
  • bokeh.__version__:
  • OS:

xXgordonXx avatar Mar 27 '25 07:03 xXgordonXx

Please upgrade to pandas >= 2.2 or pass bt.plot(superimpose='M') or bt.plot(superimpose=False).

kernc avatar Mar 30 '25 04:03 kernc