Overall Statistics
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.

            data: Slice object keyed by symbol containing the stock data
    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)))