Tengo un portafolio de $N$ activos en $t=10$ días.
import numpy as np
import pandas as pd
n= 10
A = pd.DataFrame([np.random.randn(5) for i in range(n)],columns=['a', 'b', 'c', 'd', 'e'])
A
T = A.shape[0]
k = A.shape[1]
print(T,k)
La matriz de covarianza
= A.cov().to_numpy()
Sigma =
print(Sigma)
Quiero minimizar la varianza con optimización convexa en Python.
De hecho, quiero resolver
$$\min \quad (1/2) w^T \Sigma w$$ s.t $$w_{i}\geq 0,\sum_{i=1}^{n}w_{I} =1$$
Entonces hago:
import cvxpy as cp
w = cp.Variable(n)
# Definiendo objetivo de riesgo
riesgo = cp.quad_form(w,Sigma)
objetivo = cp.Minimize((1/2)*riesgo)
# Restricciones de presupuesto y pesos
restricciones = [cp.sum(w) == 1,
w >= 0]
# Solucionador
prob = cp.Problem(objetivo, restricciones)
prob.solve()
pero recibo un error:
Excepción: Dimensiones inválidas para los argumentos.
¿Cuál es mi error aquí? ¿Alguien?
0 votos
Ten cuidado en términos de 1. cuántos activos quieres negociar y 2. cuántas observaciones de rendimiento tienes para dichos activos para estimar la matriz de covarianza.