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)