Navigation

    Backtrader Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

    How is the getvalue() function calculated

    General Code/Help
    getvalue
    2
    2
    1134
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mạnh Phạm Nguyễn last edited by

      Hi, I've started using backtrader for a while now but I still haven't figured out how the self.broker.getvalue() is calculated (the forth line in each block), it's very different from cash value, as shown in my code. The order.execute.value is also unknown to me how it's calculated.

      from __future__ import (absolute_import, division, print_function,
                              unicode_literals)
      
      import argparse
      import datetime
      import csv
      import datetime  # For datetime objects
      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt
      # The above could be sent to an independent module
      import backtrader as bt
      import backtrader.feeds as btfeeds
      import backtrader.indicators as btind
      pd.set_option('display.width', 500)
      pd.set_option('display.max_columns', 100)
      pd.set_option('display.notebook_repr_html', True)
      import seaborn as sns
      sns.set_style("whitegrid")
      sns.set_context("poster")
      
      count = 0
      count1 = 0
      mon = 1000000
      value = []
      class PairTradingStrategy(bt.Strategy):
          params = dict(
              signal = [0 for i in range(100000)],
              TMOM = 24, #TMOM has to be even 
              printout = True
          )
      
          def log(self, txt, dt=None):
              if self.p.printout:
                  dt = dt or self.datas[0].datetime.datetime(0)
                  
                  print('%s, %s' % (dt.isoformat(), txt))
          def notify_order(self, order):
              global count
              if order.status in [bt.Order.Submitted, bt.Order.Accepted]:
                  return  # Await further notifications
      
              if order.status == order.Completed:
                  if order.isbuy():
                      buytxt = 'BUY COMPLETE, %.8f %.8f %.8f' % (order.executed.value,
                                                                 order.executed.size,order.executed.price)
                      self.log(buytxt)
                      print(self.broker.getcash(),self.broker.getcash()+abs(order.executed.size*order.executed.price))
                  else:
                      selltxt = 'SELL COMPLETE, %.8f %.8f %.8f' % (order.executed.value,
                                                                 order.executed.size,order.executed.price)
                      self.log(selltxt)
                      print(self.broker.getcash(),self.broker.getcash()-abs(order.executed.size*order.executed.price))
                  print(self.broker.getvalue())
                  print()
              elif order.status in [order.Expired, order.Canceled, order.Margin]:
                  self.log('%s ,' % order.Status[order.status])
                  pass  # Simply log
      
              # Allow new orders
              self.orderid = None
      
          def __init__(self):
              # To control operation entries
              self.orderid = None
              self.signal = self.p.signal
              self.TMOM = self.p.TMOM
              self.count = 0
      
          def next(self):
              global value 
              value.append(self.broker.getvalue())
              if self.orderid or self.count < self.TMOM:
                  self.count += 1 
                  return  # if an order is active, no new orders are allowed
              
              if self.datas[0].close[0] >= self.datas[0].close[-self.TMOM]:
                  self.signal[self.count] = 1
              else:
                  self.signal[self.count] = -1
              
              if self.signal[self.count] == 1 and (self.count % (2*self.TMOM) == self.TMOM or self.count % (2*self.TMOM) == self.TMOM+self.TMOM//2):
                  self.log('BUY CREATE , price = %.8f, qty = %.8f' % ( self.datas[0].close[0], 1000/self.datas[0].close[0]))
                  self.buy(data=self.datas[0], size=1000/self.datas[0].close[0])                
      
              if self.signal[self.count] == -1 and (self.count % (2*self.TMOM) == self.TMOM or self.count % (2*self.TMOM) == self.TMOM+self.TMOM//2):
                  self.log('SELL CREATE , price = %.8f, qty = %.8f' % (self.datas[0].close[0], 1000/self.datas[0].close[0]))
                  self.sell(data=self.datas[0], size=1000/self.datas[0].close[0])
      
              if self.signal[self.count-self.TMOM] == 1 and (self.count % (2*self.TMOM) == 0 or self.count % (2*self.TMOM) == self.TMOM//2):
                  self.log('SELL CREATE , price = %.8f, qty = %.8f' % (self.datas[0].close[0], 1000/self.datas[0].close[-self.TMOM]))
                  self.sell(data=self.datas[0], size=1000/self.datas[0].close[-self.TMOM])
      
              if self.signal[self.count-self.TMOM] == -1 and (self.count % (2*self.TMOM) == 0 or self.count % (2*self.TMOM) == self.TMOM//2):
                  self.log('BUY CREATE , price = %.8f, qty = %.8f' % (self.datas[0].close[0], 1000/self.datas[0].close[-self.TMOM]))
                  self.buy(data=self.datas[0], size=1000/self.datas[0].close[-self.TMOM])
              
              self.count += 1
      
          def stop(self):
              print('==================================================')
              print('Starting Value - %.2f' % self.broker.startingcash)
              print('Ending   Value - %.2f' % self.broker.getvalue())
              print('==================================================')
      
      if __name__ == '__main__':
              # Create a cerebro
          cerebro = bt.Cerebro()
      
          data1 = bt.feeds.GenericCSVData(
          dataname='Downloads/Bitfinex/IOTAUSDT1h.csv',
      
          fromdate=datetime.datetime(2018, 5, 1, 0, 0, 0),
          todate=datetime.datetime(2018, 6, 1, 0, 0, 0),
      
          nullvalue=0.0,
      
          dtformat=('%Y-%m-%d %H:%M:%S'),
          timeframe = bt.TimeFrame.Minutes, 
          compression = 60,
          
          datetime=0, # count index
          open=1,
          high=2,
          low=3,
          close=4,
          volume=5,
          openinterest = None
      )
      
          cerebro.adddata(data1)
          # Add the strategy
          cerebro.addstrategy(PairTradingStrategy)
      
          # Add the commission - only stocks like a for each operation
          cerebro.broker.setcash(10000.0)
      
          # Add the commission - only stocks like a for each operation
          cerebro.broker.setcommission(commission=0.0)
          
          # And run it
          cerebro.run()
          plt.plot(value)
          plt.show()
          cerebro.plot(iplot=True, volume=False)
      

      The results show

      2018-05-02T00:00:00, SELL CREATE , price = 1.86840000, qty = 535.21729822
      2018-05-02T01:00:00, SELL COMPLETE, -999.94647827 -535.21729822 1.86830000
      10999.946478270178 10000.0
      9999.5183044316
      
      2018-05-02T12:00:00, BUY CREATE , price = 1.99720000, qty = 500.70098137
      2018-05-02T13:00:00, BUY COMPLETE, -935.45964350 500.70098137 1.99980000
      9998.644655718606 10999.946478270178
      9928.921695683313
      
      2018-05-03T00:00:00, BUY CREATE , price = 2.15340000, qty = 535.21729822
      2018-05-03T01:00:00, BUY COMPLETE, 1013.62251833 535.21729822 2.15320000
      8846.214769184673 9998.644655718606
      9952.213166941532
      
      2018-05-03T12:00:00, SELL CREATE , price = 2.23000000, qty = 500.70098137
      2018-05-03T13:00:00, SELL COMPLETE, 1078.10935309 -500.70098137 2.23000000
      9962.777957648523 8846.214769184673
      9962.777957648523
      
      2018-05-04T00:00:00, BUY CREATE , price = 2.58970000, qty = 386.14511333
      2018-05-04T01:00:00, BUY COMPLETE, 996.75638105 386.14511333 2.58130000
      8966.021576600524 9962.777957648523
      9961.967164892605
      
      2018-05-04T12:00:00, BUY CREATE , price = 2.58880000, qty = 386.27935723
      2018-05-04T13:00:00, BUY COMPLETE, 1000.15451174 386.27935723 2.58920000
      7965.867064857632 8966.021576600524
      9916.470580374771
      
      2018-05-05T00:00:00, SELL CREATE , price = 2.38190000, qty = 386.14511333
      2018-05-05T01:00:00, SELL COMPLETE, 998.28191933 -386.14511333 2.37700000
      8883.733999251577 7965.867064857632
      9818.53004375096
      
      2018-05-05T12:00:00, SELL CREATE , price = 2.38860000, qty = 386.27935723
      2018-05-05T13:00:00, SELL COMPLETE, 998.62897346 -386.27935723 2.38860000
      9806.400871933902 8883.733999251577
      9806.400871933902
      
      2018-05-06T00:00:00, SELL CREATE , price = 2.33150000, qty = 428.90842805
      2018-05-06T01:00:00, SELL COMPLETE, -1000.04289084 -428.90842805 2.33160000
      10806.443762776707 9806.400871933902
      9804.213438950845
      
      2018-05-06T12:00:00, BUY CREATE , price = 2.39230000, qty = 418.00777494
      2018-05-06T13:00:00, BUY COMPLETE, -974.62692806 418.00777494 2.38940000
      9807.655985324047 10806.443762776707
      9782.224761627755
      
      2018-05-07T00:00:00, BUY CREATE , price = 2.31220000, qty = 428.90842805
      2018-05-07T01:00:00, BUY COMPLETE, 941.10161444 428.90842805 2.31220000
      8815.933917985425 9807.655985324049
      9772.12670317123
      
      2018-05-07T12:00:00, SELL CREATE , price = 2.14400000, qty = 418.00777494
      2018-05-07T13:00:00, SELL COMPLETE, 966.51757723 -418.00777494 2.14400000
      9712.142587466678 8815.933917985425
      9712.142587466678
      
      2018-05-08T00:00:00, SELL CREATE , price = 2.21500000, qty = 451.46726862
      2018-05-08T01:00:00, SELL COMPLETE, -1000.00000000 -451.46726862 2.21500000
      10712.142587466678 9712.142587466678
      9707.627914780449
      
      2018-05-08T12:00:00, BUY CREATE , price = 2.25200000, qty = 444.04973357
      2018-05-08T13:00:00, BUY COMPLETE, -983.57015986 444.04973357 2.25900000
      9709.034239331688 10712.142587466678
      9692.301763759435
      
      2018-05-09T00:00:00, BUY CREATE , price = 2.36000000, qty = 451.46726862
      2018-05-09T01:00:00, BUY COMPLETE, 1031.52753108 451.46726862 2.36000000
      8643.57148538135 9709.034239331688
      9711.111449857372
      
      2018-05-09T12:00:00, SELL CREATE , price = 2.30740000, qty = 444.04973357
      2018-05-09T13:00:00, SELL COMPLETE, 1047.95737123 -444.04973357 2.30750000
      9668.216245594494 8643.57148538135
      9668.216245594494
      
      2018-05-10T00:00:00, SELL CREATE , price = 2.31950000, qty = 431.12739815
      2018-05-10T01:00:00, SELL COMPLETE, -999.56887260 -431.12739815 2.31850000
      10667.785118196349 9668.216245594494
      9671.104799162074
      
      2018-05-10T12:00:00, SELL CREATE , price = 2.29280000, qty = 436.14794138
      2018-05-10T13:00:00, SELL COMPLETE, -1000.00000000 -436.14794138 2.29280000
      11667.785118196349 10667.785118196349
      9701.585195952717
      
      2018-05-11T00:00:00, BUY CREATE , price = 2.21110000, qty = 431.12739815
      2018-05-11T01:00:00, BUY COMPLETE, -993.99681528 431.12739815 2.21030000
      10714.864230073908 11667.785118196349
      9756.778047240692
      
      2018-05-11T12:00:00, BUY CREATE , price = 2.13150000, qty = 436.14794138
      2018-05-11T13:00:00, BUY COMPLETE, -1005.57205732 436.14794138 2.13140000
      9785.258507812918 10714.864230073908
      9785.258507812918
      
      2018-05-12T00:00:00, SELL CREATE , price = 1.86750000, qty = 535.47523427
      2018-05-12T01:00:00, SELL COMPLETE, -999.19678715 -535.47523427 1.86600000
      10784.455294961512 9785.258507812918
      9779.207637665662
      
      2018-05-12T12:00:00, SELL CREATE , price = 1.74940000, qty = 571.62455699
      2018-05-12T13:00:00, SELL COMPLETE, -1000.05716246 -571.62455699 1.74950000
      11784.512457417211 10784.455294961512
      9848.637762417557
      
      2018-05-13T00:00:00, BUY CREATE , price = 1.83870000, qty = 535.47523427
      2018-05-13T01:00:00, BUY COMPLETE, -966.98688364 535.47523427 1.83600000
      10801.37992729673 11784.512457417211
      9748.447493319367
      
      2018-05-13T12:00:00, BUY CREATE , price = 1.83490000, qty = 571.62455699
      2018-05-13T13:00:00, BUY COMPLETE, -1032.26706596 571.62455699 1.83840000
      9750.505341724534 10801.37992729673
      9750.505341724534
      
      2018-05-14T00:00:00, BUY CREATE , price = 1.94630000, qty = 513.79540667
      2018-05-14T01:00:00, BUY COMPLETE, 1001.54138622 513.79540667 1.94930000
      8748.963955504527 9750.505341724534
      9768.693699120618
      
      2018-05-14T12:00:00, BUY CREATE , price = 1.87300000, qty = 533.90282968
      2018-05-14T13:00:00, BUY COMPLETE, 997.54404698 533.90282968 1.86840000
      7751.419908521078 8748.963955504527
      9754.199857135502
      
      2018-05-15T00:00:00, SELL CREATE , price = 1.95190000, qty = 513.79540667
      2018-05-15T01:00:00, SELL COMPLETE, 980.35949425 -513.79540667 1.95590000
      8756.3523444251 7751.419908521078
      9796.448446934444
      
      2018-05-15T12:00:00, SELL CREATE , price = 1.92640000, qty = 533.90282968
      2018-05-15T13:00:00, SELL COMPLETE, 1018.72593895 -533.90282968 1.92640000
      9784.86275553028 8756.3523444251
      9784.86275553028
      
      2018-05-16T00:00:00, BUY CREATE , price = 1.96650000, qty = 508.51767099
      2018-05-16T01:00:00, BUY COMPLETE, 999.94914823 508.51767099 1.96640000
      8784.913607297378 9784.86275553028
      9766.251008772078
      
      2018-05-16T12:00:00, SELL CREATE , price = 1.87230000, qty = 534.10244085
      2018-05-16T13:00:00, SELL COMPLETE, 952.10307012 -534.10244085 1.87010000
      9783.738581927511 8784.913607297378
      9735.529200082032
      
      2018-05-17T00:00:00, SELL CREATE , price = 1.82180000, qty = 508.51767099
      2018-05-17T01:00:00, SELL COMPLETE, -928.70582253 -508.51767099 1.82630000
      10712.444404454844 9783.738581927511
      9728.627708412543
      
      2018-05-17T12:00:00, BUY CREATE , price = 1.91860000, qty = 534.10244085
      2018-05-17T13:00:00, BUY COMPLETE, -976.55190064 534.10244085 1.91710000
      9688.516615104847 10712.444404454844
      9688.516615104847
      
      2018-05-18T00:00:00, BUY CREATE , price = 1.82600000, qty = 547.64512596
      2018-05-18T01:00:00, BUY COMPLETE, 1000.00000000 547.64512596 1.82600000
      8688.516615104847 9688.516615104847
      9673.730196703971
      
      2018-05-18T12:00:00, SELL CREATE , price = 1.71550000, qty = 582.92043136
      2018-05-18T13:00:00, SELL COMPLETE, 939.48521358 -582.92043136 1.71550000
      9688.516615104847 8688.516615104847
      9629.430478555258
      
      2018-05-19T00:00:00, SELL CREATE , price = 1.71180000, qty = 547.64512596
      2018-05-19T01:00:00, SELL COMPLETE, -938.99233297 -547.64512596 1.71460000
      10627.508948073084 9688.516615104847
      9601.568988877514
      
      2018-05-19T12:00:00, BUY CREATE , price = 1.74820000, qty = 582.92043136
      2018-05-19T13:00:00, BUY COMPLETE, -999.50711939 582.92043136 1.74820000
      9608.447449967576 10627.508948073084
      9608.447449967576
      
      2018-05-20T00:00:00, BUY CREATE , price = 1.78190000, qty = 561.19872047
      2018-05-20T01:00:00, BUY COMPLETE, 1000.72955834 561.19872047 1.78320000
      8607.71789163097 9608.447449967576
      9611.141203825817
      
      2018-05-20T12:00:00, BUY CREATE , price = 1.77980000, qty = 561.86088325
      2018-05-20T13:00:00, BUY COMPLETE, 1000.05618609 561.86088325 1.77990000
      7607.661705542645 8607.71789163097
      9599.295606765907
      
      2018-05-21T00:00:00, SELL CREATE , price = 1.83500000, qty = 561.19872047
      2018-05-21T01:00:00, SELL COMPLETE, 999.80303449 -561.19872047 1.83600621
      8638.026041363959 7607.661705542645
      9671.288205652081
      
      2018-05-21T12:00:00, SELL CREATE , price = 1.82210000, qty = 561.86088325
      2018-05-21T13:00:00, SELL COMPLETE, 1000.98270994 -561.86088325 1.82140000
      9661.399454106964 8638.026041363959
      9661.399454106964
      
      2018-05-22T00:00:00, SELL CREATE , price = 1.72830000, qty = 578.60325175
      2018-05-22T01:00:00, SELL COMPLETE, -1000.69432390 -578.60325175 1.72950000
      10662.093778009064 9661.399454106964
      9671.728152828251
      
      2018-05-22T12:00:00, SELL CREATE , price = 1.70800000, qty = 585.48009368
      2018-05-22T13:00:00, SELL COMPLETE, -998.24355972 -585.48009368 1.70500000
      11660.337337728033 10662.093778009064
      9662.304683636976
      
      2018-05-23T00:00:00, BUY CREATE , price = 1.72510000, qty = 578.60325175
      2018-05-23T01:00:00, BUY COMPLETE, -993.56456224 578.60325175 1.72510000
      10662.188868133635 11660.337337728033
      9649.249758063377
      
      2018-05-23T12:00:00, BUY CREATE , price = 1.60620000, qty = 585.48009368
      2018-05-23T13:00:00, BUY COMPLETE, -1005.37332138 585.48009368 1.60620000
      9721.790741669935 10662.188868133635
      9721.790741669935
      
      2018-05-24T00:00:00, SELL CREATE , price = 1.42770000, qty = 700.42726063
      2018-05-24T01:00:00, SELL COMPLETE, -1002.17132451 -700.42726063 1.43080000
      10723.962066177884 9721.790741669935
      9713.245529090262
      
      2018-05-24T12:00:00, SELL CREATE , price = 1.51700000, qty = 659.19578115
      2018-05-24T13:00:00, SELL COMPLETE, -999.86816084 -659.19578115 1.51680000
      11723.830227021655 10723.962066177884
      9684.395664357678
      
      2018-05-25T00:00:00, BUY CREATE , price = 1.50730000, qty = 700.42726063
      2018-05-25T01:00:00, BUY COMPLETE, -1031.37633690 700.42726063 1.50830000
      10667.37578981496 11723.830227021655
      9669.48521631463
      
      2018-05-25T12:00:00, BUY CREATE , price = 1.57270000, qty = 659.19578115
      2018-05-25T13:00:00, BUY COMPLETE, -970.66314845 659.19578115 1.57290000
      9630.526745648842 10667.37578981496
      9630.526745648842
      
      2018-05-26T00:00:00, SELL CREATE , price = 1.49030000, qty = 671.00583775
      2018-05-26T01:00:00, SELL COMPLETE, -1003.42212977 -671.00583775 1.49540000
      10633.94887542137 9630.526745648842
      9638.109111615426
      
      2018-05-26T12:00:00, SELL CREATE , price = 1.47670000, qty = 677.18561658
      2018-05-26T13:00:00, SELL COMPLETE, -999.32281438 -677.18561658 1.47570000
      11633.271689804793 10633.94887542137
      9631.207380127278
      
      2018-05-27T00:00:00, BUY CREATE , price = 1.54170000, qty = 671.00583775
      2018-05-27T01:00:00, BUY COMPLETE, -996.78242637 671.00583775 1.54130000
      10599.050392079502 11633.271689804791
      9556.31997967346
      
      2018-05-27T12:00:00, BUY CREATE , price = 1.42050000, qty = 677.18561658
      2018-05-27T13:00:00, BUY COMPLETE, -1005.96251779 677.18561658 1.42050000
      9637.108223731157 10599.050392079502
      9637.108223731157
      
      2018-05-28T00:00:00, SELL CREATE , price = 1.45970000, qty = 685.07227513
      2018-05-28T01:00:00, SELL COMPLETE, -1000.20552168 -685.07227513 1.46000000
      10637.313745413694 9637.108223731157
      9658.688000397595
      
      2018-05-28T12:00:00, SELL CREATE , price = 1.39770000, qty = 715.46111469
      2018-05-28T13:00:00, SELL COMPLETE, -997.28124776 -715.46111469 1.39390000
      11634.594993177878 10637.313745413694
      9651.579766541025
      
      2018-05-29T00:00:00, BUY CREATE , price = 1.39670000, qty = 685.07227513
      2018-05-29T01:00:00, BUY COMPLETE, -977.07260365 685.07227513 1.39680000
      10677.686039283242 11634.594993177878
      9684.55446598425
      
      2018-05-29T12:00:00, BUY CREATE , price = 1.35200000, qty = 715.46111469
      2018-05-29T13:00:00, BUY COMPLETE, -1020.41416580 715.46111469 1.35120000
      9710.954981116254 10677.686039283242
      9710.954981116254
      
      2018-05-30T00:00:00, BUY CREATE , price = 1.64500000, qty = 607.90273556
      2018-05-30T01:00:00, BUY COMPLETE, 1000.00000000 607.90273556 1.64500000
      8710.954981116254 9710.954981116254
      9675.635832180084
      
      2018-05-30T12:00:00, BUY CREATE , price = 1.60780000, qty = 621.96790646
      2018-05-30T13:00:00, BUY COMPLETE, 1001.30613260 621.96790646 1.60990000
      7709.6488485126965 8710.954981116254
      9666.004078771266
      
      2018-05-31T00:00:00, SELL CREATE , price = 1.54140000, qty = 607.90273556
      2018-05-31T01:00:00, SELL COMPLETE, 989.20929661 -607.90273556 1.54140000
      8646.670125108441 7709.6488485126965
      9600.14692570553
      
      2018-05-31T12:00:00, SELL CREATE , price = 1.67610000, qty = 621.96790646
      2018-05-31T13:00:00, SELL COMPLETE, 1012.09683600 -621.96790646 1.66830000
      9684.299183449031 8646.670125108441
      9684.299183449031
      
      2018-06-01T00:00:00, BUY CREATE , price = 1.80000000, qty = 555.55555556
      ==================================================
      Starting Value - 10000.00
      Ending   Value - 9684.30
      ==================================================
      

      Thanks

      1 Reply Last reply Reply Quote 0
      • B
        backtrader administrators last edited by

        This has been answered in your other thread: Community - How is the value calculated?

        The question here is the same: what is what you are expecting?

        1 Reply Last reply Reply Quote 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2016, 2017, 2018 NodeBB Forums | Contributors
        $(document).ready(function () { app.coldLoad(); }); }