| Overall Statistics |
|
Total Trades 135 Average Win 2.26% Average Loss -0.54% Compounding Annual Return 539.233% Drawdown 7.100% Expectancy 2.894 Net Profit 193.665% Sharpe Ratio 10.606 Probabilistic Sharpe Ratio 100.000% Loss Rate 25% Win Rate 75% Profit-Loss Ratio 4.22 Alpha 2.809 Beta 0.651 Annual Standard Deviation 0.258 Annual Variance 0.067 Information Ratio 12.226 Tracking Error 0.233 Treynor Ratio 4.207 Total Fees $247.90 Estimated Strategy Capacity $820000000.00 Lowest Capacity Asset NQ Y1VKEF59AV41 |
# region imports
from AlgorithmImports import *
# endregion
class AlertFluorescentPinkGorilla(QCAlgorithm):
def Initialize(self):
# Setup
self.SetStartDate(2022, 1, 7)
self.SetCash(100000)
# Add index
self.NDX = self.AddIndex("NDX", Resolution.Minute).Symbol
# Consolidator
cons = TradeBarConsolidator(timedelta(minutes = 30))
cons.DataConsolidated += self.FiveMinuteHandler
self.SubscriptionManager.AddConsolidator(self.NDX, cons)
# EMA
self.ema_indicator = ExponentialMovingAverage(50)
self.RegisterIndicator(self.NDX, self.ema_indicator, cons)
# Request futures
NQ_future = self.AddFuture(Futures.Indices.NASDAQ100EMini)
NQ_future.SetFilter(0, 90)
self.NQ_future_symbol = NQ_future.Symbol
# Data storage
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 storage
self.data_storage = data
def FiveMinuteHandler(self, sender, bar):
# If not warmup
if not self.IsWarmingUp:
# If close above EMA
if self.Securities[self.NDX].Close > self.ema_indicator.Current.Value:
if not self.Portfolio.Invested:
for kvp in self.data_storage.FutureChains:
symbol = kvp.Key
if symbol == self.NQ_future_symbol:
chain = kvp.Value
for contract in chain:
self.MarketOrder(contract.Symbol, 1)
break
# Else
else:
self.Liquidate()