Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -3.117% Drawdown 5.200% Expectancy 0 Net Profit -3.024% Sharpe Ratio -0.766 Probabilistic Sharpe Ratio 1.783% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.029 Beta 0.131 Annual Standard Deviation 0.028 Annual Variance 0.001 Information Ratio -0.708 Tracking Error 0.114 Treynor Ratio -0.166 Total Fees $1.00 Estimated Strategy Capacity $69000000.00 Lowest Capacity Asset MU R735QTJ8XC9X |
class LogicalSkyBlueFox(QCAlgorithm): openingBar = None def Initialize(self): self.SetStartDate(2018, 7, 10) self.SetEndDate(2019, 6, 30) self.SetCash(100000) self.AddUniverse(self.CoarseUniverse) # Dictionary holding consolidator and open bar self.data = {} def CoarseUniverse(self, coarse): trimmed = [x for x in coarse if 50 <= x.Price <= 60] sortedByDollarVolume = sorted(trimmed, key=lambda x: x.DollarVolume, reverse=True) # Let's return top 10 daily dollar volume with price between 50 and 60 return [x.Symbol for x in sortedByDollarVolume[:10]] def OnData(self, data): if self.Portfolio.Invested: return for symbol, symbolData in self.data.items(): if data.ContainsKey(symbol): if symbolData.openingBar and data[symbol].Close > symbolData.openingBar.High: self.SetHoldings(symbol, 0.1) elif symbolData.openingBar and data[symbol].Close < symbolData.openingBar.Low: self.SetHoldings(symbol, -0.1) def OnSecuritiesChanged(self, changes): for added in changes.AddedSecurities: self.data[added.Symbol] = SymbolData(self, added.Symbol) for removed in changes.RemovedSecurities: if removed.Symbol in self.data: self.data[removed.Symbol].Dispose() del self.data[removed.Symbol] class SymbolData: def __init__(self, algo, symbol): self.symbol = symbol self.algo = algo self.openingBar = None self.consolidator = TradeBarConsolidator(timedelta(minutes=30)) self.consolidator.DataConsolidated += self.OnDataConsolidated algo.SubscriptionManager.AddConsolidator(symbol, self.consolidator) def OnDataConsolidated(self, sender, bar): if bar.Time.hour == 9 and bar.Time.minute == 30: self.openingBar = bar def Dispose(self): self.algo.SubscriptionManager.RemoveConsolidator(self.symbol, self.consolidator)