6 votos

Beta Limitada De Markowitz Mínima Varianza De La Cartera De La Forma Cerrada De La Solución

Esta pregunta está relacionada con los recientes cambios en las reglas en el Quantopian Abierto.

Estoy tratando de encontrar una solución de forma cerrada para una beta limitada de mínima varianza de la cartera problema, pero no parece particularmente manejable. Ha alguien ha probado esta? Hasta ahora, he configurado el problema

$$\begin{align} \min_w \quad& w^\prime \Sigma w \\ s.t. \quad& w^\prime\vec 1 = 1 \\ \text{y} \quad & w^\prime \beta = c \end{align}$$

donde

  • $w$ es el vector de la cartera de pesos, de nuestro control
  • $\Sigma$ es el total de la matriz de covarianza
  • $\beta$ es el vector de CAPM-tipo de mercado de las betas
  • $c$ es una constante que la cartera beta debe ser igual a

El cambio de las restricciones a los multiplicadores de Lagrange, el objetivo se convierte en

$$\min_w \quad w^\prime\Sigma w - \lambda_1(w^\prime\vec 1 - 1) - \lambda_2(w^\prime\beta - c)$$

las condiciones de primer orden son

$$\begin{align} 0 &= 2w^\prime\Sigma \lambda_1\vec 1 - \lambda_2 \beta\\ 1 &= w^\prime\vec 1\\ c &= w^\prime\beta \end{align}$$

No puedo parecer para obtener las ecuaciones para el trabajo muy bien, tal vez no de la forma cerrada de la solución existe, pero quería comprobar aquí y a ver si alguien podría conseguir algo razonable antes de ir a la optimización numérica.

2voto

otto.poellath Puntos 1594

Suponiendo que $\Sigma$ es invertible, entonces \begin{align} 2\omega' = \lambda_1\overrightarrow{1}'\Sigma^{-1}+\lambda_2\beta\Sigma^{-1}. \end{align} Podemos entonces resolver $\lambda_1$ y $\lambda_2$ desde el sistema de ecuaciones \begin{align*} 2 & = \lambda_1\overrightarrow{1}'\Sigma^{-1}\overrightarrow{1}+\lambda_2\beta'\Sigma^{-1}\overrightarrow{1}\\ 2c &= \lambda_1\overrightarrow{1}'\Sigma^{-1}\beta+\lambda_2\beta\Sigma^{-1}\beta. \end{align*} En consecuencia, $\omega$ puede ser obtenido a partir de la ecuación anterior.

1voto

Este es un problema interesante. No creo que el problema está correctamente configurado todavía. Reescribí ligeramente para que corresponden a cómo se escribe generalmente como una ecuación cuadrática programa.

El problema de optimización de anotar las correcciones de las betas a ser un valor determinado. Que podría tener sentido, pero en lugar de eso me preguntaba si podríamos simplemente minimizar la beta a través de la cartera, mientras que la minimización de las correlaciones. En ese caso, el problema de optimización se convierte en:

\begin{align} \min_w \quad& w^\prime \Sigma w + w^\prime\lvert\beta\rvert\\ s.t. \quad& w^\prime\vec 1 = 1 \\ \text{y} \quad & w > 0 \end{align}

Yo no creo que una forma cerrada, existe una solución a este problema. Pero es muy fácil (y rápido) para resolver este cuadráticos con un optimizador tal y como prevé cvxopt. Aquí está el código de ejemplo:



import numpy as np
import matplotlib.pyplot as plt
import cvxopt as opt
from cvxopt import blas, solvers
import pandas as pd

np.random.seed(123)

# Turn off progress printing 
solvers.options['show_progress'] = False

## NUMBER OF ASSETS
n_assets = 4

## NUMBER OF OBSERVATIONS
n_obs = 1000

# Generate returns
return_vec = np.random.randn(n_assets, n_obs)

betas = np.array([.1, .8, .2, .05])

def markowitz_beta(returns, betas):
    n = len(returns)
    returns = np.asmatrix(returns)

    # Convert to cvxopt matrices
    # minimize: w * mu*S * w + betas * x 
    S = opt.matrix(np.cov(returns))

    # Minimize betas, can add mean returns here if desired
    pbar = opt.matrix(np.abs(betas))

    # Create constraint matrices
    # Gx < h: Every item is positive
    G = opt.matrix(-np.eye(n))   # negative n x n identity matrix
    h = opt.matrix(np.zeros(n))
    # Ax = b sum of all items = 1
    A = opt.matrix(1.0, (1, n))
    b = opt.matrix(1.0)

    # CALCULATE THE OPTIMAL PORTFOLIO
    wt = solvers.qp(S, pbar, G, h, A, b)['x']
    return np.asarray(wt).ravel()

weights = markowitz_beta(return_vec, betas)
print weights
print betas.ravel()
print np.dot(weights, betas)


Output:

[  3.50677883e-01   3.34638307e-07   2.50326847e-01   3.98994936e-01]
[ 0.1   0.8   0.2   0.05]
0.105083172131

Como se puede ver, la más alta de las betas reciben muy bajos pesos.

También escribimos un post en el blog sobre esto (y el código es una versión de allí), que puede encontrar aquí: https://www.quantopian.com/posts/the-efficient-frontier-markowitz-portfolio-optimization-using-cvxopt-repost-cloning-of-nb-now-enabled

Descargo de responsabilidad: yo trabajo en Quantopian.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X