Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 2.345% Drawdown 0.000% Expectancy 0 Net Profit 0.049% Sharpe Ratio 14.603 Probabilistic Sharpe Ratio 100.000% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.014 Beta 0.019 Annual Standard Deviation 0.002 Annual Variance 0 Information Ratio -23.19 Tracking Error 0.104 Treynor Ratio 1.677 Total Fees $1.00 Estimated Strategy Capacity $6300000000.00 |
class LimitOrderTest(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 4, 1) # Set Start Date self.SetEndDate(2021, 4, 8) # Set End Date self.SetCash(100000) # Set Strategy Cash self.AddEquity("SPY", Resolution.Second) # Finer resolution for more realistic fills self._pending_order = None self.limitPrice = 405 self.orderStatus = None self.DefaultOrderProperties.TimeInForce = TimeInForce.GoodTilCanceled self.Consolidate("SPY", timedelta(days=1), self.OnDataConsolidated) def OnData(self, data): if self.orderStatus == "Filled": self.orderStatus = None self.Log("Order filled. BAR DATA: {}: Open:{}, Close:{}, High:{}, Low:{}".format(data['SPY'].EndTime, data['SPY'].Open, data['SPY'].Close, data['SPY'].High, data['SPY'].Low)) if self.Portfolio.Invested: return if self._pending_order is not None and data['SPY'].Low < self.limitPrice: self.Log("Limit order should fill. {}: Open:{}, Close:{}, High:{}, Low:{}, Limit price: {}".format(data['SPY'].EndTime, data['SPY'].Open, data['SPY'].Close, data['SPY'].High, data['SPY'].Low, self.limitPrice)) def OnDataConsolidated(self, bar): self.Log("DAILY DATA: {}: Open:{}, Close:{}, High:{}, Low:{}".format(bar.EndTime, bar.Open, bar.Close, bar.High, bar.Low)) if not self.Portfolio.Invested and self._pending_order is None: self._pending_order = self.LimitOrder("SPY", 10, self.limitPrice) def OnOrderEvent(self, orderEvent): self.Log(str("OnOrderEvent has been called: ") + str(orderEvent)) self._pending_order = None if orderEvent.Status == OrderStatus.Filled: self.orderStatus = "Filled"