Example #1
0
 def adjusted_returns(self):
     index_prices = PriceTable.head(self.lookback)[self.index]
     index_returns = daily_returns(index_prices).to_frame()
     df = (1 + self.daily_returns[self.stock]) / (
         1 + index_returns[self.index] * self.beta) - 1
     df.name = 'Adj. Returns'
     return df
    def __init__(self, stock: 'str', lookback: 'int'):
        self.stock = stock
        self.lookback = lookback

        self.price_table = PriceTable.head(self.lookback)[[self.stock]]
        self.daily_returns = daily_returns(self.price_table).head(
            self.lookback)
Example #3
0
 def adjusted_returns(self):
     index_prices = PriceTable.head(self.lookback)[self.index]
     index_returns = daily_returns(index_prices).to_frame()
     adj_returns_df = (1 + self.daily_returns[self.stock]) / (
         1 + index_returns[self.index] * self.beta) - 1
     adj_returns_df.name = self.adjusted_returns_df_column_name
     adj_returns_df = adj_returns_df.to_frame()
     return adj_returns_df
 def __init__(self, stock: 'str', index: 'str', lookback: 'int', ScrubParams: 'obj'):
     self.stock = stock
     self.index = index
     self.lookback = lookback
     self.ScrubParams = ScrubParams
     
     self.price_table = PriceTable.head(self.lookback)[[self.stock, self.index]]
     self.daily_returns = daily_returns(self.price_table)
Example #5
0
 def __init__(self, stock: 'str', index: 'str', lookback: 'int', ScrubParams: 'obj'):
     self.stock = stock
     self.index = index
     self.lookback = lookback
     self.ScrubParams = ScrubParams
     
     #self.price_table = pickle.load(open('sp500_price_table.pkl', 'rb')).head(self.lookback)[[self.stock, self.index]]
     self.price_table = My_Data.PriceTable.head(self.lookback)[[self.stock, self.index]]
     #self.daily_returns = self.price_table / self.price_table.shift(-1) - 1
     self.daily_returns = daily_returns(self.price_table)
    def __init__(self, stock: 'str', lookback: 'int', base = None):
        self.stock = stock
        self.lookback = lookback
        if base is None:
            self.base = self.stock
        else:
            self.base = base

        self.price_table = PriceTable.head(self.lookback)[[self.stock]]
        self.daily_returns = daily_returns(self.price_table).head(self.lookback)
    def __init__(self, stock: 'str', index: 'str', beta: 'float',
                 to_graph: 'str', base: 'str', lookback: 'int'):
        self.stock = stock
        self.index = index
        self.beta = beta
        self.to_graph = to_graph
        self.base = base
        self.lookback = lookback

        self.price_table = PriceTable.head(
            self.lookback)[[self.stock, self.index]]
        self.daily_returns = daily_returns(self.price_table).head(
            self.lookback)

        self.daily_returns['adj_returns'] = (1 + self.daily_returns[
            self.stock]) / (1 + self.daily_returns[self.index] * self.beta) - 1
        print(self.daily_returns.head(5))
Example #8
0
def alpha_df(df: 'df of prices', lookback):
    prices_df = df.head(lookback)
    #returns_df = daily_returns(prices_df).dropna(axis=0, how='any')
    returns_df = daily_returns(prices_df)
    #print(prices_df.isnull().values.ravel().sum())

    stocks = df.columns.values.tolist()
    #for stock in stocks:
    #    result = prices_df[prices_df[stock].isnull()].index.tolist()
    #    print(stock, ": ", result, sep='')

    total_returns = []
    HVs = []
    alpha_ratios = []
    adj_alpha_ratios = []
    sample_sizes = []

    for stock in stocks:
        prices_df_stock = prices_df[stock].dropna(axis=0, how='any').to_frame()
        #print(prices_df_stock.head(2))
        daily_returns_df_stock = daily_returns(prices_df_stock).dropna(
            axis=0, how='any')

        # Calculate Adjusted Returns
        index = 'SPY'
        beta = Beta(stock, index, lookback, ScrubParams(.075, .0125,
                                                        .8)).beta_value
        beta = 0
        adj_stock_line = StockLineBetaAdjusted(stock, lookback, beta, index)

        prices_df_stock = adj_stock_line.prices_df
        daily_returns_df_stock = adj_stock_line.adjusted_returns

        #total_return = prices_df_stock.head(1).iloc[0] / prices_df_stock.tail(1).iloc[0] - 1
        #print('HEREEE', total_move)
        #total_return = prices_df_stock.head(1).iloc[0, 0] / prices_df_stock.tail(1).iloc[0, 0] - 1
        #total_returns.append(total_return)

        total_return = get_total_return(prices_df_stock)
        total_returns.append(total_return)

        #HV = daily_returns_df_stock.dropna(axis=0, how='any').std(ddof=0)*math.sqrt(252)
        #HVs.append(HV)
        HV = calc_HV(daily_returns_df_stock)
        HVs.append(HV)

        sample_size = daily_returns_df_stock.shape[0]
        sample_sizes.append(sample_size)

        alpha_ratio = total_return / HV
        alpha_ratios.append(alpha_ratio)

        adj_alpha_ratio = total_return * math.sqrt(252 / lookback) / HV
        adj_alpha_ratios.append(adj_alpha_ratio)

    alpha_df_info = {
        'Stock': stocks,
        'Total_Return': total_returns,
        'HV': HVs,
        'Alpha_Ratio': alpha_ratios,
        'Adj_Alpha_Ratio': adj_alpha_ratios,
        'Sample_Size': sample_sizes
    }

    alpha_df = pd.DataFrame(alpha_df_info)
    alpha_df = pd.DataFrame(
        list(
            zip(stocks, total_returns, HVs, alpha_ratios, adj_alpha_ratios,
                sample_sizes))).round(3)
    alpha_df.rename(index=str,
                    columns={
                        0: 'Stock',
                        1: 'Total_Return',
                        2: 'HV',
                        3: 'Alpha_Ratio',
                        4: 'Adj_Alpha_Ratio',
                        5: 'Sample_Size'
                    },
                    inplace=True)
    alpha_df.set_index('Stock', inplace=True)
    return alpha_df
Example #9
0
def alpha_df(df: 'df of prices', lookback):
    prices_df = df.head(lookback)
    #returns_df = daily_returns(prices_df).dropna(axis=0, how='any')
    returns_df = daily_returns(prices_df)
    #print(prices_df.isnull().values.ravel().sum())

    stocks = df.columns.values.tolist()
    total_returns = []
    HVs = []
    alpha_ratios = []
    adj_alpha_ratios = []
    sample_sizes = []
    betas = []
    times = []
    #correlations = []

    #for stock in stocks:
    #    result = prices_df[prices_df[stock].isnull()].index.tolist()
    #    print(stock, ": ", result, sep='')

    for stock in stocks:
        prices_df_stock = prices_df[stock].dropna(axis=0, how='any').to_frame()
        daily_returns_df_stock = daily_returns(prices_df_stock).dropna(
            axis=0, how='any')

        # Calculate Adjusted Returns
        index = 'IBB'
        if stock == 'SPY':
            index = 'IWM'
        beta_object = Beta(stock, index, 500, ScrubParams(.075, .0125, .8))
        beta = beta_object.beta_value
        #beta_value = 0
        if stock == 'SPY':
            beta = 0
        adj_stock_line = StockLineBetaAdjusted(stock, lookback, beta, index)

        prices_df_stock = adj_stock_line.prices_df
        daily_returns_df_stock = adj_stock_line.adjusted_returns

        num_observations = len(daily_returns_df_stock.values.tolist())

        #total_return = prices_df_stock.head(1).iloc[0] / prices_df_stock.tail(1).iloc[0] - 1
        #print('HEREEE', total_move)
        #total_return = get_total_return(prices_df_stock)
        total_return = adj_stock_line.total_return
        total_returns.append(total_return)

        HV = calc_HV(daily_returns_df_stock)
        HVs.append(HV)

        sample_size = get_sample_size(daily_returns_df_stock)
        sample_sizes.append(sample_size)

        alpha_ratio = total_return / HV
        alpha_ratios.append(alpha_ratio)

        # Should the Time Adjustment be sqrt(time)?
        adj_alpha_ratio = alpha_ratio * math.sqrt(252 / num_observations)
        adj_alpha_ratio = alpha_ratio * (252 / num_observations)
        std_dev_over_time_period = HV * math.sqrt(num_observations / 252)
        adj_alpha_ratio = total_return / std_dev_over_time_period
        adj_alpha_ratios.append(adj_alpha_ratio)

        betas.append(beta)

        #correlation = beta_object.corr
        #correlations.append(correlation)

        time = num_observations / 252
        times.append(time)

    alpha_df_info = {
        'Stock': stocks,
        'Total_Return': total_returns,
        'HV': HVs,
        'Alpha_Ratio': alpha_ratios,
        'Adj_Alpha_Ratio': adj_alpha_ratios,
        'Sample_Size': sample_sizes,
        'Beta': betas,
        #'Correlation': correlations,
        'Time': times
    }

    alpha_df = pd.DataFrame(alpha_df_info).set_index('Stock').loc[:, [
        'Total_Return', 'HV', 'Alpha_Ratio', 'Adj_Alpha_Ratio', 'Sample_Size',
        'Beta', 'Time'
    ]].round(3)
    return alpha_df
def get_daily_returns(stock, lookback):
    price_table = get_stock_prices(stock, lookback)
    return daily_returns(price_table)