Overall Statistics
Total Trades
9306
Average Win
0.27%
Average Loss
-0.24%
Compounding Annual Return
-32.956%
Drawdown
71.200%
Expectancy
-0.115
Net Profit
-70.228%
Sharpe Ratio
-1.876
Loss Rate
58%
Win Rate
42%
Profit-Loss Ratio
1.11
Alpha
-0.374
Beta
-0.015
Annual Standard Deviation
0.201
Annual Variance
0.04
Information Ratio
-2.056
Tracking Error
0.26
Treynor Ratio
25.122
Total Fees
$38998.94
#
#   QuantConnect Basic Template:
#	Fundamentals to using a QuantConnect algorithm.
#
#	You can view the QCAlgorithm base class on Github: 
#	https://github.com/QuantConnect/Lean/tree/master/Algorithm
#

import numpy as np
import pandas as pd

class RunOutOfMemory(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(2011, 01, 02)  #Set Start Date
        self.SetEndDate(2016, 12, 23)    #Set End Date
        self.SetCash(100000)             #Set Strategy Cash
        self.symbols = ["SPY"]
        for s in self.symbols:
        	self.AddEquity(s,Resolution.Minute)
        self.window=128
        self.SetWarmup(self.window)
        self.calc_len=self.window
        for i in range(16):
        	self.Schedule.On(self.DateRules.EveryDay("SPY"),self.TimeRules.AfterMarketOpen("SPY",140+i*15),Action(self.runAndTrade))
        	
    def runAndTrade(self):
        # wait for warmup
        if self.IsWarmingUp:
            return
        for s in self.symbols:
        	history = self.History(s,self.calc_len,Resolution.Minute)
        	data=[]
        	index=[]
        	for slice in history:
        		data.append([np.float(slice.Open),np.float(slice.High),np.float(slice.Low),np.float(slice.Close),np.float(slice.Volume)])
        		index.append(slice.Time.date())
        	df=pd.DataFrame(data,columns=['o','h','l','p','v'],index=pd.Series(index))
        	if len(df)==self.calc_len:
        		self.Debug("Acquired "+str(len(df))+" rows of history")
        		r=df['p'].diff().fillna(0).values
        		a=np.diff(r)
        		m1=(r[-15:].mean()-r.mean()/r.std())
        		m2=(a[-15:].mean())/a.std()
        		#self.Debug("Finished calculations")
        		signal=np.sign(m1)+np.sign(m2)
        		self.SetHoldings(s,signal/self.Securities.Count)