Overall Statistics |
Total Trades 25 Average Win 2.42% Average Loss -2.82% Compounding Annual Return 1.724% Drawdown 16.200% Expectancy 0.237 Net Profit 2.629% Sharpe Ratio 0.177 Probabilistic Sharpe Ratio 13.164% Loss Rate 33% Win Rate 67% Profit-Loss Ratio 0.86 Alpha 0.022 Beta 0.015 Annual Standard Deviation 0.12 Annual Variance 0.014 Information Ratio 0.391 Tracking Error 0.213 Treynor Ratio 1.408 Total Fees $26.82 |
from Alphas.RsiAlphaModel import RsiAlphaModel class VerticalUncoupledCircuit(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 8, 20) # Set Start Date self.SetCash(8000) # Set Strategy Cash self.AddEquity("SPY", Resolution.Daily) self.AddEquity("PFE", Resolution.Daily) # Indicators section #---------------------------------------- # define a 14-period daily RSI indicator with shortcut helper method self.rsi = self.RSI("SPY", 14, MovingAverageType.Simple, Resolution.Daily) # Chart section #---------------------------------------- self.SetBenchmark("SPY") mainChart = Chart("Equity Curve With Benchmark") mainChart.AddSeries(Series("Equity Curve", SeriesType.Line, 0)) mainChart.AddSeries(Series("Benchmark", SeriesType.Line, 0)) self.AddChart(mainChart) self.scale = None 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 ''' if self.scale == None: self.scale = 8000 / data["SPY"].Price if not self.Portfolio.Invested: self.SetHoldings("PFE", 1) #self.SetHoldings("SPY", .5) self.Plot("Equity Curve With Benchmark", "Equity Curve", self.Portfolio.TotalPortfolioValue) self.Plot("Equity Curve With Benchmark", "Benchmark", self.Benchmark.Evaluate(self.Time) * self.scale)
class my_algos: def rsi_algo_v1(self): self.Debug("hello from rsi_algo_v1 Fn")
#from Alphas.RsiAlphaModel import RsiAlphaModel from System.Drawing import Color #import src.algos.my_algos class VerticalUncoupledCircuit(QCAlgorithm): def Initialize(self): #self.SetStartDate(2017, 8, 20) # Set Start Date self.SetStartDate(2018, 8, 20) # Set Start Date self.SetCash(8000) # Set Strategy Cash self.my_stock = "PFE" self.AddEquity("SPY", Resolution.Daily) self.AddEquity(self.my_stock, Resolution.Daily) # Indicators section #---------------------------------------- # define a 14-period daily RSI indicator with shortcut helper method self.rsi = self.RSI(self.my_stock, 10, MovingAverageType.Simple, Resolution.Daily) # initialize the indicator with the daily history close price / History Request Warm-Up history = self.History([self.my_stock], 10, Resolution.Daily) for time, row in history.loc[self.my_stock].iterrows(): self.rsi.Update(time, row["close"]) #---------------------------------------- # define a MACD indicator with shortcut helper method self.macd = self.MACD(self.my_stock, 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily) # Chart section #---------------------------------------- self.SetBenchmark(self.my_stock) mainChart = Chart("Equity Curve With Benchmark") mainChart.AddSeries(Series("Equity Curve", SeriesType.Line, 0)) mainChart.AddSeries(Series("Benchmark", SeriesType.Line, 0)) mainChart.AddSeries(Series("macd", SeriesType.Line,"", Color.Red)) self.AddChart(mainChart) self.scale = None 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 ''' #if not self.macd.IsReady: #self.Debug(dir(data)) #pe = qb.GetFundamental(["PFE"], "ValuationRatios.PERatio", datetime(2018, 8, 20), datetime.now()) #self.Debug(pe) if self.scale == None: self.scale = 8000 / data[self.my_stock].Price # check if this algorithm is still warming up if not self.macd.IsReady: return macd_fast_value = self.macd.Fast.Current.Value macd_slow_value = self.macd.Slow.Current.Value #self.Debug(hist) #------------------------------------------------------------------------------------ if self.rsi.IsReady: # get the current RSI value rsi_value = self.rsi.Current.Value #self.Debug(rsi_value) # get the current average gain of rsi average_gain = self.rsi.AverageGain.Current.Value # get the current average loss of rsi average_loss = self.rsi.AverageLoss.Current.Value # Below stock buy-sell block moved under above IF block # so that buy-sell algo is triggered after Indicator warm-up is complete. if not self.Portfolio.Invested: # If portfolio is not invested if rsi_value <= 37: # If RSI for stock is low self.SetHoldings(self.my_stock, 1) # then buy stock #self.SetHoldings("SPY", .5) else: pass #unncessary else block if self.Portfolio.Invested: # If portfolio is invested if rsi_value >= 60: # If RSI for stock is HIGH self.SetHoldings(self.my_stock, 0) # then buy stock #self.SetHoldings("SPY", .5) else: pass #unncessary else block self.Plot("Equity Curve With Benchmark", "Equity Curve", self.Portfolio.TotalPortfolioValue) self.Plot("Equity Curve With Benchmark", "Benchmark", self.Benchmark.Evaluate(self.Time) * self.scale) #self.Plot("Equity Curve With Benchmark", "MACD Signal", self.macd.Signal)
#from Alphas.RsiAlphaModel import RsiAlphaModel class VerticalUncoupledCircuit(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 8, 20) # Set Start Date self.SetCash(8000) # Set Strategy Cash self.my_stock = "PFE" self.AddEquity("SPY", Resolution.Daily) self.AddEquity(self.my_stock, Resolution.Daily) # Indicators section #---------------------------------------- # define a 14-period daily RSI indicator with shortcut helper method self.rsi = self.RSI(self.my_stock, 10, MovingAverageType.Simple, Resolution.Daily) # initialize the indicator with the daily history close price / History Request Warm-Up history = self.History([self.my_stock], 10, Resolution.Daily) for time, row in history.loc[self.my_stock].iterrows(): self.rsi.Update(time, row["close"]) # Chart section #---------------------------------------- self.SetBenchmark(self.my_stock) mainChart = Chart("Equity Curve With Benchmark") mainChart.AddSeries(Series("Equity Curve", SeriesType.Line, 0)) mainChart.AddSeries(Series("Benchmark", SeriesType.Line, 0)) self.AddChart(mainChart) self.scale = None 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 ''' if self.scale == None: self.scale = 8000 / data[self.my_stock].Price # check if this algorithm is still warming up if self.rsi.IsReady: # get the current RSI value rsi_value = self.rsi.Current.Value #self.Debug(rsi_value) # get the current average gain of rsi average_gain = self.rsi.AverageGain.Current.Value # get the current average loss of rsi average_loss = self.rsi.AverageLoss.Current.Value # Below stock buy-sell block moved under above IF block # so that buy-sell algo is triggered after Indicator warm-up is complete. if not self.Portfolio.Invested: # If portfolio is not invested if rsi_value <= 37: # If RSI for stock is low self.SetHoldings(self.my_stock, 1) # then buy stock #self.SetHoldings("SPY", .5) else: pass #unncessary else block if self.Portfolio.Invested: # If portfolio is invested if rsi_value >= 60: # If RSI for stock is HIGH self.SetHoldings(self.my_stock, 0) # then buy stock #self.SetHoldings("SPY", .5) else: pass #unncessary else block self.Plot("Equity Curve With Benchmark", "Equity Curve", self.Portfolio.TotalPortfolioValue) self.Plot("Equity Curve With Benchmark", "Benchmark", self.Benchmark.Evaluate(self.Time) * self.scale)