Overall Statistics
Total Trades
4
Average Win
0%
Average Loss
-56.44%
Compounding Annual Return
-96.995%
Drawdown
87.700%
Expectancy
-1
Net Profit
-86.936%
Sharpe Ratio
-0.661
Probabilistic Sharpe Ratio
1.346%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.408
Beta
3.646
Annual Standard Deviation
1.21
Annual Variance
1.465
Information Ratio
-0.63
Tracking Error
1.098
Treynor Ratio
-0.219
Total Fees
$5.55
Estimated Strategy Capacity
$170000000.00
Lowest Capacity Asset
NQ XZDYPWUWC7I9
# region imports
from AlgorithmImports import *
# endregion

class AlertFluorescentPinkGorilla(QCAlgorithm):

    def Initialize(self):

        # Set Start Date
        self.SetStartDate(2022, 1, 7)

        # Set Strategy Cash
        self.SetCash(100000)

        # Slow EMA period
        self.slow_ema_period = 10

        # Add index
        self.NDX = self.AddIndex("NDX", Resolution.Minute).Symbol

        #  Create 5-minute consolidator
        five_min_cons = TradeBarConsolidator(timedelta(minutes = 15))

        # Assign FiveMinuteHandler as the receiver of consolidated bars for our consolidator object
        five_min_cons.DataConsolidated += self.FiveMinuteHandler
        
        # Subscribe consolidator object to be automatically updated with minute bars
        self.SubscriptionManager.AddConsolidator(self.NDX, five_min_cons)

        # 10-EMA
        self.ten_ema = ExponentialMovingAverage(self.slow_ema_period)

        # Register indicator
        self.RegisterIndicator(self.NDX, self.ten_ema, five_min_cons)

        # Requesting data
        NQ_future = self.AddFuture(Futures.Indices.NASDAQ100EMini) 

        # Set filter
        NQ_future.SetFilter(0, 90)

        # NQ future symbol
        self.NQ_future_symbol = NQ_future.Symbol

        # Data
        self.data_storage = 0

        # Warmup period
        self.SetWarmUp(timedelta(days = 10))

    def OnData(self, data: Slice):

        # If not warming up
        if not self.IsWarmingUp:
        
            # Data
            self.data_storage = data

    def FiveMinuteHandler(self, sender, bar):
        
        # If not warmup
        if not self.IsWarmingUp:

            # If not invested
            if not self.Portfolio.Invested:

                # If close above EMA
                if self.Securities[self.NDX].Close > self.ten_ema.Current.Value:

                    # Loop future chain
                    for kvp in self.data_storage.FutureChains:

                        # Symbol
                        symbol = kvp.Key

                        # If symbol is NQ future
                        if symbol == self.NQ_future_symbol:
                            
                            # Chain
                            chain = kvp.Value

                            # Loop chain
                            for contract in chain:

                                # Market order
                                self.MarketOrder(contract.Symbol, 1, tag = "Entering long")

                                # Break
                                break