Python是一種功能強大的編程語言,可以處理各種任務(wù)。其中之一就是繪制有效邊界。有效邊界指的是在給定的資源約束下,可以實現(xiàn)最大化收益或最小化風(fēng)險的點集,被稱為投資組合。本文將介紹如何使用Python繪制有效邊界。
# 導(dǎo)入所需的庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 讀取數(shù)據(jù) data = pd.read_csv('data.csv') # 計算股票收益率的均值和協(xié)方差 returns = data.pct_change().mean() covariance = data.pct_change().cov() # 定義一個函數(shù),用于計算投資組合收益率和風(fēng)險 def portfolio_return(weights, returns): return np.sum(weights * returns) def portfolio_risk(weights, covariance): return np.sqrt(np.dot(weights.T, np.dot(covariance, weights))) # 生成隨機權(quán)重,并計算對應(yīng)的收益率和風(fēng)險 def random_weights(n): weights = np.random.rand(n) weights /= np.sum(weights) return weights def get_portfolio(weights, returns, covariance): portfolio_return = portfolio_return(weights, returns) portfolio_risk = portfolio_risk(weights, covariance) return [portfolio_return, portfolio_risk] # 繪制有效邊界圖形 def get_efficient_frontier(returns, covariance, points): portfolios = [] for i in range(points): weights = random_weights(len(returns)) portfolios.append(get_portfolio(weights, returns, covariance)) portfolios = np.array(portfolios) plt.scatter(portfolios[:,1], portfolios[:,0], marker='o', s=10, alpha=0.3) plt.xlabel('Risk') plt.ylabel('Return') plt.show() get_efficient_frontier(returns, covariance, 5000)
在以上代碼中,我們使用了numpy、pandas和matplotlib等庫。其中,data.csv包含了我們所需的數(shù)據(jù)。通過pandas庫中的pct_change()方法計算股票的收益率均值和協(xié)方差。然后,我們定義了計算投資組合收益率和風(fēng)險的兩個函數(shù)。隨機生成權(quán)重,并通過get_portfolio()函數(shù)計算相應(yīng)的投資組合收益率和風(fēng)險。最后,我們繪制了有效邊界圖形,并使用5000個點進行模擬,展示了不同收益率和風(fēng)險的投資組合。