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
0.589
Tracking Error
0.194
Treynor Ratio
0
Total Fees
$0.00
class AwesomeOscillator:
    def __init__(self, period_fast=20):
        
        self.Name = "Awesome Osc - {}".format(period_fast)
        self.Time = datetime.min
        self.Value = 0
        self.IsReady = False
        
        self.refEMA = ExponentialMovingAverage(20)
        

    def __repr__(self):
        return "{0} -> IsReady: {1}. Time: {2}. Value: {3}".format(self.Name, self.IsReady, self.Time, self.Value)

    # Update method is mandatory
    def Update(self, input):
        self.Time = input.EndTime
        self.refEMA.Update(self.Time, input.Close)
        
        if self.refEMA.IsReady():
            self.IsReady = True
        self.Value = self.refEMA.Current.Value
        
        
        
class ParticleCalibratedChamber(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 9, 1)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        self.ticker = "AAPL"
        self.AddEquity(self.ticker, Resolution.Daily)
        
        self.refEMA = AwesomeOscillator()

        # self.Schedule.On(self.DateRules.EveryDay(self.ticker), self.TimeRules.BeforeMarketClose(self.ticker, 5), self.Rebalance)
        
        
    def OnData(self, data):
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
            Arguments:
                data: Slice object keyed by symbol containing the stock data
        '''
        self.Debug("refEMA {0} {1}".format(self.refEMA.Value, data[self.ticker].Close))
    
    # def Rebalance(self):

    #     for kvp in self.ActiveSecurities:
    #         today = self.Time   # in datetime format
    #         todayYear, todayMonth, todayDay = (today.year, today.month, today.day)
    #         OpenTime = datetime(todayYear, todayMonth, todayDay, 9, 30)
    #         minutes_lookback = (self.Time - OpenTime).seconds / 60
    #         # self.Debug( "minutes {0} type {1}".format(minutes_lookback, type(minutes_lookback)) )
    #         intraday_df = self.History(kvp.Key, int(minutes_lookback), Resolution.Minute)
            
    #         if intraday_df.empty:   return  # prevent AttributeError when dataframe is empty
        
    #         intraday_high = intraday_df.high.max()
    #         self.Log(intraday_high)