Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
# region imports from AlgorithmImports import * # endregion class UglyOrangeGuanaco(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 1, 2) self.SetEndDate(2020, 1, 3) self.SetCash(1000) self.SetTimeZone('America/New_York') # Universe Settings & Extended Market Hours self.AddUniverse(self.MyCoarseFilterFunction) self.UniverseSettings.Resolution = Resolution.Hour self.UniverseSettings.ExtendedMarketHours = True self.spy = self.AddEquity('SPY', Resolution.Hour) #schedule event to fire every day 10min after market open to loop through universe self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 10), self.EveryDayBeforeMarketClose) self.stateData = { } def MyCoarseFilterFunction(self, coarse): #copied from https://www.quantconnect.com/docs/algorithm-reference/universes #Take 10 stocks above their 200-Day EMA with more than $10 million daily trading volume # We are going to use a dictionary to refer the object that will keep the moving averages for c in coarse: if c.Symbol not in self.stateData: self.stateData[c.Symbol] = SelectionData(c.Symbol, 200) # Updates the SymbolData object with current EOD price avg = self.stateData[c.Symbol] avg.update(c.EndTime, c.AdjustedPrice, c.DollarVolume) # Filter the values of the dict to those above EMA and more than $10mil vol. values = [x for x in self.stateData.values() if x.is_above_ema and x.volume > 10000000] # sort by the largest in volume. values.sort(key=lambda x: x.volume, reverse=True) # we need to return only the symbol objects return [ x.symbol for x in values[:10] ] def OnData(self, data): # Track timestamps of market data being fed in if data.ContainsKey( 'SPY' ): if not self.Securities['SPY'].Exchange.Hours.IsOpen(self.Time, self.Time + timedelta(hours=1), False): self.Log( f'Extended Hours/ {self.Time}') else: self.Log( f'Market/ {self.Time}') def EveryDayAfterMarketOpen(self): self.Log("EveryDay.SPY 10 min after open: Fired at: {0}".format(self.Time)) #Loop through symbols to see which one has increased the most def EveryDayBeforeMarketClose(self): pass class SelectionData(object): def __init__(self, symbol, period): self.symbol = symbol self.ema = ExponentialMovingAverage(period) self.is_above_ema = False self.volume = 0 def update(self, time, price, volume): self.volume = volume if self.ema.Update(time, price): self.is_above_ema = price > ema