| Overall Statistics |
|
Total Trades 27 Average Win 9.80% Average Loss -7.89% Compounding Annual Return 7.120% Drawdown 54.500% Expectancy 0.897 Net Profit 128.478% Sharpe Ratio 0.475 Loss Rate 15% Win Rate 85% Profit-Loss Ratio 1.24 Alpha 0.146 Beta -3.043 Annual Standard Deviation 0.179 Annual Variance 0.032 Information Ratio 0.363 Tracking Error 0.179 Treynor Ratio -0.028 Total Fees $27.10 |
import numpy as np
from datetime import datetime
import pandas as pd
class MovingAverage(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2007,1,1) #Set Start Date
#self.SetEndDate(2018,10,29) #Set End Date
self.SetCash(10000) #Set Strategy Cash
self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
self.ief = self.AddEquity("IEF", Resolution.Minute).Symbol
self.SetWarmUp(2860,Resolution.Hour)
self.previous = None
self.position = None
self.rsi_spy = self.RSI("SPY", 35, MovingAverageType.Simple,Resolution.Hour)
#day--warmup 440,28
#hour--warmup 2860,35=39,862.6
def OnData(self, data):
if self.IsWarmingUp: return
if data.Bars.ContainsKey("SPY") or data.Bars.ContainsKey("IEF"):
return
if self.rsi_spy.Current.Value >= 70:
if self.position == None:
self.SetHoldings("IEF", 1)
elif self.position == "SPY":
self.Liquidate("SPY")
self.SetHoldings("IEF", 1)
self.position = "IEF"
if self.rsi_spy.Current.Value <= 40:
if self.position == None:
self.SetHoldings("SPY", 1)
elif self.position == "IEF":
self.Liquidate("IEF")
self.SetHoldings("SPY", 1)
self.position = "SPY"from QuantConnect.Indicators import *
class BasicTemplateAlgorithm(QCAlgorithm):
'''Basic template algorithm simply initializes the date range and cash'''
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.SetStartDate(2015,9,1) #Set Start Date
self.SetEndDate(2018,5,15) #Set End Date
self.SetCash(100000) #Set Strategy Cash
# Find more symbols here: http://quantconnect.com/data
self.AddEquity("PFE", Resolution.Daily)
self.BollingerBand = self.BB("PFE",20,2,MovingAverageType.Simple,Resolution.Daily)
self.Strength = self.RSI("PFE",14,MovingAverageType.Simple,Resolution.Daily)
self.SetWarmUp(20)
self.SetBenchmark("SPY")
def OnData(self, data):
rsi = self.Strength.Current.Value
lower = self.BollingerBand.LowerBand.Current.Value
upper = self.BollingerBand.UpperBand.Current.Value
middle = self.BollingerBand.MiddleBand.Current.Value
current = data["PFE"].Close
#need to check when to go long
if not self.Portfolio.Invested:
if current < lower and rsi < 40:
self.SetHoldings("PFE", 1)
if current > upper and rsi > 60:
self.SetHoldings("PFE", -1)
if self.Portfolio.Invested:
if self.Portfolio["PFE"].IsLong:
if current > middle:
self.Liquidate("PFE")
if self.Portfolio["PFE"].IsShort:
if current < middle:
self.Liquidate("PFE")