Cálculo del rendimiento de una serie de posiciones de acciones con múltiples transacciones desiguales

¿Cómo puedo calcular el rendimiento de una serie de posiciones de acciones con múltiples transacciones desiguales que pueda comparar con el rendimiento equivalente de comprar y mantener durante el mismo período?

Random Example: Starting cash = $6000 Day[0]: Buy 100 shares of stock A @ $50 -- Long Position opened Day[3]: Buy 10 shares of stock A @ $52 Day[6]: Sell 50 shares of stock A @ $60 Day[7]: Sell 60 shares of stock A @ $58 -- Position closed w/ zero shares Day[10]: Buy 100 shares of stock A @ $55 -- Long Position opened Day[16]: Sell 50 shares of stock A @ $65 Day[20]: Sell 50 shares of stock A @ $58 -- Position closed w/ zero shares Return: ?

Buy and Hold: Day[0]: Buy $6000 worth of stock A @ $50 (120 shares) Day[20]: Sell 120 shares @ $58 ($6960) Return = ($6960 - $6000) / $6000 * 100 = 16%

Estoy tratando de implementar esto en el código y necesito encontrar una fórmula/algoritmo genérico que cubra cualquier caso.

EDITAR:

Puede que haya estado pensando demasiado en esto antes...

Solo rastrear el valor de la cuenta a través de cada transacción y calcular el monto final al final puede llevarme a la respuesta. Según el ejemplo: el valor final después de todas las operaciones bursátiles es $7610. Por lo tanto:

Return = (7610-6000)/6000 * 100 = 26.8%

Tal vez haya otra métrica de retorno avanzada que desconozco, pero esta parece ser la solución obvia para mí.

Respuestas (1)

En general, si está utilizando la contabilidad FIFO (primero en entrar, primero en salir), deberá hacer coincidir las transacciones en función del número de acciones.

En su ejemplo, al comienzo del día 6, tenía dos lotes de acciones, 100 a 50 y 10 a 52. Ese día vendió 50 acciones y, utilizando FIFO, vendió 50 acciones del primer lote. Esto le deja con 50 @ 50 y 10 @ 52, y una ganancia de capital imponible sobre las 50 acciones que vendió.

Tenga en cuenta que las comisiones incurridas en la compra de las acciones aumentan su base y las comisiones incurridas en la venta de las acciones disminuyen sus ingresos. Entonces, si gastó $ 10 por operación, su base en el lote de 100 @ 50 fue de $ 5010, y las ganancias de su venta de 50 @ 60 fueron de $ 2990. En este ejemplo, vendió la mitad del lote, por lo que su base para la venta fue la mitad de $5010 o $2505, por lo que su ganancia de capital es $2990 - 2505 = $485.

Las ventas que describe también son "ventas de lavado", en el sentido de que vendió acciones y volvió a comprar una acción equivalente dentro de los 30 días. En general, esto solo es relevante si una de las ventas tuvo pérdidas, pero deberá tener esto en cuenta en su código. Puede buscar la definición de venta de lavado, comienza a complicarse.

Si está escribiendo código para manejar esto en cualquier situación genérica, también tendrá que manejar divisiones de acciones, escisiones, fusiones, etc., que cambian la cantidad de acciones que posee y su base de costos. Lo he implementado yo mismo y he escrito sobre 25-30 rutinas personalizadas, una para cada tipo de transacción que he encontrado. La estructura de estos acuerdos está limitada solo por la imaginación de los banqueros de inversión, por lo que creo que es imposible escribir un único algoritmo genérico que los maneje a todos, en cambio, tengo un marco que actualizo cada trimestre a medida que ocurren nuevas transacciones.