B3 Futuros Agro¶
Ajustes diários (settlement prices) e posicoes em aberto (open interest) de contratos futuros agrícolas negociados na B3: boi gordo, milho, cafe, etanol, soja.
b3.ajustes()¶
Ajustes diários de uma data específica.
Parâmetros¶
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
data |
str \| date |
Sim | date, datetime ou texto AAAA-MM-DD ou DD/MM/AAAA; outro formato levanta InvalidParameterError antes da rede |
contrato |
str |
Não | Nome ("boi", "milho") ou ticker ("BGI", "CCM"), sem diferença de caixa; fora de b3.contratos() levanta InvalidParameterError com a lista. Se None, todos |
as_polars |
bool |
Não | Se True, retorna polars.DataFrame |
return_meta |
bool |
Não | Se True, retorna (DataFrame, MetaInfo) |
Colunas de Retorno¶
| Coluna | Tipo | Descrição |
|---|---|---|
data |
datetime | Data do pregao |
ticker |
str | Código do contrato (BGI, CCM, ICF, CNL, ETH, SJC, SOY) |
descricao |
str | Slug do contrato (ex.: boi, milho, cafe_arabica) |
vencimento_codigo |
str | Código de vencimento (ex: "G25") |
vencimento_mes |
int | Mes de vencimento (1-12) |
vencimento_ano |
int | Ano de vencimento |
ajuste_anterior |
float | Preco de ajuste do dia anterior |
ajuste_atual |
float | Preco de ajuste do dia |
variacao |
float | Variacao em relacao ao dia anterior |
ajuste_por_contrato |
float | Valor do ajuste por contrato, em reais em todos os contratos (inclusive ICF, SJC e SOY, cotados em dólar) |
unidade |
str | Unidade (BRL/@, BRL/sc60kg, USD/sc60kg, etc.) |
b3.historico()¶
Serie historica de ajustes. Itera sobre dias uteis no periodo, coletando ajustes de cada dia. Cada dia é um ZIP de
~11 MB, e o período inteiro soma um download por dia útil; no máximo AGROBR_HTTP_MAX_CONCURRENT_B3 dias (padrão 3)
ficam abertos ao mesmo tempo. Sem linhas, o DataFrame sai vazio com os dtypes do contrato ajuste_diario.
from datetime import date
import agrobr
df = await agrobr.b3.historico(
contrato="boi",
inicio=date(2025, 2, 10),
fim=date(2025, 2, 14),
vencimento="G25",
)
Parametros¶
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
contrato |
str |
Sim | Nome ("boi") ou ticker ("BGI"), sem diferença de caixa; fora de b3.contratos() levanta InvalidParameterError com a lista |
inicio |
str \| date |
Sim | Data inicial: date, datetime ou texto AAAA-MM-DD ou DD/MM/AAAA |
fim |
str \| date |
Sim | Data final, no mesmo formato; inicio depois de fim levanta InvalidParameterError |
vencimento |
str |
Nao | Código do mês do contrato (ex.: "G25"). Os ajustes só têm futuros: outro formato, inclusive o código de uma opção (ex.: "FVI1"), levanta InvalidParameterError antes da rede |
as_polars |
bool |
Nao | Se True, retorna polars.DataFrame |
return_meta |
bool |
Nao | Se True, retorna (DataFrame, MetaInfo) |
Colunas de Retorno¶
Mesmas colunas de b3.ajustes(), concatenadas para todas as datas do periodo.
b3.contratos()¶
Lista de contratos agrícolas disponíveis.
import agrobr
print(agrobr.b3.contratos())
# ['boi', 'cafe_arabica', 'cafe_conillon', 'etanol', 'milho', 'soja_cross', 'soja_fob']
Retorno¶
list[str] — Nomes dos contratos em ordem alfabetica.
b3.posicoes_abertas()¶
Posicoes em aberto (open interest) de futuros e opcoes agro de uma data específica.
import agrobr
from datetime import date
df = await agrobr.b3.posicoes_abertas(data=date(2025, 12, 19), contrato="boi")
Parâmetros¶
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
data |
str \| date |
Sim | date, datetime ou texto AAAA-MM-DD ou DD/MM/AAAA; outro formato levanta InvalidParameterError antes da rede |
contrato |
str |
Não | Slug (boi, milho, cafe_arabica, cafe_conillon, etanol, soja_cross) ou ticker (BGI, CCM, ICF, CNL, ETH, SJC). Se None, retorna todos |
tipo |
str |
Não | "futuro" ou "opcao"; outro valor levanta InvalidParameterError. Se None, todos |
as_polars |
bool |
Não | Se True, retorna polars.DataFrame |
return_meta |
bool |
Não | Se True, retorna (DataFrame, MetaInfo) |
Colunas de Retorno¶
| Coluna | Tipo | Descrição |
|---|---|---|
data |
datetime | Data de referencia |
ticker |
str | Código do ativo (BGI, CCM, ICF, CNL, ETH, SJC) |
descricao |
str | Slug do contrato (ex.: boi, milho, cafe_conillon) |
ticker_completo |
str | Ticker completo (ex: "BGIF26", "BGIF26C030000") |
vencimento_codigo |
str | Código de vencimento publicado (XprtnCd): "F26" no futuro, MYOA na opção (ex.: "FVI1") |
vencimento_mes |
int | Mês do contrato (1-12), também na opção |
vencimento_ano |
int | Ano do contrato, também na opção |
tipo |
str | "futuro" ou "opcao" |
posicoes_abertas |
int | Número de posicoes em aberto (contratos) |
variacao_posicoes |
int | Variacao vs dia anterior |
unidade |
str | Unidade de cotação do contrato (BRL/@, BRL/sc60kg, USD/sc60kg, etc.); posicoes_abertas e variacao_posicoes são em número de contratos |
O endpoint
arquivos.b3.com.brlimita a 2 requisições por 10s, com penalidade progressiva. Cada chamada consome 2 requisições (token + download); o agrobr espaca automaticamente (1 req/5s).Janela de disponibilidade: a B3 mantém alguns dias recentes, não apenas o dia corrente, sem garantir um arquivo histórico completo. HTTP 400/404 na solicitação do token indica arquivo não publicado e retorna vazio após validação da data. No download, HTTP 404 retorna vazio, mas HTTP 400 levanta
SourceUnavailableError. As operações token/download são serializadas no processo; o histórico consulta os dias sequencialmente. Se outra consulta das posições em aberto não solta a vez porAGROBR_HTTP_TIMEOUT_READsegundos (padrão 30), por exemplo uma tarefa do loop parado peloagrobr.sync, a que espera levantaResourceLimitError(nãoSourceUnavailableError: não é pregão indisponível); repita a consulta ou serialize as chamadas, e dentro de um loop prefira oawait. Para posicionamento semanal histórico, usecftc.cot().
b3.posicoes_abertas_historico()¶
Série histórica de posições em aberto. Itera sobre dias úteis no período e concatena os arquivos disponíveis na janela recente da fonte. Dias sem arquivo são ignorados conforme a distinção entre token e download acima; demais falhas são propagadas. Sem linhas, o DataFrame sai vazio com os dtypes do contrato posicoes_abertas, como em b3.posicoes_abertas().
from datetime import date
import agrobr
df = await agrobr.b3.posicoes_abertas_historico(
contrato="boi",
inicio=date(2025, 12, 15),
fim=date(2025, 12, 19),
tipo="futuro",
)
Parametros¶
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
contrato |
str |
Sim | Slug (boi, milho, cafe_arabica, cafe_conillon, etanol, soja_cross) ou ticker (BGI, CCM, ICF, CNL, ETH, SJC) |
inicio |
str \| date |
Sim | Data inicial: date, datetime ou texto AAAA-MM-DD ou DD/MM/AAAA |
fim |
str \| date |
Sim | Data final, no mesmo formato; inicio depois de fim levanta InvalidParameterError |
vencimento |
str |
Nao | Código do mês do contrato (ex.: "F26"), que traz o futuro e as opções daquele mês, ou código publicado de uma opção (ex.: "FVI1"); outro formato levanta InvalidParameterError antes da rede |
tipo |
str |
Nao | "futuro" ou "opcao"; outro valor levanta InvalidParameterError. Se None, todos |
as_polars |
bool |
Nao | Se True, retorna polars.DataFrame |
return_meta |
bool |
Nao | Se True, retorna (DataFrame, MetaInfo) |
Colunas de Retorno¶
Mesmas colunas de b3.posicoes_abertas(), concatenadas para todas as datas do periodo.
Uso Síncrono¶
from agrobr import sync
df = sync.b3.ajustes(data="13/02/2025")
df = sync.b3.historico(contrato="boi", inicio="2025-02-10", fim="2025-02-14")
df = sync.b3.posicoes_abertas(data="2025-12-19", contrato="boi")
df = sync.b3.posicoes_abertas_historico(contrato="boi", inicio="2025-12-15", fim="2025-12-19")
print(sync.b3.contratos())
Fonte dos Dados¶
- Provedor: B3 — Brasil, Bolsa, Balcao
- URL Ajustes: b3.com.br/pesquisapregao/download (BVBG-086 ZIP/XML)
- URL OI: arquivos.b3.com.br
- Atualização: Diaria (após fechamento do pregao)
Classificação:
zona_cinza. A dispensa D-1 da FAQ e os termos do website têm alcances distintos; confira canal, uso e vigência da política em Licenças.