Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
0.239%
Drawdown
0.300%
Expectancy
0
Net Profit
1.198%
Sharpe Ratio
1.023
Probabilistic Sharpe Ratio
51.907%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0.002
Annual Variance
0
Information Ratio
1.023
Tracking Error
0.002
Treynor Ratio
0
Total Fees
$1.00
Estimated Strategy Capacity
$9500000000.00
Lowest Capacity Asset
AAPL R735QTJ8XC9X
# from AlgorithmImports import *
from datetime import datetime
from dateutil.relativedelta import relativedelta

class RollingWindowAlgorithm(QCAlgorithm):
        
    def Initialize(self):
        self.SetStartDate(datetime.now() - relativedelta(years = 5))
        self.SetEndDate(datetime.now())
        self.SetCash(10000)
        self.SetBrokerageModel(brokerage = BrokerageName.InteractiveBrokersBrokerage, accountType = AccountType.Cash)
        self.tickerObj = self.AddEquity(ticker = 'AAPL',
                       resolution = Resolution.Daily,
                       market = Market.USA,
                       fillDataForward = True,
                       leverage = Security.NullLeverage,
                       extendedMarketHours = False)
        self.ticker = self.tickerObj.Symbol
        
        self.window = RollingWindow[TradeBar](20) 
        self.sma = self.SMA(symbol = self.ticker,
                            period = 20,
                            resolution = Resolution.Daily,
                            selector = None) 
        self.sma.Updated += self.SMAUpdated
        self.smaWindow = RollingWindow[IndicatorDataPoint](20)
        
     
    def OnData(self, data):
        
        self.window.Add(data[self.ticker])
        
        if not self.smaWindow.IsReady:
            return
        
        if not self.Portfolio.Invested: 
                self.MarketOrder(self.ticker, 1)
                self.Debug(f'Buy on Market Open: {self.window[0].Time}')
                self.Debug(f'Trading day before: {round(self.smaWindow[1].Value, 2)}, Current: {round(self.smaWindow[1].Value, 2)}')
    
    
    def SMAUpdated(self, sender, updated):
        self.smaWindow.Add(updated)