| 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)