Yahoo finance + Facebook prophet.
Tags: yahoo, finance, facebook, prophet
Published: 2021-08-29 18:28:11

Quien más, quien menos, ha deseado en algún momento ser lo suficientemente rico como para poder dejar de trabajar, sin tener que preocuparse por los recursos económicos disponibles.

Hay quien dice que esto se puede conseguir **trabajando duro**. Pero os he de decir que yo llevo muchos años intentandolo, sin demasiado éxito.

Otra alternativa sería **dar el golpe del siglo**. He revisado toda la filmografía sobre el tema, y no he encontrado ningún plan que pueda funcionar en la vida real.

Ya sólo me queda empezar a **especular en bolsa**, pero como no tengo ni idea sobre la materia, tendré que suplirlo tirando de mis habilidades en programación.

Vamos a utilizar el ya omnipresente **python** (a estas alturas, ya no hay discusión sobre si debe ser la versión **3**). Así que, siguiendo las buenas prácticas, vamos a crear nuestro entorno virtual, donde instalaremos las librerías que vamos a necesitar.

```bash
mkdir prophetStockPrice
cd prophetStockPrice/
python3 -m venv venv
source venv/bin/activate
```

Nuestro entorno, ya está preparado para empezar a instalar las librerías que necesitaremos.

```bash
pip3 install pandas matplotlib yfinance fbprophet
```
Ya tenemos todo lo necesario, así que abrimos nuestro editor preferido y, escribimos algo parecido a lo siguiente:

```python
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
from fbprophet import Prophet

def predict_stock(stock_name): 
    # Utilizamos la API de Yahoo finance para recuperar la 
    # información histórica de las cotizaciones en bolsa para
    # las acciones de la empresa seleccionada.
    stock_data = yf.Ticker(stock_name)
    
    # Guardamos todos los datos recuperados en un DataFrame
    # de pandas.
    stock_hist = stock_data.history(period="max", auto_adjust=True)

    # Creamos un DataFrame vacío, al que añadiremos la 
    # información que necesita la librería prophet de
    # Facebook.
    stock_df = pd.DataFrame()

    # Le añadimos la columna con la serie de fechas (se
    # tiene que llamar 'ds').
    stock_df['ds'] = stock_hist.index

    # Copiamos los valores de las cotizaciones en el momento
    # del cierre de la sesión de bolsa (se tiene que llamar
    # 'y').
    stock_df['y'] = stock_hist['Close'].values
 
    # Ya disponemos de la información en el formato 
    # requerido.
    # Creamos una instancia del predictor (presuponiendo que
    # nuestros datos no están sujetos a ciclos diarios).
    m = Prophet(daily_seasonality=False)

    # Entrenamos nuestro modelo predictor con los datos
    # diponibles, para que encuentre posibles patrones
    # predicores.
    m.fit(stock_df)

    # Creamos una secuencia de días futuros vacios (de un año
    # en este caso).
    future = m.make_future_dataframe(365 * 1, freq='D')
    
    # Predecimos los posibles valores para los días que
    # acabamos de añadir (aplicará las reglas encontradas
    # en el paso anterior).
    forecast = m.predict(future)

    # Mostramos la gráfica con los resultados de la
    # predicción.
    m.plot(forecast)
    plt.show()

# Informamos las iniciales que identifican a la empresa
# que hemos seleccionado.
STOCK = "FB"

# Llamamos a la función que realizará todo el trabajo
# por nosotros.
predict_stock(STOCK)

```
Y he aquí el resultado obtenido.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cazbniq972nb5wwqu4ki.png)

Según las predicciones del propio **Facebook**, invertir en sus acciones, va a resultar un negocio rentable durante el próximo año. Es posible que esto pueda ser cierto, pero antes de ir corriendo a decirle a tu agente en bolsa que compre todas las acciones disponibles de la compañía, ten presente que, si bien la bolsa parece tener algún tipo de ciclos temporales, hay todo tipo de variables que la pueden infuir de forma considerable. 

Imagina que pasaría si, al día siguiente a tu compra, se hace público que su seguridad ha sido comprometida y han sido robados todos los datos de sus usuarios ...

Es posible incluso que se pudiera producir un caso de **profecía autocumplida**. Imagina que todo el mundo utilizara **prophet** para predecir las cotizaciones en bolsa. Cuando arrojara un resultado positivo, todos a comprar como locos (haciendo que suba la cotización). Cuando la predicción fuera negativa, todos a vender para no perder dinero (lo que provocaría la pérdida de valor en bolsa).

Lo más probable es que esto no te sirva para convertirte en millonario (no era esa mi intención), pero espero que te pueda resultar de utilidad en algún caso.