Overall Statistics |
Total Trades 1 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 $1.85 Estimated Strategy Capacity $50000000.00 Lowest Capacity Asset NQ XKGCMV4QK9VL |
#region imports from AlgorithmImports import * #endregion class SimpleNQExample(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 12, 1) # Set Start Date self.SetEndDate(2020, 12, 1) self.SetCash(100000) # Set Strategy Cash self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) self.SetTimeZone("America/New_York") # Set up the future we're looking at future = Futures.Indices.NASDAQ100EMini self._continuousContract = self.AddFuture(future, dataNormalizationMode = DataNormalizationMode.BackwardsRatio, dataMappingMode = DataMappingMode.OpenInterest, contractDepthOffset = 0) self.commod = self._continuousContract.Symbol # We'll set up a couple of simple example consolidators # First, an ATR on the 5m self._5mATR = ParabolicStopAndReverse(0.02, 0.02, 0.2) # Next, a 9 SMA on the 3m self._3m20pSMA = SimpleMovingAverage("5m9pSMA", 9) # Now the handlers for those consolidators self.MyConsHandler = [] self.MyConsHandler.append(self.Consolidate(self.commod, timedelta(minutes=4), self._5BarHandler)) self.MyConsHandler.append(self.Consolidate(self.commod, timedelta(minutes=5), self._3BarHandler)) count = 0 # Our longest consolidator will need 9*3 minutes to warm up, so we'll grab that much history longest = 9*3 history = self.History(self.commod, longest, Resolution.Minute) for index, row in history.iterrows(): # self.Log(index) bar = TradeBar(index[2]-Time.OneMinute, self.commod, row.open, row.high, row.low, row.close, row.volume) # self.Log(bar) count += 1 # Allow the consolidators to update for consolidator in self.MyConsHandler: consolidator.Update(bar) self.Log("counter for history: {0}".format(count)) def OnData(self, data: Slice): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data ''' if not self.Portfolio.Invested: self.Log("Buying {0}".format( self.commod)) # .Mapped is required to get the continuous contract's current contract self.MarketOrder(self._continuousContract.Mapped, 1, False, "test") def _3BarHandler(self, consolidatedBar): self.Log("Updating the 3m Consolidators") # SMA takes a data point, which is a time and a price self._3m20pSMA.Update(consolidatedBar.EndTime, consolidatedBar.Close) def _5BarHandler(self, consolidatedBar): self.Log("Updating the 5m Consolidators") # ATR takse a bar, so we can just give it consolidatedBar self._5mATR.Update(consolidatedBar)