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

Observing some difference between actual value and LinesOperation var



  • Hi,
    My first post here..

    I am seeing some rounding error when comparing the original data from the csv file vs the value returned from LineOperations in "next()".

    I tried to validate the High, Low, Open, all the fields are showing some delta between the two (original Data and Line Operation)

    import backtrader as bt
    from datetime import datetime
    
    filename = 'AAPL1.csv'
    
    csv_in = open(filename, "r")
    d = []
    for line in csv_in:
        field_list = line.split(',')  # split the line at commas
        d.append(field_list[2])
    csv_in.close()
    
    class SmaCross(bt.Strategy):
    
        def __init__(self):
            pass
    
        def next(self):
            print len(self.data.high),(round(float(d[len(self.data.high)]), 2) - self.data.high[0])
    
    
    cerebro = bt.Cerebro()  # create a "Cerebro" engine instance
    data = bt.feeds.YahooFinanceCSVData(dataname=filename,
                                     fromdate=datetime(2020, 2, 3),
                                     todate=datetime(2020, 2, 19))
    
    cerebro.adddata(data)  # Add the data feed
    cerebro.addstrategy(SmaCross)  # Add the trading strategy
    
    cerebro.run()  # run it all
    

    the AAPL1.CSV file used for this testing contains the following

    Date,Open,High,Low,Close,Adj Close,Volume
    2020-02-03,76.07499694824219,78.37249755859375,75.55500030517578,77.16500091552734,76.63629913330078,173985600
    2020-02-04,78.82749938964844,79.91000366210938,78.40750122070312,79.7125015258789,79.16633605957031,136616400
    2020-02-05,80.87999725341797,81.19000244140625,79.73750305175781,80.36250305175781,79.81189727783203,118826800
    2020-02-06,80.64250183105469,81.30500030517578,80.06500244140625,81.30249786376953,80.74544525146484,105425600
    2020-02-07,80.59249877929688,80.8499984741211,79.5,80.00749969482422,79.64789581298828,117684000
    2020-02-10,78.54499816894531,80.38749694824219,78.4625015258789,80.38749694824219,80.02619171142578,109348800
    2020-02-11,80.9000015258789,80.9749984741211,79.67749786376953,79.90249633789062,79.54336547851562,94323200
    2020-02-12,80.36750030517578,81.80500030517578,80.36750030517578,81.80000305175781,81.4323501586914,113730400
    2020-02-13,81.04750061035156,81.55500030517578,80.8375015258789,81.21749877929688,80.85246276855469,94747600
    2020-02-14,81.18499755859375,81.49500274658203,80.7125015258789,81.23750305175781,80.87237548828125,80113600
    2020-02-18,78.83999633789062,79.9375,78.65249633789062,79.75,79.39155578613281,152531200
    
    

    And the result I see is

    1 0.53
    2 0.55
    3 0.56
    4 0.56
    5 0.36
    6 0.36
    7 0.36
    8 0.37
    9 0.37
    10 0.37
    11 0.36
    
    


  • I found out that the price was divided by the adjfactor that is

    adjfactor = c / adjustedclose
    

    After setting the adjclose as False, the values are what I was looking for.

    data = bt.feeds.YahooFinanceCSVData(dataname=filename,adjclose=False)
    

    All good now.
    Thanks.


Log in to reply
 

});