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