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))