Overall Statistics
import numpy as np
import math

class BasicTemplateAlgorithm(QCAlgorithm):
	
	def __init__(self):
		self.stoploss = 0.02
		self.take_profit = 0.04
		self.buy_order = None
		self.loss_order = None
		self.profit_order = None

	def Initialize(self):

		self.SetCash(25000)
		self.SetStartDate(2016,1,1)
		self.SetEndDate(2017,1,15)
		
		self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
		self.wil = self.WILR(self.spy,9,Resolution.Minute)

	def OnData(self, slice):
		if not self.wil.IsReady:
			return
		
		if not self.Securities[self.spy].Exchange.ExchangeOpen:
			return
		
		if (not self.Portfolio.HoldStock) and (float(str(self.wil.Current.Value)) < -80):
			price = float(slice[self.spy].Close)
			
			quantity = math.floor(float(self.Portfolio.Cash)/price)
			self.buy_order = self.Order(self.spy, quantity)
			self.loss_order = self.StopMarketOrder(self.spy,-quantity, price*(1-self.stoploss))
			self.profit_order = self.LimitOrder(self.spy, -quantity, price*(1+self.take_profit))
			
			self.Log('Purchased SPY on'+str(self.buy_order.OrderId))
			self.Log('Stop loss'+str(self.loss_order))
			self.Log('Take Profit'+str(self.profit_order))
			return
			
	
	def OnOrderEvent(self,event):
		
		if event.Status not in (2,3):
			return
		
		if (self.profit_order) == None or (self.loss_order) == None:
			return
		
		filled = event.OrderId
		
		if self.profit_order == filled:
			self.loss_order.Cancel()
			self.Log(str('loss order canceled'))

		elif self.loss_order.OrderId == filled:
			self.profit_order.Cancel()
			self.Log(str('profit order canceled'))
			
		else:
			return