Navigation

    Backtrader Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. Mike Van
    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
    • Groups 0

    Mike Van

    @Mike Van

    0
    Reputation
    241
    Profile views
    12
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Mike Van Unfollow Follow

    Latest 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