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

Different results running strategy than optimization results



  • I have a very simple MA strategy but when I run the strategy I get a different result than what I see through the optimizer using the same values:

      # Initialize the MAs
      def __init__(self):
          self.sma_slow = bt.indicators.SimpleMovingAverage(
              self.datas[0], period=self.params.maslow)
            
          self.sma_fast = bt.indicators.SimpleMovingAverage(
              self.datas[0], period=self.params.mafast)
    
        # Buy if fast cross above slow
        def next(self):
            if not self.position:
                if self.sma_fast[0] > self.sma_slow[0]:
                    self.order = self.buy()
            else:
                if self.sma_fast[0] < self.sma_slow[0]:
                    self.order = self.sell()
    

    I ran the optimizer

    strats = cerebro.optstrategy(
        TestStrategy,
        mafast=range(11, 100),
        maslow=1)
    

    and logged the results

        def stop(self):
            self.log('(MA Fast %2d Slow %2d) Ending Value %.2f' %
                     (self.params.mafast, self.params.maslow, self.broker.getvalue()))
    

    I got the best result as
    2000-12-29, (MA Fast 54 Slow 1) Ending Value 1305.80

    so I ran the strategy

    cerebro.addstrategy(TestStrategy, mafast = 1, maslow = 54, printlog = True)
    

    But I only get a final value of 595.40

    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
    Final Portfolio Value: 595.40
    

    What could be causing the difference of 1305.80 during the optimization run and 595.40 during the individual strategy run?



  • @sfkiwi according to your output from optimization mafast=54 and maslow=1. Then you run your strategy with mafast = 1, maslow = 54. Maybe this can cause a difference.