Overall Statistics |
Total Trades 38 Average Win 0.12% Average Loss -0.14% Compounding Annual Return -5.393% Drawdown 0.900% Expectancy -0.135 Net Profit -0.373% Sharpe Ratio -2.53 Probabilistic Sharpe Ratio 13.110% Loss Rate 53% Win Rate 47% Profit-Loss Ratio 0.83 Alpha 0 Beta 0 Annual Standard Deviation 0.021 Annual Variance 0 Information Ratio -2.53 Tracking Error 0.021 Treynor Ratio 0 Total Fees $49.98 Estimated Strategy Capacity $100000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
class BuyOnOpenTakeProfit(QCAlgorithm): longTradeSignalActive = False tradeLock = False def __init__(self): self.ticker = "QQQ" self.SetStartDate(2022, 3, 1) self.SetEndDate(2022, 3, 25) self.SetCash(100000) self.takeProfit = 0.005 def Initialize(self): self.symbol = self.AddEquity(self.ticker, Resolution.Second).Symbol self.Consolidate(self.symbol, timedelta(minutes=1), lambda x: self.window.Add(x)) #barConsolidator = TradeBarConsolidator(60) #barConsolidator.DataConsolidated += self.BarHandler #self.SubscriptionManager.AddConsolidator(self.symbol, barConsolidator) self.window = RollingWindow[TradeBar](2) self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(23, 59), self.DailyReset) def OnData(self, data): if data[self.symbol] is None: return self.window.Add(data[self.symbol]) if not self.window.IsReady: return barB = self.window[0] barA = self.window[1] if (barA.Close - barA.Open >0) \ and (barB.Close - barB.Open >0) \ and (barA.High < barB.High) \ and (barA.Low < barB.Low) \ and (barB.Open >= barA.Close): self.longTradeSignalActive = True if not self.Portfolio.Invested: if self.longTradeSignalActive is True and self.tradeLock is False: self.SetHoldings(self.symbol, .9) self.limitQuantity = self.Portfolio[self.symbol].Quantity self.limitPrice = self.Portfolio[self.symbol].Price * (1 + self.takeProfit) self.LimitOrder(self.symbol, -self.limitQuantity, self.limitPrice) self.tradeLock = True elif self.Portfolio[self.symbol].IsLong: if self.Securities[self.symbol].AskPrice < barB.Low: self.Transactions.CancelOpenOrders() self.LimitOrder(self.symbol, -self.limitQuantity, self.Securities[self.symbol].AskPrice) #def BarHandler(self, sender, bar): # return def DailyReset(self): self.longTradeSignalActive = False self.tradeLock = False