Aquí está la premisa: Tengo una cartera de tres activos, conozco la covarianza de los activos, la aversión al riesgo del cliente y el rendimiento esperado de uno de los activos. También tengo un conjunto de pesos deseado.
Entonces, 1) ¿cómo encuentro los rendimientos esperados para los dos activos que no conozco que me dan mi conjunto de pesos deseado y 2) si invierto la función ¿puedo recuperar los pesos deseados es decir, probar los resultados?
Aquí está mi código en Python:
import numpy as np
# Definir la función
def get_weight(expected_return, asset_covariance, risk_aversion):
ER = expected_return
S = asset_covariance
L = risk_aversion
return np.linalg.inv(L * S) @ ER
# Datos dados
risk_aversion = 1.0 # valor de ejemplo para L
cov_matrix = np.array([[0.01, 0.002, 0.001], [0.002, 0.03, 0.004], [0.001, 0.004, 0.02]])
# matriz de covarianza de ejemplo
# Pesos deseados
desired_weights = np.array([0, 0.55, 0.45])
# Resolver para los rendimientos esperados
expected_returns = risk_aversion * cov_matrix @ desired_weights
expected_returns[0] = 0.009 # rendimiento dado
# Calcular los pesos usando la función original
calculated_weights = get_weight(expected_returns, cov_matrix, risk_aversion)
# Mostrar los resultados
expected_returns, calculated_weights
Este es el resultado que obtengo. Claramente ves que no es circular. Espero que la matriz de pesos sea 0.00,0.55,0.45. Puedo entender que haya algún redondeo pero el resultado está bastante alejado.
¿Dónde me equivoqué? Por favor haga referencia a Python en sus comentarios si puede.