Overall Statistics |
Total Trades 2 Average Win 0% Average Loss -4.12% Compounding Annual Return -1.394% Drawdown 5.800% Expectancy -1 Net Profit -4.120% Sharpe Ratio -0.782 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.027 Beta 0.964 Annual Standard Deviation 0.014 Annual Variance 0 Information Ratio -1.906 Tracking Error 0.014 Treynor Ratio -0.012 Total Fees $0.00 |
import numpy as np from System.Drawing import Color class RSIAlgorithm(QCAlgorithm): def Initialize(self): # Set our main strategy parameters self.SetStartDate(2015,1, 1) # Set Start Date self.SetEndDate(2018,1,1) # Set End Date self.SetCash(10000) # Set Strategy Cash RSI_Period = 14 # RSI Look back period self.RSI_OB = 80 # RSI Overbought level self.RSI_OS = 20 # RSI Oversold level self.RSI_MID = 50 # RSI Mid level self.Allocate = 50 # Percentage of captital to allocate self.pip = 0.0001 # Find more symbols here: http://quantconnect.com/data self.AddForex("EURUSD", Resolution.Daily,Leverage=1) self.RSI_Ind = self.RSI("EURUSD", RSI_Period) # Ensure that the Indicator has enough data before trading,. self.SetWarmUp(RSI_Period) # Construct "Trade Plot" IndicatorPlot = Chart("Trade Plot") IndicatorPlot.AddSeries(Series("RSI", SeriesType.Line,"", Color.Black)) IndicatorPlot.AddSeries(Series("Over Bought", SeriesType.Line,"", Color.Black)) IndicatorPlot.AddSeries(Series("Mid", SeriesType.Line, "", Color.Black)) IndicatorPlot.AddSeries(Series("Over Sold", SeriesType.Line, "", Color.Black)) IndicatorPlot.AddSeries(Series("Buy", SeriesType.Scatter,"", Color.Green)) IndicatorPlot.AddSeries(Series("Sell", SeriesType.Scatter, "", Color.Red)) self.AddChart(IndicatorPlot) def OnData(self, data): if not self.RSI_Ind.IsReady: return self.Plot("Trade Plot", "RSI", self.RSI_Ind.Current.Value) self.Plot("Trade Plot", "Over Bought", self.RSI_OB) self.Plot("Trade Plot", "Over Sold", self.RSI_OS) self.Plot("Trade Plot", "Mid", self.RSI_MID) rate = data["EURUSD"].Close # Open position if not self.Portfolio.Invested: # Target quantity is 50% of portfolio value quantity = self.CalculateOrderQuantity("EURUSD",self.Allocate/100) # Long EURUSD if self.RSI_Ind.Current.Value < self.RSI_OS: # Buy Stop Market Order with a Stop-Loss self.StopMarketOrder("EURUSD", quantity, rate - self.pip*100) self.Plot("Trade Plot", "Buy", self.RSI_Ind.Current.Value) # Short EURUSD elif self.RSI_Ind.Current.Value > self.RSI_OB: # Sell Stop Market Order with a Stop-Loss self.StopMarketOrder("EURUSD", -quantity, rate + self.pip*100) self.Plot("Trade Plot", "Sell", self.RSI_Ind.Current.Value) # Close position if self.Portfolio.Invested: if self.Portfolio["EURUSD"].Quantity > 0: if self.RSI_Ind.Current.Value > self.RSI_MID: self.Liquidate("EURUSD") self.Plot("Trade Plot", "Sell", self.RSI_Ind.Current.Value) else: if self.RSI_Ind.Current.Value < self.RSI_MID: self.Liquidate("EURUSD") self.Plot("Trade Plot", "Buy", self.RSI_Ind.Current.Value)