-
-
Save ThiagoAnunciacao/cc54b806d4a10bf3408f to your computer and use it in GitHub Desktop.
# Retorna dados sobre o pregão | |
http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoCarregarDados.asp?CodDado=IBOV,ticker&CA=undefined | |
# Retorna ações e seus últimos valores negociados | |
http://www.bmfbovespa.com.br/Pregao-OnLine/ExecutaAcaoCarregarDados.asp?CodDado=Ticker | |
# Retorna o histórico do dia de um papel | |
http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoCarregarDadosPapeis.asp?CodDado=petr4 | |
# Retorna dados de um papel | |
http://www.bmfbovespa.com.br/cotacoes2000/formCotacoesMobile.asp?codsocemi=PETR4 | |
# Retorna array com vários papeis | |
http://www.bmfbovespa.com.br/Pregao-Online/ExecutaAcaoAjax.asp?CodigoPapel=BISA3|PETR4|BBDC4 | |
# Retorna dados do pregão | |
http://www.bmfbovespa.com.br/cotacoes2000/formCotacoesMobile.asp?codsocemi=IBOV |
@jicart já tentou usar a biblioteca yfinance (https://pypi.org/project/yfinance/)?
Já. Ela provavelmente é a melhor fonte, mas até nela eu já encontrei cotações erradas. Aí fica difícil de confiar.
Tudo que já testei já vi algum problema. No googlefinance tem tickers errados (VBBR3 ficou como BRDT3 durante meses).
No TradingView já vi cotação errada do DI futuro. No Profit da Nelogica às vezes dá problema nos dados em cache e tem que apagar tudo pra ele baixar de novo.
5 fontes diferentes e em todas já vi alguma inconsistência.
kkkkkkkk tá osso, viu?
De qualquer forma, em geral os erros são de centavos, então nunca dá tanta diferença.
Olá boa noite !!! alguém sabe me dizer se existe uma API que traz a posição de contratos por participante?
Segue o link de referencia para os dados que preciso.
Olá boa noite !!! alguém sabe me dizer se existe uma API que traz a posição de contratos por participante? Segue o link de referencia para os dados que preciso.
Luciane, não sei se por questão de sigilo a B3 não divulga os participantes individualmente. Não tenho acesso à API para verificar se, por lá, disponibilizam estas informações.
O melhor que encontrei até agora, com facilitários para uso, é fazer um web scraping da API do StatusInvest. Ela inclui até fundos de investimentos (com facilitários eu quero dizer estrutura propensa a web scraping de indicadores, resultados diretos se colocar o ticker inteiro, organização entre ações, Fii, etc. O que eu planejo fazer é uma carteira/portfólio automatizado, então preciso me certificar que as ações são de uma certa categoria)
https://statusinvest.com.br/home/mainsearchquery?q=b3sa3
Única desvantagem que pode dar BO é que não dá pra pesquisar vários em uma query só, então vc pd acabar abusando e eles caírem em cima.
@mtcdultra Parece que o Yahoo Finance não mostra dados sobre bonificação de ações. Conseguiu pegar esse dado de algum outro lugar?
@guijusto não identifiquei nenhum campo que forneça esta informação. Uma sugestão seria acompanhar as notícias em "news articles" da API (https://cryptocointracker.com/yahoo-finance/yahoo-finance-api). Fora isso, talvez fazer scrapping nesta página do Fundamentus - Fatos Relevantes (https://www.fundamentus.com.br/fr.php?&pg=1) com a palavra chave.
Eu uso uma API oficial da bolsa com licença de desenvolvimento, posso dar host pra quem quiser aí, só me avisa pelo Insta @Gwinest Eu não uso nem metade da capacidade, eu ajudo quem precisar, só me pedir Em dom., 12 de jun. de 2022 16:58, Alessandro dev. @.> escreveu:
…
@.* commented on this gist. ------------------------------ Esse endpoint não é uma api, mas no navegador é possível acessar os dados da composição da carteira do ibov. dá pra fazer um web scraping. a Hash é uma conversão base64. Já deixei configurada para listar todos os ativos da carteira. GET https://sistemaswebb3-listados.b3.com.br/indexProxy/indexCall/GetPortfolioDay/eyJsYW5ndWFnZSI6ImVuLXVzIiwicGFnZU51bWJlciI6MSwicGFnZVNpemUiOjEyMCwiaW5kZXgiOiJJQk9WIiwic2VnbWVudCI6IjEifQ== Essa é a api pública da B3. Dá pra usar uma ferramenta para vasculhar os endpoints disponíveis (Endpoint Application Discovery Tool) GET https://cotacao.b3.com.br/mds/api/v1/InstrumentPriceFluctuation/ibov — Reply to this email directly, view it on GitHub https://gist.github.com/cc54b806d4a10bf3408f#gistcomment-4198415, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGGZNTY5ZJO5JFOKYXNK3RTVOY6ODANCNFSM4ILTSIFQ . You are receiving this because you commented.Message ID: @.***>
Olá, consegue dar um host para ver amigo?
Obrigado.
Olá pessoal! Alguém usa a API do Fundamentus?
@matheusbnas parece muito legal, mas tah abandonada a um tempo, não tem manutenção
Esse endpoint não é uma api, mas no navegador é possível acessar os dados da composição da carteira do ibov. dá pra fazer um web scraping. a Hash é uma conversão base64. Já deixei configurada para listar todos os ativos da carteira.
Essa é a api pública da B3. Dá pra usar uma ferramenta para vasculhar os endpoints disponíveis (Endpoint Application Discovery Tool) GET https://cotacao.b3.com.br/mds/api/v1/InstrumentPriceFluctuation/ibov
Também encontrei esse projeto bem documentado que pode ser útil https://mfinance.com.br/swagger/index.html
Essa cotacao.b3 mencionada por você parece ser uma das melhores soluções gratuitas para se utilizar, pelo fato de ser a única das mencionadas que retornam informações sobre opções. Mas gostaria de saber se você tem mais informações sobre os endpoints que essa API possui, por exemplo, pra mim ficaria interessante se tivesse um endpoint que eu possa recuperar todas as opções por ativo.
Ola, tudo bem?
Alguem pode me ajudar?
Adaptei esse sketch em um ESP32, tem conecção WI-FI direto com reset pino 4.
Cotação STOCK EUA
CRIPITO
B3
Porem a B3 parou de funcionar.
Com a API do nosso amigo
@felipemarinho97 com o link: https://felipemarinho.vercel.app/api/b3/prices/
Vou colocar o Sketch para analizarem.
Agradeço a atenção.
Fico no aguardo.
//Cotação
// display: 8-pin 128160 SPI TFT (SD card reader not used) controller ST7735S
// Example in the Adafruit ST7735 and ST7789 library
// pin assignment
// NODEMCU ESP32 ============================= 128160 SPI TFT ECRÃ LCD
// 3V --------------------------------------------------- VCC
// GND --------------------------------------------------- GND
// GPIO5 VSPI SS (Slave Select/ Chip Select) ------------ CS
// GPIO4 ------------------------------------------------ RESET
// GPIO2 (labelled as DC in Adafruit code) -------------- A0
// GPIO23 VSPI MOSI (MOSI, Data to Screen) -------------- SDA
// GPIO18 VSPI SCK (SPI Clock) -------------------------- SCK
// 3V --------------------------------------------------- LED
//Programa: WifiManager com e ESP32
//Autor: Arduino e Cia
#include <WiFi.h>
#include <WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_DC 2 // register select (stands for Data Control perhaps!)
#define TFT_RST 15 // Display reset pin, you can also connect this to the ESP32 reset
// in which case, set this #define pin to -1!
#define TFT_CS 5 // Display enable (Chip select), if not enabled will not talk on SPI bus
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void resettft() {
tft.fillScreen(ST77XX_BLACK);
}
//Define o pino para reset das definicoes de wifi
int pino_reset = 4;
// Array of cryptocurrencies you want to track
const char* cryptoSymbols[] = {
"bitcoin",
"ethereum",
// "cardano",
// "cardano",
};
// Number of cryptocurrencies in the array
const int numCryptoSymbols = sizeof(cryptoSymbols) / sizeof(cryptoSymbols[0]);
void readPriceBR(int x, int y, const String& Acao) {
String httpRequestAddress = "https://felipemarinho.vercel.app/api/b3/prices/" + Acao;
// https://felipemarinho.vercel.app/api/b3/prices/petr3 Site onde encontrei o link: https://gist.github.com/ThiagoAnunciacao/cc54b806d4a10bf3408f?permalink_comment_id=4198272
HTTPClient http;
int httpCode;
http.begin(httpRequestAddress);
httpCode = http.GET();
if (httpCode > 0) {
DynamicJsonDocument doc(1024);
String payload = http.getString();
Serial.println(payload);
deserializeJson(doc, payload);
// float currentsymbol = doc["symbol"];
// float currentname = doc["name"];
// float currentopeningPrice = doc["openingPrice"];
// float currentminPrice = doc["minPrice"];
// float currentmaxPrice = doc["maxPrice"];
// float currentaveragePrice = doc["averagePrice"];
float Price = doc["currentPrice"];
float Variation = doc["priceVariation"];
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(3);
tft.println(Acao);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(1,2);
tft.println("R$");
tft.setCursor(12, 24);
tft.setTextSize(2,5);
tft.println(Price, 2);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2,5);
tft.println(Variation, 2);
tft.setTextSize(1,2);
tft.setCursor(110, 85);
tft.println("%");
} else {
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Error in HTTP request");
}
}
void readPriceUSA(int x, int y, const String& stockName) {
String httpRequestAddress = "https://finnhub.io/api/v1/quote?symbol=" + stockName + "&token=cmgs2lpr01qilgs0uohgcmgs2lpr01qilgs0uoi0";
HTTPClient http;
int httpCode;
http.begin(httpRequestAddress);
httpCode = http.GET();
if (httpCode > 0) {
DynamicJsonDocument doc(1024);
String payload = http.getString();
Serial.println(payload);
deserializeJson(doc, payload);
float previousClosePrice = doc["pc"];
float currentPrice = doc["c"];
float differenceInPrice = ((currentPrice - previousClosePrice) / previousClosePrice) * 100.0;
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(3);
tft.println(stockName);
if (differenceInPrice < 0.0) {
tft.setTextColor (ST77XX_WHITE);
} else {
tft.setTextColor (ST77XX_WHITE);
}
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(1,2);
tft.println("$ ");
tft.setCursor(12, 24);
tft.setTextSize(2,5);
tft.println(currentPrice, 2);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2,5);
tft.println(differenceInPrice, 2);
tft.setTextSize(1,2);
tft.setCursor(110, 85);
tft.println("%");
} else {
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Error in HTTP request");
}
http.end();
}
void setup() {
// Start Serial for debugging
Serial.begin(115200);
delay(10);
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
pinMode(pino_reset, INPUT);
WiFiManager wifiManager;
wifiManager.setConfigPortalTimeout(240);
//Cria um AP (Access Point) com: ("nome da rede", "senha da rede")
if (!wifiManager.autoConnect("Cotação", "12345678")) {
Serial.println(F("Falha na conexao. Resetar e tentar novamente..."));
delay(3000);
ESP.restart();
delay(5000);
}
//Mensagem caso conexao Ok
Serial.println(F("Conectado na rede Wifi."));
Serial.print(F("Endereco IP: "));
Serial.println(WiFi.localIP());
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(1,2);
tft.println("Conectado WI-FI");
tft.println(WiFi.localIP());
tft.println(WiFi.SSID());
delay (2000);
}
void loop() {
//Verifica se o botao foi pressionado
int valor = digitalRead(pino_reset);
if (valor == 1) {
//Apaga os dados da rede wifi gravados na memoria e reinicia o ESP
WiFiManager wifiManager;
wifiManager.resetSettings();
Serial.println("Configuracoes zeradas!");
ESP.restart();
}
// Loop through all the cryptocurrencies
for (int i = 0; i < numCryptoSymbols; i++) {
// Get crypto price from API
float price = getCryptoPrice(cryptoSymbols[i]);
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2,5);
tft.println(cryptoSymbols[i]);
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(1,2);
tft.print("$");
tft.setTextSize(2);
tft.println(price, 3);
delay(10000); // Delay in milliseconds between each cryptocurrency display
}
}
float getCryptoPrice(const char* cryptoSymbol) {
String url = "https://api.coingecko.com/api/v3/simple/price";
url += "?ids=";
url += cryptoSymbol;
url += "&vs_currencies=usd";
HTTPClient http;
http.begin(url);
int httpResponseCode = http.GET();
float price = 0;
if (httpResponseCode == 200) {
String payload = http.getString();
const size_t capacity = JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(1) + 20;
DynamicJsonDocument doc(capacity);
deserializeJson(doc, payload);
price = doc[cryptoSymbol]["usd"].as();
}
readPriceBR(0, 0, "B3SA3");
delay(10000);
readPriceBR(0, 0, "CMIG4");
delay(10000);
readPriceUSA(0, 0, "AGNC");
delay(10000);
readPriceUSA(0, 0, "BXMT");
delay(10000);
return price;
}
Pelo que entendi, teria como colocar um comando para que o site achei que é Android ou windows, pois neste caso acho que funciona , pois ao link abre e diz verificar o sistema operacional.
@jicart já tentou usar a biblioteca yfinance (https://pypi.org/project/yfinance/)?