Yo sugeriría la biblioteca qq-pat ( https://github.com/QuriQuant/qq-pat ) con esta librería se puede hacer actualmente la optimización de la cartera de varianza mínima usando un código simple. Este es un ejemplo sencillo con tres activos:
import pandas as pd
from pandas_datareader import data
import datetime
import qqpat
aapl = data.get_data_yahoo('AAPL',
start=datetime.datetime(2003, 10, 1),
end=datetime.datetime(2015, 1, 1))
spy = data.get_data_yahoo('TLT',
start=datetime.datetime(2003, 10, 1),
end=datetime.datetime(2015, 1, 1))
ibm = data.get_data_yahoo('IBM',
start=datetime.datetime(2003, 10, 1),
end=datetime.datetime(2015, 1, 1))
data = pd.concat([aapl['Adj Close'], spy['Adj Close'], ibm['Adj Close']], axis=1)
analyzer = qqpat.Analizer(data, column_type='price', titles=["APPL", "TLT", "IBM"])
analyzer.min_variance_portfolio_optimization(plotWeights=True)
Además, puede utilizar el parámetro covarianceType para seleccionar el tipo de matriz de covarianza que desea utilizar. Por ejemplo, puede utilizar el siguiente código para una contracción de tipo Ledoit-Wolf:
analyzer.min_variance_portfolio_optimization(covarianceType =qqpat.LEDOIT_WOLF, plotWeights=True):
Pronto añadiré la optimización de la media-varianza que funcionará de la misma manera. La biblioteca utiliza la biblioteca CVXPY para la optimización utilizando el solucionador SCS que proporciona la ejecución más rápida.
0 votos
Hay
rpy
yrpy2
para que puedas aprovechar las soluciones de R también en Python...0 votos
He utilizado rpy y rpy2, me gusta mucho. Hay mucha gente que utiliza y está contenta con este flujo en su trabajo: python -> r -> ejecución del modelo -> python.
1 votos
Supongo que usar R y el servidor rstudio es bastante difícil de superar.
3 votos
¿por qué se necesita una biblioteca para esto? Simplemente calcúlalo, yo lo hice una vez y sólo fueron unas pocas líneas de python. Sólo un bucle sobre todas las posibilidades con 0,1% de densidad y no tomó mucho tiempo para calcular. Cuando tienes muchos activos, usa distribuciones listas (en lugar de muchos bucles for internos) para matar el $x^{n}$ -Cálculo de la complejidad temporal -Problema. Es fácil. Hazme saber cómo lo has conseguido. Creo que estás haciendo este problema de una manera demasiado difícil, empezar fácilmente.
0 votos
Nada en Python coincide con Rmetrics, etc. Dicho esto, podría haber un montón de razones para hacer esto en Python, y algunos de los otros comentarios/respuestas ya abordan esto. La respuesta a "biblioteca de python para la optimización de carteras" no es R.
0 votos
@hhh ¿Podría explicar con más detalle cómo utilizar las distribuciones listas para reducir la complejidad del tiempo? Muchas gracias.
0 votos
@Roy lee esto aquí y esto aquí -- casos sencillos, entonces usa alguna distribución lista para matar esta parte
"mySet= [x/density for x in range(int(density))] points="" for (x,y,z) in [(x,y,z) for x,y,z in itertools.product(mySet, repeat=3) if abs(x+y+z-1)<delta]:"
(delta arregla el error de punto flotante), la distribución normal -aproximación para las combinaciones dio resultados bastante buenos, ¿ya está claro?