Fintual-Desaf-o-para-Postular

En el archivo portfolio.py se puede encontrar la implementación de la clase Portfolio como así también una función auxiliar que sería necesaria para poder implementar el método profit de la manera planteada.

La clase y los métodos implementados buscan resolver la siguiente consigna:

Construct a simple Portfolio class that has a collection of Stocks and a Profit method that receives 2 dates and returns the profit of the Portfolio between those dates. Assume each Stock has a Price method that receives a date and returns its price. Bonus Track: make the Profit method return the annualized return of the portfolio between the given dates.

Atributos

La clase Portfolio cuenta con un atributo Stocks que es un diccionario donde cada clave es una Stock y su valor correspondiente, quantity, la cantidad de acciones de esa instancia que tiene el Portfolio.

Métodos

Instanciar el Portfolio

El método init genera un diccionario vacío, pero si el objeto de tipo Portfolio se instancia con el Class method portfolio_with_stocks, se obtiene un Portfolio con el diccionario de la forma {stock: quantity} que se pase como argumentos.

Agregar y quitar Stocks

También cuenta con un método que permite agregar o quitar Stocks al portfolio. Dicho método, además de requerir un Stock, toma por parámetro una quantity: si la quantity es igual o mayor a cero, se suma al valor cuya clave es la Stock ingresada (si no existe esa Stock en el Portfolio se añade el par (Stock, quantity) al Portfolio); si la quantity es negativa, se resta al valor cuya clave es la Stock ingresada (aunque esa resta no puede dar un resultado menor a cero, de forma que se levantaría una exception).

Obtener ganancias anualizadas

El método profit está implementado de forma tal de cumplir con el bonus track de la consigna. El resultado está expresado en porcentaje. Está pensado para que las dates ingresadas sean del tipo string, aunque para su implementación real debería tenerse en cuenta el tipo del parámetro del método price de la clase Stock. La ecuación utilizada para calcular la annualized_profit se obtuvo del siguiente link: https://www.investopedia.com/terms/a/annualized-total-return.asp . En este método llama una función auxiliar que obtiene la diferencia en días (devuelve un int) entre dos fechas pasadas como string en formato 'YY-MM-DD'. Esta función no debería estar implementada en este módulo, pero para que se entiendiera la idea decidí agregarla.