Overall Statistics |
Total Trades 3 Average Win 0% Average Loss -0.17% Compounding Annual Return 0.041% Drawdown 7.000% Expectancy -1 Net Profit 0.007% Sharpe Ratio 0.093 Probabilistic Sharpe Ratio 35.369% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.065 Beta -0.259 Annual Standard Deviation 0.185 Annual Variance 0.034 Information Ratio -0.187 Tracking Error 0.895 Treynor Ratio -0.067 Total Fees $3.00 |
class OptimizedCalibratedCompensator(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 3, 1) # Set Start Date self.SetEndDate(2020,4,30) # set end date self.SetCash(1000) # Set Strategy Cash self._symbol = 'SPY' self.AddEquity(self._symbol, Resolution.Minute) self.Securities[self._symbol].SetDataNormalizationMode(DataNormalizationMode.Raw) # define a 14-period daily RSI indicator with shortcut helper method self.rsi = self.RSI(self._symbol, 14, MovingAverageType.Simple, Resolution.Minute) self.SetWarmUp(14, Resolution.Minute) self.stopMarketTicket = None self.orderTicket = None self.limitOrderTicket = None def OnData(self, data): # check if this algorithm is still warming up if self.Portfolio.Invested or not self.rsi.IsReady: return # get the current RSI value rsi_value = self.rsi.Current.Value entryprice = self.Securities[self._symbol].Close if rsi_value < 28: self.orderTicket = self.MarketOrder( self._symbol, 1) self.limitOrderTicket = self.LimitOrder( self._symbol, -1, 1.001 * entryprice) self.stopMarketTicket = self.StopMarketOrder( self._symbol, -1, 0.9993 * entryprice) def OnOrderEvent(self, orderEvent): self.Log(f"Low: {self.Securities[self._symbol].Low}") self.Log(f"High: {self.Securities[self._symbol].High}") if orderEvent.Status == OrderStatus.Filled and self.limitOrderTicket is not None and self.stopMarketTicket is not None : if orderEvent.OrderId == self.limitOrderTicket.OrderId: self.stopMarketTicket.Cancel('hit take profit') elif orderEvent.OrderId == self.stopMarketTicket.OrderId: self.limitOrderTicket.Cancel('hit stop loss') self.Log("{0}: {1}".format(self.Time, orderEvent))