| Overall Statistics |
|
Total Trades 13 Average Win 10.45% Average Loss -2.14% Compounding Annual Return 40.539% Drawdown 21.100% Expectancy 1.945 Net Profit 28.179% Sharpe Ratio 1.146 Loss Rate 50% Win Rate 50% Profit-Loss Ratio 4.89 Alpha -0.122 Beta 25.916 Annual Standard Deviation 0.344 Annual Variance 0.118 Information Ratio 1.089 Tracking Error 0.344 Treynor Ratio 0.015 Total Fees $41.80 |
import clr
clr.AddReference("System")
clr.AddReference("QuantConnect.Algorithm")
clr.AddReference("QuantConnect.Indicators")
clr.AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
import decimal as d
import math
import numpy as np
import pandas as pd
import statistics
from datetime import datetime, timedelta
class MovingAverageCrossAlgorithm(QCAlgorithm):
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(2017,9,1) #Set Start Date
self.SetEndDate(2018,3,12) #Set End Date
self.SetCash(60000) #Set Strategy Cash
# Find more symbols here: http://quantconnect.com/data
self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
self.vxx = self.AddEquity("VXX", Resolution.Minute).Symbol
#self.gld = self.AddEquity("GLD", Resolution.Minute).Symbol
#SetWarmup
self.SetWarmup(TimeSpan.FromDays(75))
#Run 1x/Hr
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(10, 0),
Action(self.EveryDay))
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(11, 0),
Action(self.EveryDay))
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(12, 0),
Action(self.EveryDay))
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(13, 0),
Action(self.EveryDay))
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(14, 0),
Action(self.EveryDay))
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.At(15, 0),
Action(self.EveryDay))
# create a 21 day exponential moving average
self.SPY = self.EMA("SPY", 18, Resolution.Daily);
self.previous = None
def EveryDay(self):
#Check to see if warmed SetWarmup
if self.IsWarmingUp: return
#Define a small tolerance on our checks to avoid bouncing
tolerance = 0.004;
#Identify if we hold the security or not
SPYholdings = self.Portfolio["SPY"].Quantity
VXXholdings = self.Portfolio["VXX"].Quantity
#SPY
if SPYholdings <= 60 and VXXholdings >= 0 and self.Securities["SPY"].Price > self.SPY.Current.Value * d.Decimal(1 + tolerance):
self.Liquidate("VXX")
#self.Liquidate("GLD")
self.SetHoldings("SPY", 1.0)
if SPYholdings >= 0 and VXXholdings <= 0 and self.Securities["SPY"].Price < self.SPY.Current.Value * d.Decimal(1 - tolerance):
self.Liquidate("SPY")
self.SetHoldings("VXX", 0.6)
#self.SetHoldings("GLD", 0.4)
self.previous = self.Time