Overall Statistics |
Total Trades 30 Average Win 3.45% Average Loss -3.95% Compounding Annual Return 7.149% Drawdown 7.300% Expectancy 0.338 Net Profit 41.237% Sharpe Ratio 0.805 Probabilistic Sharpe Ratio 27.495% Loss Rate 29% Win Rate 71% Profit-Loss Ratio 0.87 Alpha 0.045 Beta 0.047 Annual Standard Deviation 0.063 Annual Variance 0.004 Information Ratio -0.409 Tracking Error 0.165 Treynor Ratio 1.079 Total Fees $256.89 Estimated Strategy Capacity $77000000.00 Lowest Capacity Asset PEP R735QTJ8XC9X |
# RSI pair trading # ------------------------------------------------- PAIR = ['PEP', 'KO']; PERIOD = 8; UB = 60; LB = 40; # ------------------------------------------------- class RSIpairTrading(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 3, 20) self.SetEndDate(2022, 3, 19) self.SetCash(100000) self.rsi = {} self.symbols = [self.AddEquity(ticker, Resolution.Daily).Symbol for ticker in PAIR] for x in self.symbols: self.rsi[x] = self.RSI(x, PERIOD, MovingAverageType.Simple, Resolution.Daily) self.SetWarmUp(PERIOD + 1, Resolution.Daily) def OnData(self, data): if self.IsWarmingUp: return for sec in self.symbols: if not self.rsi[sec].IsReady: return rsi_0 = self.rsi[self.symbols[0]].Current.Value rsi_1 = self.rsi[self.symbols[1]].Current.Value if rsi_0 < LB and rsi_1 > UB and self.Portfolio[self.symbols[0]].Quantity <= 0: self.SetHoldings(self.symbols[0], 0.5) self.SetHoldings(self.symbols[1], -0.5) elif rsi_0 > UB and rsi_1 < LB and self.Portfolio[self.symbols[0]].Quantity >= 0: self.SetHoldings(self.symbols[0], -0.5) self.SetHoldings(self.symbols[1], 0.5)