28 votos

¿Cuál es la biblioteca python de referencia para la optimización de carteras?

¿Alguien conoce una biblioteca/fuente en python que sea capaz de calcular la cartera tradicional de media-varianza? Para tentar mi suerte, cualquier recurso en el que la biblioteca/fuente también contenga funciones como funciones de covarianza alternativas (etc. contracción), optimización de la cartera de momento parcial inferior, etc...

He desarrollado, como todo el mundo, y aplicado una o dos variantes. ¿Soy yo o no hay mucho por ahí en términos de python para aplicaciones financieras/de cartera. Al menos no hay nada por ahí que iguale esfuerzos como Rmetrics para R.

0 votos

Hay rpy y rpy2 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.

2voto

Ophir Yoktan Puntos 161

Descargo de responsabilidad: soy el autor y sólo lo he subido a sourceforce

PortOpt es una envoltura de código abierto para Quadprog++ (un solucionador cuadrático en C++) para la resolución de problemas de optimización de carteras que soporta las curvas de indiferencia lineal de los agentes hacia el riesgo.

Cuenta con un enlace en python que permite optimizar los problemas de cartera de forma tan sencilla como:

import portopt
results = portopt.solveport(covar_matrix,means_vector,risk_adv_coef)

Sin embargo, en este momento no contiene nada más que la resolución de la optimización de la cartera (y en particular, no tiene funciones para las funciones de covarianza alternativas ni la optimización de la cartera de momentos parciales inferiores).

1voto

Silvercode Puntos 438

Acabo de impulsar las implementaciones en Python de algunos optimizadores de cartera comunes a mi GitHub . Utiliza el CVXOPT para resolver los programas cuadráticos resultantes. Admite la construcción de carteras de Markowitz, carteras de varianza mínima y carteras de tangencia (tanto a largo plazo como a corto plazo).

1voto

JohnB Puntos 214

He utilizado un ejemplo del periódico: Una introducción a la estimación de la contracción de la Matriz de Covarianza: Una ilustración pedagógica

Pude obtener la misma matriz de contracción. He proporcionado la misma matriz que utilizan en su documento.

Espero que esto ayude

import numpy as np
import pandas
from math import pow

def get_shrunk_covariance_matrix(obs, c, zeros):
    w_len=c.shape[0]
    T=obs.shape[0]
    print T, w_len
    w=((T-1.0)/T)*c

    sq_cov=c*c
    sq_cov=sq_cov.as_matrix()
    np.fill_diagonal(sq_cov, 0)
    sq_cov=pandas.DataFrame(sq_cov).dropna()
    frames =[]
    for z in range(w_len):
        LST=[]
        for cc in range(T):
            lst=[]
            for ccc in range(w_len):
                val = pow(obs.loc[cc][z]*obs.loc[cc][ccc]-w.loc[z][ccc],2)
                lst.append(val)
            LST.append(lst)

        df=pandas.DataFrame(LST)
        df[z]=0
        frames.append(df)
    result = pandas.concat(frames)

    Sum_of_All_Estimated_Var=result.values.tolist()
    sum1=0
    for s in Sum_of_All_Estimated_Var: sum1+=sum(s)
    a1=(T/pow((T-1),3))*sum1

    Sum_of_All_S_ij_Squared=sq_cov.values.tolist()
    a2=0
    for s in Sum_of_All_S_ij_Squared: a2+=sum(s)

    Optimal_Shrinkage_Intensity = a1/(a1+a2)
    print Optimal_Shrinkage_Intensity

    Shrinkage=(1-Optimal_Shrinkage_Intensity)*c +  Optimal_Shrinkage_Intensity*zeros
    print Shrinkage

if __name__=="__main__":
    n=np.matrix([[10,12,9,-2,17,8,12],  [-9,-11,2,-5,-7,2,-2],  [16,5,8,5,18,8,9], [6,-3,6,-13,1,4,2], [1,4,-9,5,8,-16,-1], [12,-1,2,22,11,6,10]])
    mean = n.mean(axis=0)
    n=n-mean
    frame = pandas.DataFrame(n).dropna()
    c=pandas.DataFrame(np.cov(frame,  rowvar=0), index=frame.columns, columns=frame.columns)
    C=np.cov(frame,  rowvar=0)
    D=C.diagonal()
    zeros = np.zeros((C.shape[0], C.shape[0]), float)
    np.fill_diagonal(zeros, D)
    get_shrunk_covariance_matrix(frame, c, zeros)

1voto

nath_vringd Puntos 1

Pruebe Riskfolio-Lib http://riskfolio-lib.readthedocs.io/ Es una librería python de código abierto que permite construir carteras óptimas utilizando 10 medidas de riesgo, modelo black litterman, construir restricciones, carteras de factores, estimadores robustos de covarianza, ponderaciones cortas, seguimiento de índices/replicación de carteras entre otras características.

2 votos

Por favor, revele su afiliación.

0 votos

Bob Jansen Actualizo mi afiliación. Hice Riskfolio-Lib, pruébalo si tienes tiempo, tiene varios ejemplos .

1 votos

Has llenado de spam siete preguntas con esta basura en las últimas dos horas. Por favor, borra esos mensajes y replantea lo que quieres conseguir de este sitio. No somos una plataforma publicitaria para tus proyectos personales. También parece que tienes un cuenta duplicada .

0voto

Pandincus Puntos 5785

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