Overall Statistics |
Total Trades 996 Average Win 0% Average Loss 0.00% Compounding Annual Return -5.588% Drawdown 1.000% Expectancy -1 Net Profit -1.050% Sharpe Ratio -31.951 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.061 Beta 0.347 Annual Standard Deviation 0.002 Annual Variance 0 Information Ratio -41.905 Tracking Error 0.002 Treynor Ratio -0.157 Total Fees $1049.88 |
import numpy as np import datetime class BasicTemplateAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2013,1,1) #Set Start Date self.SetEndDate(2013,3,10) #Set End Date self.SetCash(100000) #Set Strategy Cash self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction) self.AddEquity("SPY",Resolution.Daily) self.__numberOfSymbols = 30 self.w = 1.0/self.__numberOfSymbols self.entry_minute = 30 self.exit_minute = 15 self.bigStocks = None self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY",self.entry_minute), Action(self.EnterPosition)) self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY",self.exit_minute), Action(self.ExitPosition)) def CoarseSelectionFunction(self, coarse): selected = [x for x in coarse if (x.HasFundamentalData) and (float(x.Price) > 2)] sortedByDollarVolume = sorted(selected, key=lambda x: x.DollarVolume, reverse=True) self.bigStocks = [ x.Symbol for x in sortedByDollarVolume[:self.__numberOfSymbols] ] return self.bigStocks def EnterPosition(self): self.entry_price = {} for stock in self.bigStocks: history = self.History(stock, self.entry_minute, Resolution.Minute) if 'close' in history.columns: delta = (history['close'][-1] - history['close'][0])/history['close'][-1] self.direction = np.sign(delta) if self.direction > 0: self.SetHoldings(stock, self.direction * self.w) self.entry_price[stock] = history['close'][-1] def ExitPosition(self): self.Debug("end of day.\n") for stock in self.entry_price: self.Liquidate(stock) def OnData(self, data): pass