Mar-09-2020, 04:07 PM
Given expected returns "u" (11x1 vector)
, covariance matrix "Cov" (11x11 matrix), and risk coefficient alpha (constant)
I tried to find out the maximum of the quadratic utility function and the optimal portfolio weight (w) with basinhopping algorithm.( i.e. w·u - (w·Cov·w)/2 , w is the weight vector )
However, I found that the solutions generated were quite different.
For example, sometimes w could be [1,0...,0], sometime could be [0.4,0.4,...,0.2]
I have no idea what's going on.
Could anyone explain?
Here is my code:
, covariance matrix "Cov" (11x11 matrix), and risk coefficient alpha (constant)
I tried to find out the maximum of the quadratic utility function and the optimal portfolio weight (w) with basinhopping algorithm.( i.e. w·u - (w·Cov·w)/2 , w is the weight vector )
However, I found that the solutions generated were quite different.
For example, sometimes w could be [1,0...,0], sometime could be [0.4,0.4,...,0.2]
I have no idea what's going on.
Could anyone explain?
Here is my code:
alpha=3.35 number_of_asset=11 length_of_one_period=21 def target_portfolio(train_data): target_return=train_data.mean().values*length_of_one_period target_cov=train_data.cov().values*length_of_one_period def Utility(weight): return -np.dot(weight,pre_target_return)+0.5*alpha*np.dot(weight.T,np.dot(pre_target_cov,weight)) def constraint1(weight): return 1-sum(weight) weight0=np.full(number_of_asset,1/number_of_asset) b=(0,1) bnds=(b,)*number_of_asset con1={"type":"eq","fun":constraint1} cons=[con1] minimizer_kwargs = {"method": "SLSQP","constraints":cons,"bounds":bnds} sol = basinhopping( Utility, weight0, minimizer_kwargs=minimizer_kwargs,niter=300) return sol.x