1 votos

¿Cómo calcular el "rendimiento acumulativo de la cartera" a partir de los datos de precios individuales y su peso?

Estoy tratando de ejecutar una prueba retrospectiva de forma vectorizada usando Python Pandas y necesito calcular un rendimiento acumulativo de cartera a partir de los datos de precios y los datos de peso de activos.

Tengo dos Dataframes:

  1. precio de cada activos individuales (https://www.dropbox.com/s/ve9ll3t1j5owfuc/test_price.csv?dl=0)

  2. peso de cada activos individuales (https://www.dropbox.com/s/hto9kq2g2wwfpm8/test_weight.csv?dl=0)

  • Ambos Dataframes tienen la misma forma

  • Los pesos de cada activo solo cambian al final del mes

    • Los pesos de los demás días se llenan con el método 'ffill', por lo que los pesos son iguales durante cada mes

Lo que he descubierto:

  1. portfolio_cum_rtn_df = (price_df.pct_change().fillna(0) + 1).multiply(weight_df).sum(axis=1)

  2. portfolio_rtn_df = price_df.pct_change().fillna(0).multiply(weight_df).sum(axis=1) portfolio_cum_rtn_df = (portfolio_rtn_df + 1).cumprod()

Ambos no son la forma correcta de calcular el rendimiento acumulativo de la cartera.

Necesito un poco de ayuda

4voto

aspitzer Puntos 860

Estas respuestas están perdiendo la idea de dependencia del camino. Tus pesos solo se actualizan mensualmente. Eso significa que tu peso en t0 es w0 y el peso en t1 es w0*(1 + r1), el peso en t2 es w0*(1+r1)*(1+r2) donde r(i) es el retorno total ajustado por división en el día i. Supongo que estás manteniéndolo simple, pero también importa si estás asumiendo que tus pesos son al inicio del día o al final del día.

Si estás asumiendo un reequilibrio diario de los pesos en tu hoja, entonces puedes olvidarte de la dependencia del camino porque los pesos se proporcionan en cada paso de tiempo discreto. Si este es el caso, tu segunda fórmula es correcta (ligera edición a continuación), pero nuevamente el diablo está en los detalles. Importa si se asumen los pesos al inicio o al final del día. Si es al final del día, necesitas desplazar un día hacia adelante para obtener los pesos deseados al inicio del día para la simulación. Si solo estás operando una vez al mes, tu fórmula no es correcta, necesitas incorporar la dependencia del camino.

portfolio_rtn_df = weight_df.multiply(price_df.pct_change().fillna(0)).sum(axis=1)
portfolio_cum_rtn_df = (1 + portfolio_rtn_df).cumprod() - 1

1voto

h0tw1r3 Puntos 1225

Supongamos activos $a$, $b$, $c$ con peso $W$ y precio $P$.

El día $i$, el retorno del activo $a$ es $R_{a}(i) = P_{a}(i)/P_{a}(i-1) - 1$.

El retorno de la cartera $R_{p}(i)$ en el día $i$ es igual a $W_{a}(i) \cdot R_{a}(i) + W_{b}(i) \cdot R_{b}(i) + W_{c}(i) \cdot R_{c}(i)$,

entonces el retorno acumulado de la cartera es $\Pi (1 + Rp(i)) - 1$, para $i$ desde 1 hasta el final del día.

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