Overall Statistics
Total Trades
2292
Average Win
0.52%
Average Loss
-0.47%
Compounding Annual Return
26.200%
Drawdown
46.000%
Expectancy
0.153
Net Profit
109.089%
Sharpe Ratio
0.712
Probabilistic Sharpe Ratio
20.805%
Loss Rate
45%
Win Rate
55%
Profit-Loss Ratio
1.10
Alpha
0.287
Beta
-0.573
Annual Standard Deviation
0.334
Annual Variance
0.112
Information Ratio
0.342
Tracking Error
0.45
Treynor Ratio
-0.416
Total Fees
$8700.73
Estimated Strategy Capacity
$180000.00
Lowest Capacity Asset
SPUU VQX5IUOB8JMT
Portfolio Turnover
28.65%
#region imports
from AlgorithmImports import *
#endregion
#0. LOAD LIBRARIES

from Alphas.MacdAlphaModel import MacdAlphaModel
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel
from Risk.MaximumDrawdownPercentPerSecurity import MaximumDrawdownPercentPerSecurity

#The MaximumDrawdownPercentPerSecurity model monitors the unrealized profit percentage of each security in the portfolio. 
#When the percentage drops below a threshold relative to the opening price, it liquidates the position and 
#cancels all insights in the Insight Manager that are for the security.
#This model can operate even when the Portfolio Construction model provides an 
#empty list of PortfolioTarget objects.

class CrawlingYellowGreenCow(QCAlgorithm):

    #1. INITIALIZE
    def Initialize(self):
        
        self.SetStartDate(2020, 1, 30)  
        self.SetEndDate(2023, 3, 31)
        self._cash = 100000
        self.SetCash(self._cash)  
        
        #2. UNIVERSE SELECTION
        symbols = [ 
            Symbol.Create("TBT", SecurityType.Equity, Market.USA),
            Symbol.Create("SPUU", SecurityType.Equity, Market.USA),
            Symbol.Create("QLD", SecurityType.Equity, Market.USA),
            Symbol.Create("UWM", SecurityType.Equity, Market.USA),
            Symbol.Create("DIG", SecurityType.Equity, Market.USA),
            Symbol.Create("UGL", SecurityType.Equity, Market.USA) ]
        self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) )
        
        #3. MODEL STRUCTURE
        
        self.AddAlpha(MacdAlphaModel(12, 26, 9, MovingAverageType.Simple, Resolution.Daily))
        self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
        self.SetExecution(ImmediateExecutionModel())
        self.SetRiskManagement(MaximumDrawdownPercentPerSecurity(0.05))
        
        #4. REFERENCES FOR PLOTTING THE BENCHMARK
        self._benchmark = self.AddEquity("SPY", Resolution.Daily, Market.USA).Symbol
        self._Initial = self.History(self._benchmark,1, Resolution.Daily)
        self._initialPrice = self._Initial['open'][0]
        
    #5. PLOTS
    def OnData(self, data):
        self.Plot("Strategy Equity", "Relative", self._cash*self.Securities[self._benchmark].Close/(self._initialPrice*self.Portfolio.TotalPortfolioValue))