Overall Statistics |
Total Trades 48 Average Win 0.30% Average Loss -0.14% Compounding Annual Return 0.166% Drawdown 0.900% Expectancy 0.279 Net Profit 0.956% Sharpe Ratio 0.324 Loss Rate 58% Win Rate 42% Profit-Loss Ratio 2.07 Alpha 0.001 Beta 0.009 Annual Standard Deviation 0.005 Annual Variance 0 Information Ratio -0.836 Tracking Error 0.131 Treynor Ratio 0.182 Total Fees $120.00 |
class QuantumVerticalCircuit(QCAlgorithm): def Initialize(self): self.SetBrokerageModel(BrokerageName.AlphaStreams) self.syl = 'BBY' self.contract = 0 self.highPrice = 0 self.SetStartDate(2014, 1, 1)# Set Start Date self.SetEndDate(2019,9,30) self.SetCash(1000000) # Set Strategy Cash self.asset = self.AddEquity(self.syl, Resolution.Daily) self.macd_3 = self.MACD(self.syl, 12, 26, Resolution.Daily) self.macd_12 = self.MACD(self.syl, 12, 26, Resolution.Daily) self.macd_50 = self.MACD(self.syl, 50, 100 , Resolution.Daily) self.ema = self.EMA(self.syl, 3, Resolution.Daily) self.stopMarketTicket = None #Setting Bar Data self.tradeBarWindow = RollingWindow[TradeBar](3) #EMA rolling window self.ema.Updated += self.EmaUpdated self.emaWin = RollingWindow[IndicatorDataPoint](4) #Macd_3 Bar Data self.macd_3.Updated += self.MacdUpdated self.macd3Win = RollingWindow[IndicatorDataPoint](12) #Macd_12 Bar Data self.macd_12.Updated += self.MacdUpdated self.macd12Win = RollingWindow[IndicatorDataPoint](12) #Macd_50 Bar Data self.macd_50.Updated += self.MacdUpdated self.macd50Win = RollingWindow[IndicatorDataPoint](12) def EmaUpdated(self, sender, updated): self.emaWin.Add(updated) def MacdUpdated(self, sender, updated): '''Adds updated values to rolling window''' self.macd3Win.Add(updated) self.macd12Win.Add(updated) self.macd50Win.Add(updated) def OnData(self, data): if not self.macd_3.IsReady: return if not self.macd_12.IsReady: return if not self.macd_50.IsReady: return if not self.ema.IsReady: return #Creating my 3 Bars self.tradeBarWindow.Add(data[self.syl]) if not (self.tradeBarWindow.IsReady and self.macd3Win.IsReady): return #if not self.tradeBarWindow.IsReady: return # 3 most recent trade bars 0, 1, 2 self.bar0 = self.tradeBarWindow[0] #Previous bar inside self.bar1 = self.tradeBarWindow[1] # previous bar 1 self.bar2 = self.tradeBarWindow[self.tradeBarWindow.Count-1] # Previous bar 2 #MacD_3 set up self.macd3IB = self.macd3Win[4] #IB self.macd3_1 = self.macd3Win[7] # PB 1 self.macd3_2 = self.macd3Win[10] # PB 2 self.contraction = False if self.macd3IB.Value > 0: if self.macd3IB.Value < self.macd3_1.Value: self.contraction = True if self.contraction: self.contract += 1 else: self.contract = 0 if not self.Portfolio.Invested: if self.contract >= 5: self.MarketOrder(self.syl, 500) if self.Portfolio.Invested: if self.Portfolio.TotalUnrealizedProfit >= self.Portfolio[self.syl].HoldingsCost * .10: self.Sell(self.syl, 500) if self.Portfolio.TotalUnrealizedProfit < (self.Portfolio[self.syl].HoldingsCost * .05) * -1: self.Sell(self.syl, 500) # self.stopMarketTicket = self.StopMarketOrder(self.syl, -100,self.Securities[self.syl].Close * 0.9) # else: # if self.Securities['SPY'].Close > self.highPrice: # self.highPrice = self.Securities['SPY'].Close # updateFields = UpdateOrderFields() # updateFields = self.highPrice * 0.9 # self.stopMarketTicket.Update(updateFields) # self.Debug(str(self.stopMarketTicket.OrderId)) # if self.contract => 7: # self.Buy(self.syl, 10) def OnOrderEvent(self, orderEvent): if orderEvent.Status == OrderStatus.Filled: self.Log("Purchased Stock: {0}".format(orderEvent.Symbol))