1 votos

la mejor manera de calcular la rentabilidad

Supongamos que quiere calcular el retorno de un solo periodo . Dejemos que p0 sea el precio inicial y p1 sea el precio final del periodo.

La fórmula más común es

(p1 - p0) / p0

Pero también veo a veces que la gente utiliza

(p1 / p0) - 1

Algebraicamente, ambas formas son equivalentes. Sin embargo, a la hora de escribir código informático, ¿hay alguna diferencia?

Desde el punto de vista del rendimiento, ambas formas implican 1 división y 1 sustracción, por lo que deberían tener un rendimiento similar. (¿Quizás la primera forma sólo necesita 3 registros mientras que la segunda necesita 4?)

Desde el punto de vista de la precisión, ¿hay alguna diferencia? ¿Una forma tiene menor error de punto flotante que la otra? Supongamos que se utiliza un tipo de punto flotante de 64 bits (por ejemplo, numpy float64 o Java double).

No estoy seguro de si el lenguaje utilizado es importante, pero si crees que puede serlo, ahora suelo utilizar Python (Pandas), R o Java. Y si estoy usando Pandas o R, el retorno se suele calcular como una operación vectorial.

5voto

Charles Chen Puntos 183

El lenguaje importaría, pero si el rendimiento es un problema, habría que asegurarse de que el código es óptimo. El código en ensamblador optimizado para un cálculo de retorno único tiene el siguiente aspecto (en Godbolt ):

method1(double, double):
        divsd   xmm0, xmm1
        subsd   xmm0, QWORD PTR .LC0[rip]
        ret
method2(double, double):
        subsd   xmm0, xmm1
        divsd   xmm0, xmm1
        ret
.LC0:
        .long   0
        .long   1072693248

El número de instrucciones y registros utilizados es el mismo. No sé si hay alguna diferencia entre aplicar subsd en dos registros o un registro y un valor del segmento de datos. Todos los compiladores se comportan más o menos igual así que supongo que es una forma rápida de restar 1.

El enlace de Godbolt también contiene código vectorizado, este código es bastante similar y de una rápida comprobación parece utilizar la misma cantidad de registros ( xmm0 , xmm1 , xmm2 y los registros de contabilidad del bucle).

A efectos financieros, los números dobles son lo suficientemente precisos. Las diferencias de redondeo que puede encontrar en los cálculos de las devoluciones son insignificantes, menores que 1e-10 para todos los números razonables. Es mucho más importante obtener los datos correctos. Pero incluso si se tienen los datos correctos, cualquier ruido en los datos, como los diferenciales de oferta y demanda, inundaría el error de punto flotante. Los errores de punto flotante se disparan cuando se divide. Probablemente sea una mala idea dividir los rendimientos en cualquier caso porque pueden ser fácilmente 0.

Para concluir

Yo no me preocuparía por esto. Las diferencias de rendimiento serán insignificantes y si no lo son deberías medir ambas. El error de punto flotante no debería perjudicar, es mucho mejor centrarse en obtener buenos datos.

1voto

andre Puntos 150

Cualquier diferencia sería insignificante. Por otra parte, el cálculo del retorno logarítmico presenta ventajas estadísticas. Recuerde que la rentabilidad logarítmica es simplemente la diferencia logarítmica del valor/precio de un día a otro. Los retornos logarítmicos tienen algunas propiedades más favorables para el análisis estadístico que los retornos netos simples, como muestran Quigley y Ramsey (2008), como la estacionariedad y la ergodicidad.

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