Overall Statistics |
Total Trades 15 Average Win 0.82% Average Loss -0.56% Compounding Annual Return 12.635% Drawdown 4.100% Expectancy 0.639 Net Profit 2.564% Sharpe Ratio 1.163 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 1.46 Alpha 0.071 Beta 0.775 Annual Standard Deviation 0.106 Annual Variance 0.011 Information Ratio 0.829 Tracking Error 0.068 Treynor Ratio 0.16 Total Fees $42.89 |
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): '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.''' self.SetStartDate(2015,05,1) #Set Start Date self.SetEndDate(2015,07,19) self.SetCash(100000) #Set Strategy Cash self.AddEquity("SPY", Resolution.Second) consolidator = TradeBarConsolidator(timedelta(1)) consolidator.DataConsolidated += self.OnDailyData self.SubscriptionManager.AddConsolidator("SPY", consolidator) consolidatorm = TradeBarConsolidator(60) consolidatorm.DataConsolidated += self.OnMinuteData self.SubscriptionManager.AddConsolidator("SPY", consolidatorm) self.daily = RollingWindow[TradeBar](2) self.minute = RollingWindow[TradeBar](2) self.window = RollingWindow[TradeBar](2) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(9, 31), Action(self.One)) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(15, 59, 56), Action(self.End)) # Add daily bar to daily rolling window def OnDailyData(self, sender, bar): self.daily.Add(bar) def OnMinuteData(self, sender, bar): self.minute.Add(bar) def One(self): if not (self.window.IsReady and self.daily.IsReady and self.minute.IsReady): return openOrders = self.Transactions.GetOpenOrders() currBar = self.window[0].Close yesterdayc = self.daily[1].Close minuteBarC = self.minute[1].Close minuteBar0 = self.minute[1].Open self.Debug(str(self.Securities["SPY"].Price) + "," + str(currBar)+str(minuteBar0)+str(minuteBarC)) if not self.Portfolio.Invested and currBar<yesterdayc and minuteBar0<minuteBarC and "SPY" not in openOrders: self.SetHoldings("SPY", 1) if not self.Portfolio.Invested and currBar>yesterdayc and minuteBar0>minuteBarC: self.SetHoldings("SPY", -1) def End(self): if self.Portfolio["SPY"].Quantity < 0: self.SetHoldings("SPY", 0) # Add second bar to window rolling window def OnData(self, data): if data["SPY"] is None: return self.window.Add(data["SPY"]) if not (self.window.IsReady): return self.Debug("haha") factor = d.Decimal(1.01) currBar = self.window[0].Close if self.Portfolio["SPY"].AveragePrice *factor< currBar: self.SetHoldings("SPY", 0)