Overall Statistics
Total Orders
1474
Average Win
0.29%
Average Loss
-0.19%
Compounding Annual Return
23.994%
Drawdown
56.500%
Expectancy
1.212
Start Equity
100000
End Equity
435129.76
Net Profit
335.130%
Sharpe Ratio
0.603
Sortino Ratio
0.621
Probabilistic Sharpe Ratio
11.984%
Loss Rate
12%
Win Rate
88%
Profit-Loss Ratio
1.50
Alpha
0.048
Beta
1.995
Annual Standard Deviation
0.323
Annual Variance
0.104
Information Ratio
0.749
Tracking Error
0.162
Treynor Ratio
0.097
Total Fees
$1180.04
Estimated Strategy Capacity
$110000000.00
Lowest Capacity Asset
IVV RUTTRZ1RC7L1
Portfolio Turnover
0.87%
#region imports
from AlgorithmImports import *
#endregion
class RetrospectiveYellowGreenAlligator(QCAlgorithm):

    def Initialize(self):
        
        # INITIALIZE
        self.SetStartDate(2018, 6, 1) 
        self.SetEndDate(2025, 3, 31)
        self._cash=100000
        self.SetCash(self._cash) 
        self.ticker = "IVV"
        self.spy = self.AddEquity("SPY", Resolution.Daily).Symbol
        self._ticker = self.AddEquity(self.ticker, Resolution.Daily).Symbol
        self._numDaysMax = 20
        self._numDaysMin = 5
        
        # SET BENCHMARK AND PREPARE COMPARATIVE PLOT
        self.reference = self.History(self.spy, 10, Resolution.Daily)['close']
        self._initialValue = self.reference.iloc[0]
        
        
        self.reference_ticker = self.History(self.Symbol(self.ticker), 10, Resolution.Daily)['close']
        self._initialValue_ticker = self.reference_ticker.iloc[0]
        
        self._max = self.MAX(self._ticker, self._numDaysMax, Resolution.Daily)
        self._min = self.MIN(self._ticker, self._numDaysMin, Resolution.Daily)
        
    def OnData(self, data):
        
        
        self._close = self.Securities[self.ticker].Close
        self._stopLoss = self._min.Current.Value
        self._profitTake = self._max.Current.Value
        
        if self._close < self._stopLoss:
            self.SetHoldings(self._ticker, -1)
        elif self._close > self._profitTake:
            self.SetHoldings(self._ticker, 0)
        else:
            self.SetHoldings(self._ticker, 2)
        
        
        self.Plot("Strategy Equity", "SPY", self._cash*self.Securities["SPY"].Close/self._initialValue)
        self.Plot("Strategy Equity", str(self.ticker), self._cash*self.Securities[self.ticker].Close/self._initialValue_ticker)
        
        self.Plot("Limits", "Stop", self._stopLoss)  
        self.Plot("Limits", "Limit", self._profitTake)
        self.Plot("Limits", str(self.ticker), self.Securities[self.ticker].Close)