import numpy as np
from scipy import stats
### <summary>
### Basic template algorithm simply initializes the date range and cash. This is a skeleton
### framework you can use for designing an algorithm.
### </summary>
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(2018,1, 7) #Set Start Date
self.SetEndDate(2018,4,1) #Set End Date
self.SetCash(100000) #Set Strategy Cash
# Find more symbols here: http://quantconnect.com/data
self.AddEquity("ACER", Resolution.Daily)
self.AddEquity("SPY", Resolution.Daily)
self.Debug("numpy test >>> print numpy.pi: " + str(np.pi))
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
self.Log(str(self.get_beta('ACER',90)))
def get_beta(self, security, period):
#Make sure to create dataframe and then get returns to compute slope
if not self.Securities.ContainsKey(security):return 'no data'
security_data = self.History([security], period, Resolution.Daily)
spy_data = self.History(['SPY'],period,Resolution.Daily)
if 'close' not in security_data:return 'no close'
y = security_data['close'].pct_change().dropna().values
x = spy_data['close'].pct_change().dropna().values
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
return r_value * ((np.std(y))/(np.std(x)))