def optimise_using_correlation(mean_list: list, avg_correlation: float, std: float): corr_matrix = boring_corr_matrix_values(len(mean_list), offdiag=avg_correlation) stdev_list = np.full(len(mean_list), std) sigma = sigma_from_corr_and_std(stdev_list, corr_matrix) weights = optimise_from_sigma_and_mean_list(sigma, mean_list) return weights
def covariance_from_stdev_and_correlation( correlation_estimate: correlationEstimate, stdev_estimate: stdevEstimates) -> covarianceEstimate: list_of_assets = list(correlation_estimate.columns) aligned_stdev_list = stdev_estimate.list_in_key_order(list_of_assets) sigma = sigma_from_corr_and_std(aligned_stdev_list, correlation_estimate.values) return covarianceEstimate(sigma, list_of_assets)
def get_annualised_risk_given_inputs(std_dev, cmatrix, weights): weights = np.array(weights) std_dev = np.array(std_dev) std_dev, cmatrix, weights = clean_values(std_dev, cmatrix, weights) sigma = sigma_from_corr_and_std(std_dev, cmatrix) portfolio_variance = weights.dot(sigma).dot(weights.transpose()) portfolio_std = portfolio_variance**.5 return portfolio_std
def get_annualised_risk( std_dev: stdevEstimates, cmatrix: correlationEstimate, weights: portfolioWeights ) -> float: weights_as_np = weights.as_np() std_dev_as_np = std_dev.as_np() cmatrix_as_np = cmatrix.as_np() std_dev_as_np, cmatrix_as_np, weights_as_np = clean_values( std_dev_as_np, cmatrix_as_np, weights_as_np ) sigma = sigma_from_corr_and_std(std_dev_as_np, cmatrix_as_np) portfolio_variance = weights_as_np.dot(sigma).dot(weights_as_np.transpose()) portfolio_std = portfolio_variance ** 0.5 return portfolio_std
def combine_list_of_correlations_and_stdev( rolling_correlations, rolling_stdev): corr_index_dates = rolling_correlations.fit_dates std_index_dates = list(rolling_stdev.index) sigma_list = [] for corr_index, index_date in enumerate(corr_index_dates): std_dev = rolling_stdev.loc[index_date].values std_dev[np.isnan(std_dev)] = 0.0 cmatrix = rolling_correlations.corr_list[corr_index] cmatrix = pd.DataFrame(cmatrix) cmatrix[cmatrix.isna()] = 1.0 cmatrix = np.array(cmatrix) sigma = sigma_from_corr_and_std(std_dev, cmatrix) sigma_list.append(sigma) covariance_estimates = CorrelationList( sigma_list, rolling_stdev.columns, corr_index_dates ) return covariance_estimates
def covariance_from_stdev_and_correlation( correlation_estimate: correlationEstimate, stdev_estimate: stdevEstimates ) -> covarianceEstimate: all_assets = set(list(correlation_estimate.columns) + stdev_estimate.list_of_keys()) list_of_assets_with_data = list( set(correlation_estimate.assets_with_data()).intersection( set(stdev_estimate.assets_with_data()) ) ) assets_without_data = list(all_assets.difference(list_of_assets_with_data)) aligned_stdev_list = stdev_estimate.list_in_key_order(list_of_assets_with_data) aligned_corr_list = correlation_estimate.subset(list_of_assets_with_data) sigma = sigma_from_corr_and_std(aligned_stdev_list, aligned_corr_list.values) cov_assets_with_data = covarianceEstimate(sigma, columns=list_of_assets_with_data) cov = cov_assets_with_data.add_assets_with_nan_values(assets_without_data) return cov