| Overall Statistics |
|
Total Trades 14 Average Win 3.58% Average Loss 0% Compounding Annual Return 2.108% Drawdown 4.900% Expectancy 0 Net Profit 27.786% Sharpe Ratio 0.588 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha -0.01 Beta 1.587 Annual Standard Deviation 0.037 Annual Variance 0.001 Information Ratio 0.042 Tracking Error 0.037 Treynor Ratio 0.014 Total Fees $350.00 |
import numpy as np
class BasicTemplateAlgorithm(QCAlgorithm):
'''Basic template algorithm simply initializes the date range and cash'''
def Initialize(self):
self.SetStartDate(2007,1, 1) #Set Start Date
self.SetEndDate(2018,9,30) #Set End Date
self.SetCash(10000) #Set Strategy Cash
self.spy = self.AddEquity("SPY", Resolution.Daily)
self.AddEquity("UPRO", Resolution.Daily)
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)
self.rsi = self.RSI("SPY", 2)
self.sma200 = self.SMA("SPY", 200)
self.sma20 = self.SMA("SPY", 20) ## will use this later on
def OnData(self, data):
if not self.sma200.IsReady: return
if data.ContainsKey("SPY") == False: return
#var buy1 = RSI<24 && adx>20;
#var buy2 = RSI<10 && adx>30;
#if _spyhigh>Avg200 then buy1 else buy2;
if data[self.spy.Symbol].High > self.sma200.Current.Value and self.rsi.Current.Value <24 and not self.Portfolio["UPRO"].Invested:
self.Debug("UPRO buy")
self.MarketOrder("UPRO", 5000)
self.Debug("Market order was placed")
#var sell1 = _spy>_Avg20 && RSI>85;
#var sell2 = _spy>Avg20 && RSI>80;
#if _spyhigh<SMA200 then sell1 else sell2;
if data[self.spy.Symbol].High > self.sma200.Current.Value and (self.rsi.Current.Value > 85 or self.rsi.Current.Value < 80):
self.Debug("UPRO sell")
self.Liquidate()