Overall Statistics
Total Trades
1924
Average Win
0.05%
Average Loss
-0.04%
Compounding Annual Return
382.415%
Drawdown
1.500%
Expectancy
0.279
Net Profit
14.299%
Sharpe Ratio
12.41
Probabilistic Sharpe Ratio
99.897%
Loss Rate
46%
Win Rate
54%
Profit-Loss Ratio
1.39
Alpha
0.881
Beta
2.05
Annual Standard Deviation
0.164
Annual Variance
0.027
Information Ratio
14.481
Tracking Error
0.102
Treynor Ratio
0.994
Total Fees
$287858.10
Estimated Strategy Capacity
$62000000.00
Lowest Capacity Asset
P R735QTJ8XC9X
import numpy as np
import pandas as pd
import math
import time

class StatArb1(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2012, 1,4)
        self.SetEndDate(2012,2,5)
        self.SetCash(20000000)
        
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverse(self.LiquidWithFundamentalsFilter)
        
        #self.SetWarmUp(timedelta(30))
        
        self.spy = self.AddEquity("SPY",Resolution.Daily)
        self.Schedule.On(self.DateRules.EveryDay("SPY"),
                 self.TimeRules.AfterMarketOpen("SPY", 10),        
                 self.RefactorPortfolio)
                 
        self.lookback = 20

    
    def LiquidWithFundamentalsFilter(self, coarse):
        sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
        filtered = [ x.Symbol for x in sortedByDollarVolume 
                      if x.Price > 10 and x.DollarVolume > 10000000 and 
                       x.HasFundamentalData]

        return filtered[:25]


    def RefactorPortfolio(self):
        self.Liquidate()
        
        tickers = [self.Symbol(key.ToString()) for key in self.ActiveSecurities.Keys if key.ToString() != "SPY"]
        data = self.History(tickers,self.lookback,Resolution.Daily)
        dates = data.index.get_level_values("time")
        
        self.Debug(len(tickers))
        
        alpha = {}
        
        for ticker in tickers:
            alpha[ticker] = 1/25
        
        for ticker in alpha:
            if np.isnan(alpha[ticker]):
                alpha[ticker] = 0
            self.SetHoldings(ticker,alpha[ticker])
            


    def OnData(self, data):
        pass