Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
-1.735
Tracking Error
0.125
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
# region imports
from AlgorithmImports import *
# endregion

class FormalBrownElephant(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2023, 1, 1)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        self.symbol = self.AddEquity("SPY", Resolution.Hour).Symbol
        self.six_ema = ExponentialMovingAverage(6)
        self.twelve_ema = ExponentialMovingAverage(12)


        self.consolidator = TradeBarConsolidator(timedelta(hours = 1))
        self.consolidator.DataConsolidated += self.consolidation_handler
        self.SubscriptionManager.AddConsolidator(self.symbol, self.consolidator)
        self.RegisterIndicator(self.symbol, self.six_ema, self.consolidator)
        self.RegisterIndicator(self.symbol, self.twelve_ema, self.consolidator)


        history = self.History(self.symbol, 200, Resolution.Hour).loc[self.symbol]
        for idx, bar in history.iterrows():
            tradeBar = TradeBar(idx, self.symbol, bar.open, bar.high, bar.low, bar.close, bar.volume, timedelta(hours=1))
            self.consolidator.Update(tradeBar)



        chart = Chart("SPY")
        chart.AddSeries(Series("Uptrend Crossover", SeriesType.Scatter, "$", Color.Green, ScatterMarkerSymbol.Triangle))
        chart.AddSeries(Series("Downtrend Crossover", SeriesType.Scatter, "$", Color.Red, ScatterMarkerSymbol.TriangleDown))
        self.AddChart(chart)


    def consolidation_handler(self, sender: object, consolidated_bar: TradeBar) -> None:
        
        pass
        #self.Plot(consolidated_bar.Symbol.Value, "4HourBar", consolidated_bar.Close)



    def OnData(self, slice):

        price = self.Securities[self.symbol].Price
        six_ema = self.six_ema.Current.Value
        twelve_ema = self.twelve_ema.Current.Value

        self.Plot("SPY", "Price", price)
        self.Plot("SPY", "6 EMA", self.six_ema.Current.Value)
        self.Plot("SPY", "12 EMA", self.twelve_ema.Current.Value)

        if six_ema >= twelve_ema:
            self.Plot("SPY", "Uptrend Crossover", six_ema)

        
        if six_ema < twelve_ema:
            self.Plot("SPY", "Downtrend Crossover", six_ema)