sábado, 28 de julio de 2018

El dato que más me ha costado automatizar en mi hoja de cálculo: El dividendo (nueva explicación añadida)

No sé si esta es también vuestra experiencia, pero cuando empecé a llevar un registro de la cartera en una hoja de cálculo de Google me pareció como el primer amor, todo fantástico. Con las funciones de GOOGLEFINANCE podía automatizar la actualización de muchos datos relativos a acciones y fondos de inversión, de manera que podía ahorrar tiempo. Hay que huir de la introducción manual de datos como de la peste.
En mi cartera, el símbolo de Starbucks está en la celda C3 y la última columna es la relación PER actual. Si no quiero tener que escribirla a mano periódicamente, ¡y no quiero!, basta con escribir
en la celda correspondiente de esa última columna:
  • =GOOGLEFINANCE(C3;"pe")
También puedo escribir
  • =GOOGLEFINANCE("SBUX";"pe")
Pero si lo hago de la primera forma basta con completar los parámetros de la primera acción de la cartera y después simplemente copiarla y pegarla en las filas inferiores que corresponden a todos los demás valores. El resultado de ese pegado es que en cada fila, es decir, para cada valor, aparece modificada la celda correspondiente: C4, C5, C6 y así sucesivamente.

  • =GOOGLEFINANCE(C4;"pe")
  • =GOOGLEFINANCE(C5;"pe")
  • =GOOGLEFINANCE(C6;"pe")
Esto es probable que lo deba explicar mejor por si hay alguien que no lo conozca, lo que sucede es que no puedo. Así que aquí dejo un enlace a una entrada reciente de Divideando que lo hace mucho mejor que yo.
Algunos pueden pensar que el PER es una parida, y tal vez tengan razón, pero ¿y si quieres tener actualizado lo más básico de la cartera, el precio? Algunos pensarán que el precio es otra parida en la que no hay que fijarse, pero esto nos llevaría lejos y aquí pretendo destacar qué funciones nos ofrece Google para que cada cual utilice las que le parezca. Pues bien, si solo escribes la celda del símbolo y nada más, Google te importa el precio de la acción.
  • =GOOGLEFINANCE(C3)
Si copias esa celda y la pegas en las filas inferiores tendrás que en la columna del precio aparecerán:

  • =GOOGLEFINANCE(C4)
  • =GOOGLEFINANCE(C5)
  • =GOOGLEFINANCE(C6)
En el caso de las acciones, la función GOOGLEFINANCE te permite importar:
  • "price": Precio en tiempo real, con un retraso de hasta 20 minutos.
  • "priceopen": Precio de apertura.
  • "high": Precio máximo entre la apertura y el momento actual.
  • "low": Precio mínimo entre la apertura y el momento actual.
  • "volume": Volumen de transacciones del día actual.
  • "marketcap": Capitalización de mercado.
  • "tradetime": Hora de la última transacción.
  • "datadelay": Retraso de los datos respecto de los datos en tiempo real. 
  • Y así hasta una serie de funciones que podéis consultar en el enlace de Ayuda de Editores de Documentos.

Sin embargo, un inversor en dividendos busca cómo importar el dividendo sin encontrar nada. Hay una función para la distribución de efectivo más reciente de un fondo de inversión ("incomedividend"), pero nada para dividendos de acciones. Entonces puede que inicies una peregrinación que te lleve a Yahoo:

  • =IMPORTDATA(CONCATENATE("http://finance.yahoo.com/d/quotes.csv?s=C$3,"&f=d"))

No funciona hasta que te das cuenta que en Yahoo siguen la notación inglesa y las comas son puntos y tienes que cambiar la configuración de la hoja de cálculo de Google a Estados Unidos para que te importe el dividendo. Hasta que la función deja de funcionar y te vas a Google:

  • =INDEX(IMPORTHTML("https://www.google.com/finance?q="&C3, "table",3),1,2)

Tampoco funciona inicialmente porque tienes que dejar una columna libre a la derecha para que añada en esa columna la rentabilidad por dividendo.
En algún momento pasas por importar el dividendo de la página de Nasdaq:

  • =INDEX(IMPORTHTML("http://www.nasdaq.com/symbol/"&$C$3, "table",0),11,2)

Pero después de una luna de miel corta, te enfrentas de nuevo a la realidad. O metes el dividendo a mano o dejas las celda con un eterno "Loading". Como te niegas a estar metiendo el dividendo a mano y cambiándolo cada vez que lo aumenten las compañías, pues "Loading" pasa a ser una mosca posada en tu cara.
Hasta que llegas a twoinvesting y empiezas a oír hablar de la función IMPORTJSON. Haces una copia de su hoja de cálculo y tratas de modificar la tuya para que importe el dividendo. Pero la función IMPORTJSON no parece funcionar. Hasta que ves que en Herramientas > Editor de secuencias de comandos tienes que pegar un código que va a hacer que la función IMPORTJSON traiga los datos de IEX (para las acciones extranjeras necesitas un código API de Alpha Vantage, pero de momento no tiene el dividendo, así que lo siento, pero no funciona, por ejemplo, para Unilever, que está en mi hoja de valores seguidos; el código de Alpha Vantage es gratuito y el código de mi cartera lleva ya el mío, desconozco si eso es un problema). Para no copiar el código aquí, dado su tamaño, he creado una copia de mi cartera accesible para todo el mundo. Basta con que te hagas una copia (sigues el enlace y cuando se abra seleccionas Archivo>Hacer una copia) y la utilices a tu gusto. Puede que simplemente la quieras para ver el código (recuerda: Herramientas > Editor de secuencias de comandos), copiarlo y pegarlo en tu propia hoja. También puedes obtener una hoja de cálculo mejor y mucho más amplia de twoinvesting. Como desees.

P. S. (8 de agosto de 2018):

Para tratar de aclarar un poco más las cosas voy a insertar unas imágenes que espero que sean suficientemente explicativas. En la celda de dividendo por acción de Starbucks de la copia de mi cartera que compartí figura lo siguiente:

=if(isblank(C3),,IMPORTJSON("https://api.iextrading.com/1.0/stock/"&C3&"/stats?filter=dividendRate","dividendRate"))

Lo que hace la función IMPORTJSON es importar el dividendo de Starbucks de la página de IEX mediante una secuencia de comandos de la hoja de cálculo de Google. Si ya tienes creada una hoja de cálculo propia y quieres añadirle esta función, primero vete a la copia de mi cartera y accede a Herramientas > Editor de secuencia de comandos:





Se abre una pestaña adicional llamada Code.gs y ves que tiene un texto que comienza en la línea 1 //Global Variables y termina en la línea 228 }.




Lo que tienes que hacer es copiarlo y pegarlo en el editor de secuencias de comando de tu propia hoja de cálculo, que tendrá cuando lo abres por primera vez un aspecto así:




Le das nombre a este Proyecto sin título (yo le llamé Code.gs) y lo guardas, para lo que se das a guardar en Archivo > Guardar o pulsas en el icono de disco y tu hoja de cálculo estaría lista para importar el dividendo anual. Recuerda que la notación decimal de origen en IEX es con punto (1.44 $) y no con coma (1,44 $), así que tu hoja de cálculo tiene que tener una configuración de un país que use esa notación (lo más cómodo es seleccionar Estados Unidos, que está al lado de España en la lista desplegable). Así que en tu hoja de cálculo Archivo > Configuración de la hoja de cálculo y en la pestaña General seleccionar Estados Unidos en la lista de Configuración regional. Con eso estaría listo.

4 comentarios:

  1. Genial este post, sin embargo veo que la casilla del dividendo ya no funciona. Lo has conseguido arreglar? Me tiene negro esto de volcar el dividendo en la hoja de google...

    ResponderEliminar
    Respuestas
    1. Actualmente, la cartera obtiene el dato de stocknews.com y funciona. La celda la puedes copiar de mi hoja de cálculo de Google. Gracias por pasarte por aquí.

      Eliminar
    2. Hola! Gracias por responder! En la hoja que aparece enlazada en el post importa el dividendo de iextrading: =if(isblank(C2),,IMPORTJSON("https://api.iextrading.com/1.0/stock/"&C2&"/stats?filter=dividendRate","dividendRate"))
      Es posible que tengas un enlace actualizado en otro post? Disculpa, pero recién descubrí tu blog. Saludos y gracias por compartir tu experiencia!

      Eliminar
    3. Olvídalo, acabo de descubrir que tienes los enlaces actualizados en la pestaña de arriba. Es impresionante tu constancia para mantener estas hojas durante tanto tiempo! Enhorabuena!

      Eliminar