投資組合優化

求解具有非凸矩陣乘法的兩個方程組以進行 MV 優化

  • September 27, 2017

**場景:**我正在嘗試對投資組合進行 MV 優化的變體。在這種情況下,我已經有一個平均回報向量( $ \mu $ ),一個向量,一個共變異數矩陣 ( $ \Sigma $ ), 和 $ \phi^{-1} $ 這是標準正態累積分佈函式(機率 alpha 的函式)的倒數。

**問題:**根據以下兩個方程,我將輸入: $ \mu $ , $ \Sigma $ , 1 (1的向量), $ H $ , 和 $ \alpha $ , 並嘗試為 $ \gamma $ (另外,’ 表示向量的轉置)。

方程式:

$$ H = w(\gamma)’\mu + \Phi^{−1}(α)[w(\gamma)’ \Sigma w(γ)]^{1/2} $$ $$ w(\gamma) = \frac{1}{\gamma}\Sigma^{-1}\Big[\mu − \Big(\frac{\mathbf{1}’ \Sigma^{-1} \mu-\gamma}{\mathbf{1}’ \Sigma^{-1} \mathbf{1}}\Big) \mathbf{1}\Big] $$ **我已經嘗試過的:**我正在嘗試使用 python 求解器來解決這個系統。但我無法做到這一點,因為矩陣乘法顯然變得非凸的。

**問題:**如何解決這個問題?

**Obs:**這個問題來自 Sanjiv Das、Harry Markowitz、Jonathan Scheid 和 Meir Statman 的文章 Portfolio Optimization 和心理賬戶,方程 (7) 和 (8)。該文章位於:http ://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.410.8747&rep=rep1&type=pdf

我將使用我隨機生成兩者的情況 $ \Sigma $ 和 $ \mu $ 4維隨機

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.optimize import bisect

n = 4
np.random.seed(0)

S = np.random.uniform(0, 1, [n, n])
S = 0.5 * (S + S.transpose())
mu = np.random.uniform(-1, 1, n)

轉置的技巧只是為了確保它S是對稱的。我會選 $ \alpha = 0.90 $ , 並定義函式 $ H $ 作為

Sinv = np.linalg.inv(S)
ones = np.ones_like(mu)

def H(gamma):

   # w
   w = (ones.dot(Sinv).dot(mu) - gamma) / (ones.dot(Sinv).dot(ones))
   w = Sinv.dot(mu - w) / gamma

   # H
   H = w.dot(mu) + norm.ppf(alpha) * np.sqrt(w.dot(S).dot(w))

   return H

這是一個情節 $ H = H(\gamma) $ .

g = np.linspace(4, 50, num = 500)
h = np.array(map(H, g))
i = h > 0
plt.plot(g[i], h[i])
plt.show()

在此處輸入圖像描述

對於較大的值,該函式確實有點問題 $ \gamma $ 從某種意義上說,任何使用導數的優化算法(幾乎全部)都會失敗。但是你仍然可以使用二分法來找到根

作為一個例子,我將使用 $ H = 1.04 $ (在平坦地區)

f = lambda x: H(np.exp(x)) - 1.04
r = bisect(f, 1.5, 6, xtol = 1e-12)
g0 = np.exp(r)
print g0, H(g0)

生成輸出

231.206991393 1.04

所以根是 $ \gamma = 231.20699 $

引用自:https://quant.stackexchange.com/questions/36066