我正在构建一个投资组合,为此,我试图找出投资组合的最佳权重。这是我正在尝试的代码
import pandas as pd
import numpy as np
df=pd.DataFrame({'A':pd.Series([97.31,98.03,99.84,98.47,98.87],index=['A','B','C','D','E'])})
df['B']=pd.Series([184.42,187.85,189.77,188.23,191.42],index=['A','B','C','D','E'])
df['C']=pd.Series([181.37,181.5,176.55,182.5,191],index=['A','B','C','D','E'])
print(df)
Log_return=(df.pct_change()).dropna()
cov=Log_return.cov()
Minv=np.linalg.pinv(cov)
Matrix_inverse=pd.DataFrame(Minv)
sum_of_rows=Matrix_inverse.sum(axis = 1, skipna = True)
sum_of_columns=sum_of_rows.sum(axis = 0, skipna = True)
shares=((sum_of_rows/sum_of_columns))
portfolio_weights=pd.DataFrame(shares)
portfolio_weights
可以通过简单地将逆矩阵的行之和除以逆矩阵的总和来找出投资组合权重,但是最终矩阵也包含负值,这意味着存在卖空。为了避免这种情况,我必须使Portfolio_weights最小化,以使该矩阵的值必须大于0且这些值的总和等于1。
我必须在这里申请条件,以便有人帮助我。