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