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 -2.895 Tracking Error 0.085 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from System.Drawing import Color class MACD(QCAlgorithm): def Initialize(self): self.SetStartDate(2021,7, 8) self.SetEndDate(2021, 9, 10) self.SetWarmUp(timedelta(days = 45)) self.SetCash(25000) # Set Strategy Cash self.resolution = Resolution.Daily self.ticker = "EBAY" self.tickerObj = self.AddEquity(self.ticker, self.resolution ).Symbol self.dataPlot2 = Chart("MACD") self.dataPlot2.AddSeries(Series('MACD', SeriesType.Line, '')) self.dataPlot2.AddSeries(Series('Signal_Line', SeriesType.Line, '')) self.AddChart(self.dataPlot2) self.symbolDataBySymbol = {} self.symbolDataBySymbol[self.ticker] = SymbolData(self, self.ticker, self.resolution) class SymbolData: def __init__(self, algorithm, symbol, resolution ): self.algorithm = algorithm self.symbol = symbol self.resolution = resolution self.macd = algorithm.MACD(self.symbol,12,26,9,MovingAverageType.Exponential, self.resolution, Field.Low) self.macd.Updated += self.OnSymbolDataUpdate self.df = pd.DataFrame(np.array([]),columns=['macd']) self.hold = False def OnSymbolDataUpdate(self, sender, updated): self.algorithm.Plot('MACD','MACD', self.macd.Current.Value) self.algorithm.Plot('MACD','Signal_Line', self.macd.Signal.Current.Value) self.algorithm.Log(f"MACD {self.macd.Current.Value}\tSignal Line\t{self.macd.Signal.Current.Value}")
from System.Drawing import Color import pandas as pd import numpy as np class EMAMomentumUniverse(QCAlgorithm): def Initialize(self): self.SetStartDate(2021,5, 1) # Set Start Date (2020,8, 1) self.SetEndDate(2021, 7, 1) # Set End Date (2021, 1, 30) self.SetWarmUp(timedelta(days = 45)) # Set days to Max indicator period self.SetCash(25000) # Set Strategy Cash self.resolution = Resolution.Daily self.ticker = "OCGN" self.tickerObj = self.AddEquity(self.ticker, self.resolution ).Symbol self.dataPlot2 = Chart("BB") self.dataPlot2.AddSeries(Series('SellSignal', SeriesType.Scatter, '', Color.Red,ScatterMarkerSymbol.Circle)) self.dataPlot2.AddSeries(Series('BuySignal', SeriesType.Scatter, '', Color.Green,ScatterMarkerSymbol.Circle)) self.dataPlot2.AddSeries(Series('Price', SeriesType.Line, '$')) self.dataPlot2.AddSeries(Series('BollingerUpperBand', SeriesType.Line, '$')) self.dataPlot2.AddSeries(Series('BollingerMiddleBand', SeriesType.Line, '$')) self.dataPlot2.AddSeries(Series('BollingerLowerBand', SeriesType.Line, '$')) self.dataPlot2.AddSeries(Series('MACD', SeriesType.Line, '')) self.dataPlot2.AddSeries(Series('RSI', SeriesType.Line, '')) self.dataPlot2.AddSeries(Series('MacdLine', SeriesType.Line, '')) self.AddChart(self.dataPlot2) self.symbolDataBySymbol = {} #SymbolData(self, self.ticker, self.resolution) self.symbolDataBySymbol[self.ticker] = SymbolData(self, self.ticker, self.resolution) def OnData(self, data): for symbol, symbolData in self.symbolDataBySymbol.items(): symbolData.UpdatePrice(self.Securities[symbol].Price) class SymbolData: def __init__(self, algorithm, symbol, resolution ): self.algorithm = algorithm self.symbol = symbol self.resolution = resolution self.price = 0.00 self.ema13 = algorithm.EMA(str(self.symbol), 13) self.ema63 = algorithm.EMA(str(self.symbol), 63) self.ema150 = algorithm.EMA(str(self.symbol), 150) self.macdSignalLine = 0.00 # signal line for MACD based on 9 EMA self.kama = algorithm.KAMA(str(self.symbol), 10,2,30, self.resolution) self.macd = algorithm.MACD(self.symbol,12,26,9,MovingAverageType.Exponential, self.resolution, Field.Low) self.rsi = algorithm.RSI(self.symbol,14) self.bollinger = algorithm.BB(self.symbol, 20, 1, MovingAverageType.Simple, self.resolution, Field.Low) self.lookback = 13 self.std = algorithm.STD(symbol, self.lookback,self.resolution) self.macd.Updated += self.OnSymbolDataUpdate self.df = pd.DataFrame(np.array([]),columns=['macd']) def UpdatePrice(self, price): self.price= price # for daily resolution it's the closing price on the day before self.algorithm.Plot('BB', 'Price', self.price) self.femaShort = float(str(self.ema13.Current.Value))>float(str(self.ema63.Current.Value)) #self.algorithm.Log(f"bollinger {self.bollinger}") if not self.femaShort: self.algorithm.Plot(str(self.symbol),'EmaSell',self.price) self.algorithm.Log(f"Sell {self.price} Fema 13 {self.ema13.Current.Value} 63 {self.ema63.Current.Value}") #if price<self.kama.Current.Value: # self.algorithm.Plot(str(self.symbol),'KamaSell',self.price) # self.algorithm.Log(f"Sell {self.price} kama {self.kama.Current.Value}") if self.macd.Current.Value<0 : #self.algorithm.Plot('BB','MACDSell',self.price) self.algorithm.Log(f"Sell {self.price} MACD {self.macd.Current.Value}") if self.rsi.Current.Value>70: #self.algorithm.Plot('BB','RSISell',self.price) self.algorithm.Log(f"Sell {self.price} RSI {self.rsi.Current.Value}") if price<float(str(self.bollinger.LowerBand.Current.Value)): #self.algorithm.Plot('BB','BBSell',self.price) self.algorithm.Log(f"Sell {self.price} BB {self.bollinger.LowerBand.Current.Value}") def OnSymbolDataUpdate(self, sender, updated): df2 = pd.DataFrame(np.array([self.macd.Current.Value]),columns=['macd']) self.df=self.df.append(df2,ignore_index=True) macdSignalLine=self.df.macd.ewm(span=9, adjust=False).mean()[-1:] # we take 9 days avarage self.macdSignalLine = macdSignalLine.iloc[0] #self.algorithm.Plot(str(self.symbol),'EMA13', self.ema13.Current.Value) #self.algorithm.Plot(str(self.symbol),'EMA63', self.ema63.Current.Value) #self.algorithm.Plot(str(self.symbol),'EMA150', self.ema150.Current.Value) #self.algorithm.Plot(str(self.symbol),'Kama', self.kama.Current.Value) self.algorithm.Plot('BB','Std', self.std.Current.Value) self.algorithm.Plot('BB','MACD', self.macd.Current.Value) self.algorithm.Plot('BB','RSI', self.rsi.Current.Value) self.algorithm.Plot('BB','MacdLine', self.macdSignalLine) self.algorithm.Plot('BB', 'BollingerUpperBand', self.bollinger.UpperBand.Current.Value) self.algorithm.Plot('BB', 'BollingerMiddleBand', self.bollinger.MiddleBand.Current.Value) self.algorithm.Plot('BB', 'BollingerLowerBand', self.bollinger.LowerBand.Current.Value)