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

Cross-Sectional Mean Reversion Strategy



  • Here is my cross-section mean reversion strategy from my most recent blog post. It uses an algorithm outlined in Ernie Chan's "Algorithmic Trading: Winning Strategies and Their Rationale." For more information see my blog post. Let me know if you have any suggestions:

    
    class CrossSectionalMR(bt.Strategy):
        def prenext(self):
            self.next()
    
        def next(self):
            # only look at data that existed yesterday
            available = list(filter(lambda d: len(d), self.datas))
    
            rets = np.zeros(len(available))
            for i, d in enumerate(available):
                # calculate individual daily returns
                rets[i] = (d.close[0]- d.close[-1]) / d.close[-1]
    
            # calculate weights using formula
            market_ret = np.mean(rets)
            weights = -(rets - market_ret)
            weights = weights / np.sum(np.abs(weights))
    
            for i, d in enumerate(available):
                self.order_target_percent(d, target=weights[i])
    
    

    results


  • administrators

    Thanks for the contribution and nice post.