| Overall Statistics |
|
Total Orders 44 Average Win 2.57% Average Loss -3.49% Compounding Annual Return 48.919% Drawdown 11.800% Expectancy 0.421 Start Equity 1000 End Equity 1359.7 Net Profit 35.970% Sharpe Ratio 1.448 Sortino Ratio 1.225 Probabilistic Sharpe Ratio 69.731% Loss Rate 18% Win Rate 82% Profit-Loss Ratio 0.74 Alpha 0.148 Beta 0.976 Annual Standard Deviation 0.199 Annual Variance 0.04 Information Ratio 0.842 Tracking Error 0.171 Treynor Ratio 0.295 Total Fees $44.00 Estimated Strategy Capacity $89000000.00 Lowest Capacity Asset SMH V2LT3QH97TYD Portfolio Turnover 14.39% |
from AlgorithmImports import *
class RSIStrategyAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2024, 1, 1) # Set Start Date
self.SetCash(1000) # Set Strategy Cash
# Add equity with daily resolution
self.spy = self.AddEquity("SMH", Resolution.Daily)
# Initialize RSI(2) indicator
self.rsi = self.RSI("SMH", 2, MovingAverageType.Simple, Resolution.Daily)
# Variable to keep track of previous day's high
self.previousHigh = None
def OnData(self, data):
# Skip if RSI data is not yet ready
if not self.rsi.IsReady:
return
# Update previousHigh if it's not None
if self.previousHigh is not None:
# Exit condition: today's close is higher than yesterday's high
if self.spy.Close > self.previousHigh and self.Portfolio["SMH"].Invested:
self.Liquidate("SMH")
# Update previousHigh with today's high at the end of the day
self.previousHigh = self.spy.High
# Entry condition: RSI(2) < 15 and not already invested
if self.rsi.Current.Value < 20 and not self.Portfolio["SMH"].Invested:
self.SetHoldings("SMH", 1) # Use SetHoldings for simplicity; adjust position size as needed
# Note: Deploy this script within the QuantConnect environment to run the backtest.