Backtrader Community

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. Mike Van
    3. Posts
    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 5
    • Posts 12
    • Best 0
    • Controversial 0
    • Groups 0

    Posts made by Mike Van

    • I think bt need a official plotter to plot multi data in different figures. It is useful for portfolio backtesting

      Re: Plot in multiple figures

      posted in General Code/Help
      M
      Mike Van
    • RE: My code may be in a endless loop, what happened?

      @backtrader ohoh I get it. My English understanding is really poor. Thanks for your patience.

      posted in General Code/Help
      M
      Mike Van
    • RE: My code may be in a endless loop, what happened?

      @backtrader
      I just define self.ATR as a list to store ATRs of different stocks.
      What the better method should I use to store different stocks' indicators?

      posted in General Code/Help
      M
      Mike Van
    • RE: My code may be in a endless loop, what happened?

      @ab_trader Thanks a lot. Let me try again.

      posted in General Code/Help
      M
      Mike Van
    • RE: My code may be in a endless loop, what happened?

      @backtrader
      I have many stocks, so I just want to store ATRs by a list.
      My aim is:

      self.ATR[0] = datas[0]'s ATR
      self.ATR[1] = datas[1]'s ATR
      ......
      

      Now I use bt.indicators.ATR can achieve this goal:

      self.ATR = list(range(len(self.datas))) 
      for index, stock_data in enumerate(self.datas): 
              self.ATR[index] = bt.indicators.ATR(self.datas[index], period=20)
      

      But I still want to know why Ta-lib doesn't work. What is wrong with me?

      posted in General Code/Help
      M
      Mike Van
    • RE: Multi Example

      Thanks for this valuable example, and why not put it in the document?

      posted in Blog
      M
      Mike Van
    • A small error in the document

      In the section Bracket Orders, there is a small error in my view in the subsection Manual Issuing of a Bracket

      mainside = self.buy(price=13.50, exectype=bt.Order.Limit, transmit=False)
      lowside  = self.sell(price=13.00, size=mainsize.size, exectype=bt.Order.Stop,
                           transmit=False, parent=mainside)
      highside = self.sell(price=14.00, size=mainsize.size, exectype=bt.Order.Limit,
                           transmit=True, parent=mainside)
      

      size=mainsize.size should be size=mainside.size

      posted in General Discussion
      M
      Mike Van
    • My code may be in a endless loop, what happened?

      This is my code on strategy

      class Turtle(bt.Strategy):
      
          def __init__(self):
              self.ATR = list(range(len(self.datas))) 
              for i in range(len(self.datas)):
                  self.ATR[i] = bt.talib.ATR([self.datas[i].high, self.datas[i].low, self.datas[i].close], timeperiod=20) # P227
      
              self.sys = None 
              self.lasttrade = None
      

      I used many datafeeds. When I use this code, the program never runs out.
      When I commented out this code as follow

       self.ATR = list(range(len(self.datas))) 
              for i in range(len(self.datas)):
                  self.ATR[i] = bt.talib.ATR([self.datas[i].high, self.datas[i].low, self.datas[i].close], timeperiod=20) # P227
      

      Everything will be OK. What happened?
      I hope someone can help me.

      posted in General Code/Help
      M
      Mike Van
    • RE: It's a silly question, but it really confuses me. Please help me.

      @backtrader Thanks for your help

      posted in General Discussion
      M
      Mike Van
    • It's a silly question, but it really confuses me. Please help me.

      The code in Quickstart really confuses me.
      The code is as follows

      class TestStrategy(bt.Strategy):

      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
          self.order = None
      
      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, %.2f' % order.executed.price)
              elif order.issell():
                  self.log('SELL EXECUTED, %.2f' % order.executed.price)
      
              self.bar_executed = len(self)
      
          elif order.status in [order.Canceled, order.Margin, order.Rejected]:
              self.log('Order Canceled/Margin/Rejected')
      
          # Write down: no pending order
          self.order = None
      
      def next(self):
          # Simply log the closing price of the series from the reference
          self.log('Close, %.2f' % self.dataclose[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.dataclose[0] < self.dataclose[-1]:
                      # current close less than previous close
      
                      if self.dataclose[-1] < self.dataclose[-2]:
                          # previous close less than the previous close
      
                          # BUY, BUY, BUY!!! (with 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:
      
              # Already in the market ... we might sell
              if len(self) >= (self.bar_executed + 5):
                  # 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()
      

      Two questions:

      1. what does len(self) mean and why it can be executed?
      2. why we can call the function notify_order()? I read the bt.Strategy but found the answer.
      posted in General Discussion
      M
      Mike Van
    • RE: Some questions about dividend and answer authority

      @backtrader Thanks for your helping. "Answer authority" is the adjusted price by the dividends. And I just don't know how to speak it in English.
      And if I feeds two data, I have to align them in advance according to datetime right? Is there such a solution in backtrader?

      posted in General Discussion
      M
      Mike Van
    • Some questions about dividend and answer authority

      I'm learning about backtrader and I think it's an amazing framework.
      But I have some questions about dividend and answer authority.

      1. In my view, the price of answer authority is more useful for most indicators, but the raw stock price may be closer to the reality for cash management. If the order signals are generated by answer authority data and order price use the raw price, can I use only two datafeeds?
      2. Is there a method to add dividends directly to cash?
      posted in General Discussion
      M
      Mike Van
    • 1 / 1