Resampling and plotting multiple data: Value Error: x and y must have same first dimension



  • Hello,

    I am trying to work with multiple data with different sample rates but I am facing an issue with plotting.

    ~/develop/python/py-envs/py3env/lib/python3.6/site-packages/matplotlib/axes/_base.py in _xy_from_xy(self, x, y)
        217         y = _check_1d(y)
        218         if x.shape[0] != y.shape[0]:
    --> 219             raise ValueError("x and y must have same first dimension")
        220         if x.ndim > 2 or y.ndim > 2:
        221             raise ValueError("x and y can be no greater than 2-D")
    
    ValueError: x and y must have same first dimension
    
    

    Here is a minimal example:

    import backtrader as bt
    import sys
    import datetime as dt
    import backtrader.indicators as btind
    # %matplotlib inline
    
    datafile="/tmp/example.csv"
    
    class CompEma(bt.Strategy):
        params = (
            ('ema_period', 21),
            ('mult_period', 60),
        )
    
        def __init__(self):
            self.ema = btind.ExponentialMovingAverage(
                self.data0,
                period=self.p.ema_period * self.p.mult_period)
    
            self.ema = btind.ExponentialMovingAverage(
                self.data1,
                period=self.p.ema_period)
    
    
    if __name__ == '__main__':
    
        cerebro = bt.Cerebro(runonce=False)
        st_kwargs = dict()
        st_kwargs['ema_period'] = 21
        st_kwargs['mult_period'] = 60
        cerebro.addstrategy(CompEma, **st_kwargs)
    
        data0 = bt.feeds.GenericCSVData(dataname=datafile,
                      timeframe=bt.TimeFrame.Minutes,
                      compression=1,
                      sessionstart=dt.time(8,30),
                      sessionend=dt.time(15,15),
                      openinterest=-1)
    
        data1 = bt.feeds.GenericCSVData(dataname=datafile,
                      timeframe=bt.TimeFrame.Minutes,
                      compression=1,
                      sessionstart=dt.time(8,30),
                      sessionend=dt.time(15,15),
                      openinterest=-1)
    
        cerebro.adddata(data0)
        cerebro.resampledata(data1,
                             timeframe=bt.TimeFrame.Minutes,
                             compression=60)
    
        cerebro.addwriter(bt.WriterFile, csv=True)
        cerebro.run()
    
        cerebro.plot(style="candle")
    
    

    Contents of data file

     cat /tmp/example.csv 
    2004-01-12 08:31:00,1122.53,1123.18,1122.53,1123.18,0
    2004-01-12 08:32:00,1123.25,1123.65,1123.25,1123.65,0
    2004-01-12 08:33:00,1123.83,1123.92,1123.83,1123.86,0
    2004-01-12 08:34:00,1123.73,1123.99,1123.73,1123.87,0
    2004-01-12 08:35:00,1123.9,1123.9,1123.74,1123.74,0
    2004-01-12 08:36:00,1123.64,1123.7,1123.56,1123.7,0
    2004-01-12 08:37:00,1123.86,1123.9,1123.76,1123.8,0
    2004-01-12 08:38:00,1123.92,1124.07,1123.92,1124.07,0
    2004-01-12 08:39:00,1124.05,1124.74,1124.04,1124.74,0
    2004-01-12 08:40:00,1124.76,1124.94,1124.76,1124.89,0
    2004-01-12 08:41:00,1124.94,1125.1,1124.94,1125.1,0
    2004-01-12 08:42:00,1124.84,1124.84,1124.58,1124.58,0
    2004-01-12 08:43:00,1124.51,1124.51,1124.32,1124.32,0
    2004-01-12 08:44:00,1124.19,1124.19,1123.72,1123.72,0
    2004-01-12 08:45:00,1123.68,1123.74,1123.62,1123.62,0
    2004-01-12 08:46:00,1123.8,1123.87,1123.8,1123.84,0
    2004-01-12 08:47:00,1123.66,1123.66,1123.56,1123.56,0
    2004-01-12 08:48:00,1123.58,1123.58,1123.41,1123.41,0
    2004-01-12 08:49:00,1123.34,1123.34,1122.8,1122.8,0
    2004-01-12 08:50:00,1122.78,1122.78,1122.65,1122.65,0
    2004-01-12 08:51:00,1122.8,1122.8,1122.56,1122.56,0
    2004-01-12 08:52:00,1122.42,1122.42,1122.02,1122.02,0
    2004-01-12 08:53:00,1121.91,1121.91,1121.73,1121.73,0
    2004-01-12 08:54:00,1121.86,1121.87,1121.65,1121.72,0
    2004-01-12 08:55:00,1121.68,1122.13,1121.68,1121.92,0
    2004-01-12 08:56:00,1121.95,1122.13,1121.94,1122.12,0
    2004-01-12 08:57:00,1122.23,1122.42,1122.23,1122.42,0
    2004-01-12 08:58:00,1122.27,1122.27,1122.2,1122.2,0
    2004-01-12 08:59:00,1122.08,1122.15,1122.08,1122.15,0
    2004-01-12 09:00:00,1122.12,1122.38,1122.03,1122.35,0
    2004-01-12 09:01:00,1122.29,1122.29,1122.03,1122.03,0
    2004-01-12 09:02:00,1121.83,1121.83,1121.76,1121.76,0
    2004-01-12 09:03:00,1121.44,1121.93,1121.44,1121.93,0
    2004-01-12 09:04:00,1122.03,1122.03,1121.62,1121.62,0
    2004-01-12 09:05:00,1121.7,1121.7,1121.54,1121.54,0
    2004-01-12 09:06:00,1121.66,1121.86,1121.66,1121.77,0
    2004-01-12 09:07:00,1121.67,1121.67,1121.43,1121.43,0
    2004-01-12 09:08:00,1121.4,1121.4,1121.2,1121.2,0
    2004-01-12 09:09:00,1121.16,1121.16,1120.9,1120.9,0
    2004-01-12 09:10:00,1121.16,1121.2,1121.1,1121.2,0
    2004-01-12 09:11:00,1121.23,1121.23,1121.19,1121.19,0
    2004-01-12 09:12:00,1121.13,1121.14,1121.05,1121.05,0
    2004-01-12 09:13:00,1121.1,1121.38,1121.1,1121.38,0
    2004-01-12 09:14:00,1121.4,1121.44,1121.4,1121.44,0
    2004-01-12 09:15:00,1121.45,1121.73,1121.45,1121.73,0
    2004-01-12 09:16:00,1121.63,1121.76,1121.63,1121.76,0
    2004-01-12 09:17:00,1121.81,1122.03,1121.81,1122.01,0
    2004-01-12 09:18:00,1122.03,1122.03,1121.95,1121.95,0
    2004-01-12 09:19:00,1121.97,1122.45,1121.97,1122.45,0
    2004-01-12 09:20:00,1122.48,1122.61,1122.48,1122.61,0
    
    

    I have found couple of threads regarding issues with resampling and plotting and there was recommendation to initialize Cerebro with runonce=False, but that did not help in this particular case.

    BR,
    Dimitar


  • administrators

    This is probably done with the latest release, including your own PR and the additional fixes. Is it so?



  • @backtrader, yes fixed


Log in to reply
 

Looks like your connection to Backtrader Community was lost, please wait while we try to reconnect.