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