| Overall Statistics |
|
Total Trades 77 Average Win 6.54% Average Loss -2.19% Compounding Annual Return 12.240% Drawdown 23.800% Expectancy 1.291 Net Profit 217.501% Sharpe Ratio 0.754 Probabilistic Sharpe Ratio 16.261% Loss Rate 42% Win Rate 58% Profit-Loss Ratio 2.98 Alpha 0.119 Beta -0.063 Annual Standard Deviation 0.148 Annual Variance 0.022 Information Ratio -0.036 Tracking Error 0.205 Treynor Ratio -1.783 Total Fees $556.86 |
class RSIAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetEndDate(2020, 1, 1)
self.SetCash(100000)
self.AddEquity("QQQ", Resolution.Daily)
self.AddEquity("SPY", Resolution.Daily)
self.benchmarkTicker = 'SPY'
self.SetBenchmark(self.benchmarkTicker)
self.initBenchmarkPrice = None
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)
self.BB_QQQ = self.BB("QQQ", 10, 2, MovingAverageType.Exponential, Resolution.Daily)
self.SetWarmUp(52, Resolution.Daily)
def OnData(self, data):
# self.UpdateBenchmarkValue()
# self.Plot('Strategy Equity', self.benchmarkTicker, self.benchmarkValue)
if self.IsWarmingUp:
return
self.IN = self.Securities["QQQ"].Close > self.BB_QQQ.MiddleBand.Current.Value
self.OUT = self.Securities["QQQ"].Close < self.BB_QQQ.LowerBand.Current.Value
if self.IN:
self.SetHoldings([PortfolioTarget("QQQ", 1.00)])
elif self.OUT:
self.SetHoldings([PortfolioTarget("QQQ", 0.00)])
def UpdateBenchmarkValue(self):
''' Simulate buy and hold the Benchmark '''
if self.initBenchmarkPrice is None:
self.initBenchmarkCash = self.Portfolio.Cash
self.initBenchmarkPrice = self.Benchmark.Evaluate(self.Time)
self.benchmarkValue = self.initBenchmarkCash
else:
currentBenchmarkPrice = self.Benchmark.Evaluate(self.Time)
self.benchmarkValue = (currentBenchmarkPrice / self.initBenchmarkPrice) * self.initBenchmarkCash