Follow Us

Obtenha preços de ações da bolsa de valores no Google Sheets

Obtenha preços de ações da bolsa de valores no Google Sheets

Se você tem uma tabela no Excel ou Google Sheets para controlar suas ações da bolsa de valores, certamente já se cansou do trabalho de pesquisar o preço de uma ação de cada vez para atualizar sua tabela.

Ora, existe uma solução muito mais simples. Podemos criar uma função que faz o trabalho árduo para nós. 🙌

Função STOCK_PRICES que obtêm o preço de um range de ações

Obtendo os preços

A API do AlphaVantage é perfeita para isso! Vamos utilizar apenas um dos endpoints mas você pode conferir a documentação completa.

Um detalhe: a API gratuita tem um limite de 5 requisições por minuto e 500 por dia, então como fazer se precisamos de mais? Por sorte o site nos permite criar mais de uma API key, basta utilizar um e-mail diferente para cada.

Lembre-se que caso você esteja criando uma aplicação profissional e precisa de muitas requisições, vale a pena conferir os planos premium, que vão te dar direito a mais de 5 requisições por minuto.

Google Apps Script

Para nossa aplicação, vamos utilizar o Google Apps Script para criar a função STOCK_PRICES(). Se você nunca utilizou, basta acessar uma planilha do Google Sheets e ir no menu Ferramentas > Editor de script. Para quem está acostumado com JavaScript, a sintaxe utilizada é bem parecida.

Como acessar o editor de script no Google Sheets

Vamos começar criando uma variável global que armazena nossas API keys:

KEYS = [
  '__SUAS__',
  '__API___',
  '__KEYS__',
  '__AQUI__'
];

Nossa função STOCK_PRICES deve receber um range 1 x N de células da tabela e retornar uma lista de preços:

function STOCK_PRICES(range) {
  var return_values = new Array(range.length);
  
  for (var i=0; i<range.length; i++) {
      // LOOP PRINCIPAL  
  }
  return return_values;
}

O endpoint que vamos utilizar para obter os preços requer o código da ação e a API key como argumentos em um método GET, retornando um JSON:

Requisição GET no Postman
Requisição GET no Postman

Que na data que este artigo está sendo escrito, apresenta o seguinte resultado:

{
    Global Quote: {
        01. symbol: "MSFT",
        02. open: "143.7500",
        03. high: "149.6000",
        04. low: "141.2700",
        05. price: "148.3400",
        06. volume: "81850079",
        07. latest trading day: "2020-03-24",
        08. previous close: "135.9800",
        09. change: "12.3600",
        10. change percent: "9.0896%"
    }
}

Para o nome da ação, basta utilizarmos range[i] e para a key, precisamos utilizar uma de cada vez para contornar o limite imposto pela API:

var key = KEYS[i % KEYS.length];
var stock = range[i];
var url = 'https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=' + stock + '.SA&apikey=' + key;

Agora que já temos a url, basta fazer uma requisição GET e acessar as chaves do JSON retornado:

var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});  
var data = JSON.parse(response.getContentText());

if (data['Global Quote'] === undefined) {
  return_values[i] = 0;
} else {
  return_values[i] = parseFloat(data['Global Quote']['05. price']);
}

Veja que adicionamos uma simples verificação caso a requisição falhe por limites atingidos na API ou algum outro motivo que faça a variável de retorno não conter a chave Global Quote.

Pronto! Agora a função STOCK_PRICES já esta disponível e pode ser utilizada em sua tabela do Google Sheets.

Função STOCK_PRICES que obtêm o preço de um range de ações

Código

Veja abaixo o código completo deste artigo:

KEYS = [
  '__SUAS__',
  '__API___',
  '__KEYS__',
  '__AQUI__'
];

function STOCK_PRICES(range) {
  
  var return_values = new Array(range.length);
  
  for (var i=0; i<range.length; i++) {
  
    var key = KEYS[i % KEYS.length];
    var stock = range[i];
    var url = 'https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=' + stock + '.SA&apikey=' + key;
    var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});  
    var data = JSON.parse(response.getContentText());
    
    if (data['Global Quote'] === undefined) {
      return_values[i] = 0;
    } else {
      return_values[i] = parseFloat(data['Global Quote']['05. price']);
    }
  }
  return return_values;
}

Este código esta disponível no github

Dark Mode

Nota: Este artigo tem como finalidade dar uma breve introdução ao Google Scripts no Sheets. Caso queira, o Google Sheets oferece a função GOOGLEFINANCE que faz o mesmo da nossa STOCK_PRICES, com algumas funcionalidades a mais.

Referências

Veja abaixo para mais informações sobre este artigo:

  1. Documentação do Google Apps Script.
  2. Documentação do AlphaVantage.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *