Overall Statistics |
Total Trades 42 Average Win 0.55% Average Loss -0.47% Compounding Annual Return 30.276% Drawdown 2.400% Expectancy 0.229 Net Profit 2.272% Sharpe Ratio 1.719 Probabilistic Sharpe Ratio 58.479% Loss Rate 43% Win Rate 57% Profit-Loss Ratio 1.15 Alpha 0.118 Beta -0.096 Annual Standard Deviation 0.08 Annual Variance 0.006 Information Ratio 2.063 Tracking Error 0.17 Treynor Ratio -1.433 Total Fees $77.70 Estimated Strategy Capacity $230000000.00 Lowest Capacity Asset ES 1S1 |
class BasicTemplateFuturesAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2015, 1, 1) self.SetEndDate(2015,2,1) self.SetCash(100000) self.crudeoilwti = self.AddFuture(Futures.Indices.SP500EMini, Resolution.Minute) self.rsi = self.RSI(self.crudeoilwti.Symbol, 5) minuteConsolidator = TradeBarConsolidator(timedelta(minutes=5)) self.SubscriptionManager.AddConsolidator(self.crudeoilwti.Symbol, minuteConsolidator) self.Schedule.On(self.DateRules.EveryDay(self.crudeoilwti.Symbol), self.TimeRules.At(15, 00), self.ClosePositions) self.SetWarmUp(timedelta(weeks=20)) self.buyticket = None self.sellticket = None self.stoplossticket = None self.takeprofitticket = None def OnData(self,slice): if self.Time.hour >= 9 and self.Time.hour <= 14: self.Debug(f"Time is between 9h and 12h inclusive. Time is: {self.Time}") if not self.Portfolio.Invested: if self.rsi.Current.Value <= 10: self.buyticket = self.MarketOrder(self.crudeoilwti.Symbol, 1) if self.rsi.Current.Value >= 90: self.sellticket = self.MarketOrder(self.crudeoilwti.Symbol, -1) def OnOrderEvent(self, orderEvent): if orderEvent.Status != OrderStatus.Filled: return if self.buyticket is not None: if orderEvent.OrderId == self.buyticket.OrderId: price = orderEvent.FillPrice self.StopMarketOrder(self.crudeoilwti.Symbol, -1, orderEvent.FillPrice * .995) self.LimitOrder(self.crudeoilwti.Symbol, -1, orderEvent.FillPrice * 1.005) self.buyticket = None else: self.Transactions.CancelOpenOrders(orderEvent.Symbol) #self.buyticket = None if self.sellticket is not None: if orderEvent.OrderId == self.sellticket.OrderId: price = orderEvent.FillPrice self.StopMarketOrder(self.crudeoilwti.Symbol, 1, orderEvent.FillPrice * 1.005) self.LimitOrder(self.crudeoilwti.Symbol, 1, orderEvent.FillPrice * .995) self.sellticket = None else: self.Transactions.CancelOpenOrders(orderEvent.Symbol) #self.sellticket = None def ClosePositions(self): self.Liquidate(self.crudeoilwti.Symbol)