ValueError: Invalid frequency: ME
Expected behavior
what i do:
- pip install backtesting
- 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()
- 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
- error/ related report [ValueError: Invalid frequency: ME]
reference: https://github.com/pandas-dev/pandas/issues/57197
Additional info, steps to reproduce, full crash traceback, screenshots
-
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:
Please upgrade to pandas >= 2.2 or pass bt.plot(superimpose='M') or bt.plot(superimpose=False).