Overall Statistics |
Total Trades 3 Average Win 0% Average Loss -0.02% Compounding Annual Return -5.528% Drawdown 0.200% Expectancy -1 Net Profit -0.042% Sharpe Ratio -10.937 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.204 Beta 0.089 Annual Standard Deviation 0.005 Annual Variance 0 Information Ratio -37.192 Tracking Error 0.048 Treynor Ratio -0.575 Total Fees $3.25 Estimated Strategy Capacity $74000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
# sample algo to develop & test consolidated data + rolling windows # on 1min timeframe: from QuantConnect.Data.Market import TradeBar from datetime import timedelta from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * import decimal as d class MyAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 8, 4) self.SetEndDate(2021, 8, 6) self.SetCash(100000) self.AddEquity("SPY", Resolution.Second) consolidator_daily = TradeBarConsolidator(timedelta(1)) consolidator_daily.DataConsolidated += self.OnDailyData self.SubscriptionManager.AddConsolidator("SPY", consolidator_daily) consolidator_minute = TradeBarConsolidator(60) consolidator_minute.DataConsolidated += self.OnMinuteData self.SubscriptionManager.AddConsolidator("SPY", consolidator_minute) self.daily_rw = RollingWindow[TradeBar](2) self.minute_rw = RollingWindow[TradeBar](2) self.window = RollingWindow[TradeBar](2) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(9, 41), Action(self.ten_minutes_after_open_market)) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(15, 59, 56), Action(self.before_close_market)) def OnDailyData(self, sender, bar): self.daily_rw.Add(bar) def OnMinuteData(self, sender, bar): self.minute_rw.Add(bar) def ten_minutes_after_open_market(self): if not (self.window.IsReady and self.daily_rw.IsReady and self.minute_rw.IsReady): return last_close = self.window[0].Close last_low = self.window[0].Low last_high = self.window[0].High yesterday_daily_close = self.daily_rw[1].Close prev_minute_low = self.minute_rw[1].Low prev_minute_high = self.minute_rw[1].High if not self.Portfolio["SPY"].Invested: # If low is greater than previous low and high is greater than previous high, buy to open if prev_minute_low < last_low and prev_minute_high < last_high: self.SetHoldings("SPY", 1) self.Debug('GOING LONG') stopMarketTicket = self.StopMarketOrder("SPY", -1, prev_minute_low - 0.01) # stop loss at previous bar low less 1ct # If low is less than previous low, sell to open elif prev_minute_low > last_low: self.SetHoldings("SPY", -1) self.Debug('GOING SHORT') def before_close_market(self): if self.Portfolio["SPY"].Invested: self.Liquidate("SPY") self.Debug('LIQUIDATE End of Day') def OnData(self, data): if data["SPY"] is None: return self.window.Add(data["SPY"]) if not (self.window.IsReady): return factor = 1.5 currBar = self.window[0].Close if self.Portfolio["SPY"].AveragePrice * factor < currBar: self.Liquidate("SPY") self.Debug('LIQUIDATE AT THRESHOLD REACHED.')