Overall Statistics |
Total Trades 19092 Average Win 0.17% Average Loss -0.14% Compounding Annual Return 7.025% Drawdown 19.200% Expectancy 0.056 Net Profit 131.501% Sharpe Ratio 0.53 Loss Rate 53% Win Rate 47% Profit-Loss Ratio 1.23 Alpha 0.056 Beta 0.115 Annual Standard Deviation 0.118 Annual Variance 0.014 Information Ratio 0.014 Tracking Error 0.191 Treynor Ratio 0.544 Total Fees $274167.78 |
from clr import AddReference AddReference("System.Core") AddReference("System.Collections") AddReference("QuantConnect.Common") AddReference("QuantConnect.Algorithm") import statistics from datetime import datetime from System.Collections.Generic import List class ShortTimeReversal(QCAlgorithm): def Initialize(self): self.SetStartDate(2005, 1, 1) self.SetEndDate(2017, 5, 10) self.SetCash(1000000) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction) self._numberOfSymbols = 100 self._numberOfTradings = int(0.1 * self._numberOfSymbols) self._numOfWeeks = 0 self._LastDay = -1 self._ifWarmUp = False self._stocks = [] self._values = {} def CoarseSelectionFunction(self, coarse): sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True) top100 = sortedByDollarVolume[:self._numberOfSymbols] list = List[Symbol]() for x in top100: list.Add(x.Symbol) return list def OnData(self, data): if not self._ifWarmUp: if self._LastDay == -1: self._LastDay = self.Time.date() self._stocks = [] self.uni_symbol = None symbols = self.UniverseManager.Keys for i in symbols: if str(i.Value) == "QC-UNIVERSE-COARSE-USA": self.uni_symbol = i for i in self.UniverseManager[self.uni_symbol].Members: self._stocks.append(i.Value.Symbol) self._values[i.Value.Symbol] = [self.Securities[i.Value.Symbol].Price] else: delta = self.Time.date() - self._LastDay if delta.days >= 7: self._LastDay = self.Time.date() for stock in self._stocks: self._values[stock].append(self.Securities[stock].Price) self._numOfWeeks += 1 if self._numOfWeeks == 3: self._ifWarmUp = True else: delta = self.Time.date() - self._LastDay if delta.days >= 7: self._LastDay = self.Time.date() returns = {} for stock in self._stocks: newPrice = self.Securities[stock].Price oldPrice = self._values[stock].pop(0) self._values[stock].append(newPrice) try: returns[stock] = newPrice/oldPrice except: returns[stock] = 0 newArr = [(v,k) for k,v in returns.items()] newArr.sort() for ret, stock in newArr[self._numberOfTradings:-self._numberOfTradings]: if self.Portfolio[stock].Invested: self.Liquidate(stock) for ret, stock in newArr[0:self._numberOfTradings]: self.SetHoldings(stock, 0.5/self._numberOfTradings) for ret, stock in newArr[-self._numberOfTradings:]: self.SetHoldings(stock, -0.5/self._numberOfTradings) self._LastDay = self.Time.date()