For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

Evaluate Weekly Trend, Execute Trades on Minute basis



  • Hi, noob here looking for help.

    Confused with datafeed timeframes. Hacked together a simple example from the tutorials to illustrate:

    The below program uses an "indicator," baseline, to determine trades. If current price is below baseline, it buys, if above, it sells.

    Baseline is average of the last 5 day's highs and last 5 day's lows, divided by 2.

    However, I can't seem to figure out how to get those daily highs and lows, while executing trades on a minute basis. I can get them if I set the datafeed to daily though. If I set it to minutes, it just takes the last 5 prices on a minute basis, instead of daily highs and lows...

    I know this may sound like a simple question, but if someone could give advice/amend the below code to work, I will be able to continue my backtrader journey. Thank you!

    #Making sure 5 days have passed
    length = []
    
    class TestStrategy(bt.Strategy):
    
        def log(self, txt, dt=None):
            ''' Logging function for this strategy'''
            dt = dt or self.datas[0].datetime.date(0)
            print('%s, %s' % (dt.isoformat(), txt))
    
        def __init__(self):
            self.datalow = self.datas[0].low
            self.datahigh = self.datas[0].high
            self.order = None
            self.buyprice = None
            self.buycomm = None
    
    
        def notify_order(self, order):
            if order.status in [order.Submitted, order.Accepted]:
    
                return
    
            if order.status in [order.Completed]:
                if order.isbuy():
                    self.log('BUY EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
                elif order.issell():
                    self.log('SELL EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
    
            elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                self.log('Order Canceled/Margin/Rejected')
    
    
        def notify_trade(self, trade):
            if not trade.isclosed:
                return
    
            self.log('OPERATION PROFIT, GROSS %.8f, NET %.f' %
                     (trade.pnl, trade.pnlcomm))
    
        def next(self):
            ################################RelevantCode
    
            #Needs 5 previous days of data for the indicator to work
            daysAgo = 5
            length.append(self.data[0])
    
            #If there's 5 days of data....
            if len(length) >= daysAgo + 1:
                self.log('Low, %.2f' % self.datahigh[0])
    
                #average the daily highs of past 5 days
                last5highavg = (self.datahigh[-1] + self.datahigh[-2] + self.datahigh[-3] + self.datahigh[-4] + self.datahigh[-5]) / 5
    
                #average the daily lows of past 5 days
                last5lowavg = (self.datalow[-1] + self.datalow[-2] + self.datalow[-3] + self.datalow[-4] + self.datalow[-5]) / 5
              
                #calculate indicator on a daily basis
                baseline = (last5highavg + last5lowavg) / 2
    
               ################################RelevantCode
    
                if self.order:
                    return
    
                if not self.position:
    
                    if self.data[0] < baseline:
                        self.log('BUY CREATE, %.8f' % self.data[0])
                        self.order = self.buy(exectype=bt.Order.Limit, price=self.data[0], size=310)
    
                else:
    
                    if self.data[0] > baseline:
                        self.log('SELL CREATE, %.8f' % self.data[0])
                        self.order = self.sell(exectype=bt.Order.Limit, price=self.data[0])
    
            else:
                print("Fewer than 5 days")
    
    
    cerebro.addstrategy(TestStrategy)
    
    
    #Alpaca data. I chose minutes for execution....
    DataFactory = alpaca_backtrader_api.AlpacaData
    dataMinutes = DataFactory(dataname='DSX', historical=True, fromdate=datetime(2020, 1, 15), todate=datetime(2020, 1, 31), timeframe=bt.TimeFrame.Minutes)
    cerebro.adddata(dataMinutes)
    
    cerebro.broker.setcash(1000.0)
    
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
    cerebro.run()
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    


  • Add minute data feed, resample it to daily bars. You will have two data feeds. Check your indicator against second data feed and issue your orders using first data feed.

    Check out Docs - Data Resampling



  • @ab_trader Hi, thanks for your prompt response. Still very unclear though. Hoping you can still help me out with this.

    @ab_trader said in Evaluate Weekly Trend, Execute Trades on Minute basis:

    Add minute data feed, resample it to daily bars.

    In my above code snippet I already the minute feed. In the below code snipped I resample it to daily bars.

    You will have two data feeds. Check your indicator against second data feed and issue your orders using first data feed.

    How would you access the separate data feeds?

    Given my code snippet above, is there a practical way to access the Minute feed only when making orders and the Day feed only when checking the indicator? A passed argument, perhaps? Unsure on practical implementation.

    Below, modified the original code snippet with the minute feed resampled to daily bars. However, it only issues orders based on the incorrect Day feed.

    import alpaca_backtrader_api
    import backtrader as bt
    import pandas as pd
    from datetime import datetime
    
    ALPACA_API_KEY = MY_ALPACA_API_KEY
    ALPACA_SECRET_KEY = MY_ALPACA_SECRET_KEY
    ALPACA_PAPER = True
    
    cerebro = bt.Cerebro()
    
    store = alpaca_backtrader_api.AlpacaStore(
        key_id=ALPACA_API_KEY,
        secret_key=ALPACA_SECRET_KEY,
        paper=ALPACA_PAPER
    )
    if not ALPACA_PAPER:
        broker = alpaca_backtrader_api.AlpacaBroker()
        cerebro.setbroker(broker)
    
    length = []
    
    
    class TestStrategy(bt.Strategy):
    
        def log(self, txt, dt=None):
            ''' Logging function for this strategy'''
            dt = dt or self.datas[0].datetime.date(0)
            print('%s, %s' % (dt.isoformat(), txt))
    
        def __init__(self):
            self.datalow = self.datas[0].low
            self.datahigh = self.datas[0].high
            self.order = None
            self.buyprice = None
            self.buycomm = None
    
    
        def notify_order(self, order):
            if order.status in [order.Submitted, order.Accepted]:
    
                return
    
            if order.status in [order.Completed]:
                if order.isbuy():
                    self.log('BUY EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
                elif order.issell():
                    self.log('SELL EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
    
            elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                self.log('Order Canceled/Margin/Rejected')
    
    
        def notify_trade(self, trade):
            if not trade.isclosed:
                return
    
            self.log('OPERATION PROFIT, GROSS %.8f, NET %.f' %
                     (trade.pnl, trade.pnlcomm))
    
        def next(self):
    
            daysAgo = 5
            length.append(self.data[0])
    
            if len(length) >= daysAgo + 1:
                self.log('Low, %.2f' % self.datahigh[0])
                last5highavg = (self.datahigh[-1] + self.datahigh[-2] + self.datahigh[-3] + self.datahigh[-4] + self.datahigh[-5]) / 5
                last5lowavg = (self.datalow[-1] + self.datalow[-2] + self.datalow[-3] + self.datalow[-4] + self.datalow[-5]) / 5
                print(self.datas[0].datetime.date(0),  "---> Above trade was made today")
    
                baseline = (last5highavg + last5lowavg) / 2
    
                print(
                    "current price:",
                    self.data[0],
                    "baseline:", baseline, )
    
                if self.order:
                    return
    
                if not self.position:
    
                    if self.data[0] < baseline:
                        self.log('BUY CREATE, %.8f' % self.data[0])
                        self.order = self.buy(exectype=bt.Order.Limit, price=self.data[0], size=310)
    
                else:
    
                    if self.data[0] > baseline:
                        self.log('SELL CREATE, %.8f' % self.data[0])
                        self.order = self.sell(exectype=bt.Order.Limit, price=self.data[0])
    
            else:
                print("Fewer than 5 days")
    
    
    cerebro.addstrategy(TestStrategy)
    
    
    DataFactory = alpaca_backtrader_api.AlpacaData
    dataMinutes = DataFactory(dataname='DSX', historical=True, fromdate=datetime(2020, 1, 15), todate=datetime(2020, 1, 31), timeframe=bt.TimeFrame.Minutes)
    
    #Added the resampling code snippet here
    cerebro.resampledata(dataMinutes, timeframe=bt.TimeFrame.Days, compression=1)
    
    
    cerebro.broker.setcash(1000.0)
    
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
    cerebro.run()
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    


  • @Andrew-M remove your alpaca keys from the script



  • @ab_trader I regenerated them immediately after posting. The above keys are disabled. How can I delete/edit the post?



  • @Andrew-M said in Evaluate Weekly Trend, Execute Trades on Minute basis:

    How would you access the separate data feeds?
    Given my code snippet above, is there a practical way to access the Minute feed only when making orders and the Day feed only when checking the indicator? A passed argument, perhaps? Unsure on practical implementation.

    After minute data feed resampling, you have two data feeds in bt. Check out the blog Blog - Multi-Data Example. It shows how to access different data feeds.

    Indicators take data feeds as parameters - Docs - Indicators - Usage



  • @Andrew-M ok, editing is disabled.



  • Thank you again for your quick response and the heads up. I'll take a look at the indicator docs and get back to you soon!



  • I know my question might seem simple, but I am new to python (but an experienced trader). The documentation is helpful but the examples are rather complicated and confusing for a beginner.

    I've marked up the code for extra clarity. Again, it's calculating a simple "baseline" number that should be from Daily Bars and the trades should be coming from Minute bars. Example: The previous 5 day's highs average to 5 dollars, the lows average to 3 dollars, so the "baseline" indicator on day 1 should be 4 dollars. If the stock price, at any minute is below 4, buy order is placed, and if price is above 4, it sells.

    To help me learn, I would greatly appreciate if you could point out where exactly, specifically, the separate data feeds would be referenced in the simple code below to achieve the desired result. If we can work this small example out I'd be able to run and expand on it. Thank you again for your help.

    #setting cerebro
    cerebro = bt.Cerebro()
    
    #using alpaca
    store = alpaca_backtrader_api.AlpacaStore(
        key_id=ALPACA_API_KEY,
        secret_key=ALPACA_SECRET_KEY,
        paper=ALPACA_PAPER
    )
    if not ALPACA_PAPER:
        broker = alpaca_backtrader_api.AlpacaBroker()
        cerebro.setbroker(broker)
    
    length = []
    
    class TestStrategy(bt.Strategy):
    
        #this is the logging function
        def log(self, txt, dt=None):
            dt = dt or self.datas[0].datetime.date(0)
            print('%s, %s' % (dt.isoformat(), txt))
    
        #keeping references to certain data
        def __init__(self):
            self.datalow = self.datas[0].low
            self.datahigh = self.datas[0].high
            self.order = None
            self.buyprice = None
            self.buycomm = None
    
        #order notifications
        def notify_order(self, order):
            if order.status in [order.Submitted, order.Accepted]:
                return
            if order.status in [order.Completed]:
                if order.isbuy():
                    self.log('BUY EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
                elif order.issell():
                    self.log('SELL EXECUTED, %.8f' % order.executed.price)
                    self.log('Current Shares: %.8f' % self.getposition(data=dataMinutes).size)
    
            elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                self.log('Order Canceled/Margin/Rejected')
    
        #trade notifications
        def notify_trade(self, trade):
            if not trade.isclosed:
                return
    
            self.log('OPERATION PROFIT, GROSS %.8f, NET %.f' %
                     (trade.pnl, trade.pnlcomm))
    
        #is called for each bar of data
        def next(self):
    
            daysAgo = 5
            length.append(self.data[0])
    
            #This is the indicator of sorts. It calculates "baseline" and decides
            #whether to start placing orders or not.
            #This should use Daily Data only.
            if len(length) >= daysAgo + 1:
                last5highavg = (self.datahigh[-1] + self.datahigh[-2] + self.datahigh[-3] + self.datahigh[-4] + self.datahigh[-5]) / 5
                last5lowavg = (self.datalow[-1] + self.datalow[-2] + self.datalow[-3] + self.datalow[-4] + self.datalow[-5]) / 5
    
                baseline = (last5highavg + last5lowavg) / 2
    
                #order logic. This should be based on Minute Bars
                if self.order:
                    return
                if not self.position:
                    if self.data[0] < baseline:
                        self.log('BUY CREATE, %.8f' % self.data[0])
                        self.order = self.buy(exectype=bt.Order.Limit, price=self.data[0], size=310)
                else:
                    if self.data[0] > baseline:
                        self.log('SELL CREATE, %.8f' % self.data[0])
                        self.order = self.sell(exectype=bt.Order.Limit, price=self.data[0])
            else:
                print("Fewer than 5 days")
    
    #adding the strategy and setting cash
    cerebro.addstrategy(TestStrategy)
    cerebro.broker.setcash(1000.0)
    
    #data feed resampling from minutes to days
    DataFactory = alpaca_backtrader_api.AlpacaData
    dataMinutes = DataFactory(dataname='DSX', historical=True, fromdate=datetime(2020, 1, 15), todate=datetime(2020, 1, 31), timeframe=bt.TimeFrame.Minutes)
    cerebro.resampledata(dataMinutes, timeframe=bt.TimeFrame.Days, compression=1)
    
    #dataMinutes = DataFactory(dataname='DSX', historical=True, fromdate=datetime(2020, 1, 15), todate=datetime(2020, 1, 31), timeframe=bt.TimeFrame.Days)
    
    #printing the results
    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
    cerebro.run()
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    


  • If I would be you, then I would go step by step from the very simple script to your final goal:

    • compile baseline script that add one data feed (minutes) and print prices
    • resample to daily data feed, print prices for both data feeds
    • develop indicator, apply it to daily data feed, print prices and indicator values
    • add orders and other trading stuff

    Couple comments on your script:

    • i don't see two data feeds added to bt, only daily data feed. But I am not familiar with alpaca broker
    • your indicator can be easier implemented in the __init__() or as a separate indicator class
    • indicator and orders in your script are applied to the same data feed, daily data feed I think
    • length.append(self.data[0]) - this will return huge list of data feeds, I don't think you need it; if you implement your indicator in the __init()__, you don't need to check this. bt will do it for you.

    Probably there are more features, but I think the above listed is enough.



  • length.append(self.data[0]) - this will return huge list of data feeds, I don't think you need it; if you implement your indicator in the __init()__, you don't need to check this. bt will do it for you.

    @ab_trader Did all the above, but still having trouble with this last part. Made a dummy indicator class but I get an "array index out of bound exception" on the " self.dayHigh[0] = self.data1.high[-5]" line if I don't give a massive self.addminperiod. Data1 is days, but it seems self.addminperiod only cares about data0 (minutes). If I switch data1 to data0, then having self.addminperiod(5) works "correctly" since I need data from 5 previous bars ago (although of course the indicator should only care about days)

    How can I sync up self.addminperiod to days?

    Once I have this basic script set up I have the foundation to build on my own. Just need to fix this! Thanks again in advance.

    Below is the simple code and the output.

    class dummyIndicator(bt.Indicator,):
        lines = ('dayHigh',)
        params = (
            ('period', 5),
        )
    
        def __init__(self):
            self.addminperiod(1000)
    
        def next(self):
            self.dayHigh[0] = self.data1.high[-5]
    
    class TestStrategy(bt.Strategy):
        params = (
            # changes the starting indicator value
            ('maperiod', 5),
    
        )
    
        def log(self, txt, dt=None):
            ''' Logging function fot this strategy'''
            dt = dt or self.datas[0].datetime.date(0)
            print('%s, %s' % (dt.isoformat(), txt))
    
        def __init__(self):
            # Keep a reference to the "close" line in the data[0] dataseries
            self.dataclose = self.datas[0].close
    
            # To keep track of pending orders and buy price/commission
            self.order = None
            self.buyprice = None
            self.buycomm = None
    
            #"Unexpected argument" but code still runs
            self.dayHigh = dummyIndicator(self.data0, self.data1)
    
        def notify_order(self, order):
            if order.status in [order.Submitted, order.Accepted]:
                # Buy/Sell order submitted/accepted to/by broker - Nothing to do
                return
    
            # Check if an order has been completed
            # Attention: broker could reject order if not enough cash
            if order.status in [order.Completed]:
                if order.isbuy():
                    self.log(
                        'BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                        (order.executed.price,
                         order.executed.value,
                         order.executed.comm))
    
                    self.buyprice = order.executed.price
                    self.buycomm = order.executed.comm
                else:  # Sell
                    self.log('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                             (order.executed.price,
                              order.executed.value,
                              order.executed.comm))
    
                self.bar_executed = len(self)
    
            elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                self.log('Order Canceled/Margin/Rejected')
    
            self.order = None
    
        def notify_trade(self, trade):
            if not trade.isclosed:
                return
    
            self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %
                     (trade.pnl, trade.pnlcomm))
    
        def next(self):
    
            self.log('Current Date')
            print("Indicator Value", self.dayHigh[0])
    
            # Check if an order is pending ... if yes, we cannot send a 2nd one
            if self.order:
                return
    
            # Check if we are in the market
            if not self.position:
    
                # Not yet ... we MIGHT BUY if ...
                if self.data0.close[0] > self.dayHigh[0]:
    
                    # BUY, BUY, BUY!!! (with all possible default parameters)
                    self.log('BUY CREATE, %.2f' % self.dataclose[0])
    
                    # Keep track of the created order to avoid a 2nd order
                    self.order = self.buy()
    
            else:
    
                if self.data0.close[0] < self.dayHigh[0]:
                    # SELL, SELL, SELL!!! (with all possible default parameters)
                    self.log('SELL CREATE, %.2f' % self.dataclose[0])
    
                    # Keep track of the created order to avoid a 2nd order
                    self.order = self.sell()
    
    if __name__ == '__main__':
        DataFactory = alpaca_backtrader_api.AlpacaData
        data0 = DataFactory(dataname='DSX',
                            historical=True,
                            fromdate=datetime(2020, 1, 20),
                            timeframe=bt.TimeFrame.Minutes,
                            reversed=True)
        cerebro.adddata(data0)
        data1 = cerebro.resampledata(data0, timeframe=bt.TimeFrame.Days)
        cerebro.adddata(data1)
        cerebro.addstrategy(TestStrategy)
        cerebro.broker.setcash(1000.0)
        print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
        cerebro.run()
        print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    

    OUTPUT:

    Starting Portfolio Value: 1000.00
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-28, Current Date
    Indicator Value 2.8
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, BUY CREATE, 2.86
    2020-01-29, BUY EXECUTED, Price: 2.80, Cost: 2.80, Comm 0.00
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, SELL CREATE, 2.76
    2020-01-29, SELL EXECUTED, Price: 2.76, Cost: 2.80, Comm 0.00
    2020-01-29, OPERATION PROFIT, GROSS -0.04, NET -0.04
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    2020-01-29, Current Date
    Indicator Value 2.78
    
    Final Portfolio Value: 999.90
    
    Process finished with exit code 0
    
    


  • (I cut out a few days in results for brevity)



  • Interesting. In your script you apply the indicator to the self.data0 ie 5 min data feed, but indicator itself works with the self.data1 which is daily bars. I would assume that self.addminperiod is also applied to minutes data feed, so you need lot to get 5 bars of daily data feed.

    Try this (didn' run it by myself):

    • indicator:
    class dummyIndicator(bt.Indicator,):
        lines = ('dayHigh',)
        params = (('period', 5),)
    
        def __init__(self):
            self.addminperiod(self.p.period)
    
        def next(self):
            self.dayHigh[0] = self.data.high[-self.p.period]
    
    • call in the strategy:
    self.dayHigh = dummyIndicator(self.data1)
    


});