def adjusted_returns(self): index_prices = PriceTable.head(self.lookback).loc[:, [self.index]] index_returns = daily_returns(index_prices) adj_returns = (1 + self.daily_returns[self.stock]) / ( 1 + index_returns[self.index] * self.beta) - 1 adj_returns.name = self.adjusted_returns_df_column_name return adj_returns.to_frame()
def base_price(self): if self.base == self.stock: return self.price_table.tail(1)[self.stock].iloc[0] elif type(self.base) is str: return PriceTable.head(self.lookback).tail(1)[self.base].iloc[0] elif type(self.base) == float or type(self.base == int): return self.base else: raise ValueError
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', lookback: 'int', scrub_params: 'obj'): """The Beta object takes as parameters the stock, index, lookback, and scrubparams object""" self.stock = stock self.index = index self.lookback = lookback self.scrub_params = scrub_params self.price_table = PriceTable.head( self.lookback)[[self.stock, self.index]] self.daily_returns = daily_returns(self.price_table) self.num_data_points = self.daily_returns.shape[0]
def __init__( self, stock: 'str', index: 'str', lookback: 'int' = 252, scrub_params: 'obj' = None, # Optional Parameters as an alternative to entering scrub_params stock_ceiling_params=DEFAULT_STOCK_CEILING_PARAMS, index_floor_params=DEFAULT_INDEX_FLOOR_PARAMS, best_fit_param=BEST_FIT_PERCENTILE): """The Beta object takes as parameters the stock, index, lookback, and scrub_params object. The user can enter scrub_params OR a set of stock_ceiling_params, index_floor_params, and best_fit_param , which map to scrub_params.""" """Calculate the adjusted beta_value measurement for the stock and index over a lookback... based on the three core adjustments: - Stock Ceiling: Scrub data points where the stock moved more than the specified threshold. - Index Floor: Scrub data points where the index moved less than the specified threshold. - Best Fit Param: Keep only the n-percentile best fit points in the OLS regression """ self.stock = stock self.index = index self.lookback = lookback if scrub_params is None: self.scrub_params = get_scrub_params( stock, index, lookback=252, stock_ceiling_params=DEFAULT_STOCK_CEILING_PARAMS, index_floor_params=DEFAULT_INDEX_FLOOR_PARAMS, best_fit_param=BEST_FIT_PERCENTILE) else: self.scrub_params = scrub_params self.price_table = PriceTable.head( self.lookback)[[self.stock, self.index]] self.daily_returns = daily_returns(self.price_table) self.num_data_points = self.daily_returns.shape[0]