Overall Statistics
Total Trades
3997
Average Win
0.04%
Average Loss
-0.06%
Compounding Annual Return
-8.437%
Drawdown
45.100%
Expectancy
-0.037
Net Profit
-16.142%
Sharpe Ratio
-0.11
Probabilistic Sharpe Ratio
2.940%
Loss Rate
39%
Win Rate
61%
Profit-Loss Ratio
0.59
Alpha
-0.073
Beta
1.419
Annual Standard Deviation
0.255
Annual Variance
0.065
Information Ratio
-0.46
Tracking Error
0.13
Treynor Ratio
-0.02
Total Fees
$4643.19
Estimated Strategy Capacity
$150000000.00
Lowest Capacity Asset
AVGO UEW4IOBWVPT1
# region imports
from AlgorithmImports import *
# endregion

class MuscularYellowGreenMonkey(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 1, 1)
        self.SetEndDate(2023, 1, 1)
        self.SetCash(1000000)  # Set Strategy Cash
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverseSelection(QQQETFUniverseSelectionModel(self.UniverseSettings))
        self.AddAlpha(ConstantAlphaModel(InsightType.Price, InsightDirection.Up, timedelta(days=30)))
        self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())


class QQQETFUniverseSelectionModel(ETFConstituentsUniverseSelectionModel):
    def __init__(self, universe_settings: UniverseSettings = None) -> None:
        symbol = Symbol.Create("QQQ", SecurityType.Equity, Market.USA)
        super().__init__(symbol, universe_settings, self.ETFConstituentsFilter)

    def ETFConstituentsFilter(self, constituents: List[ETFConstituentData]) -> List[Symbol]:
        selected = sorted([c for c in constituents if c.Weight],
            key=lambda c: c.Weight, reverse=True)[:10]
        return [c.Symbol for c in selected]