Opções sobre futuros usam um contrato futuro como ativo base e têm rotas próprias na brapi. BGI, ICF, CCM e SJC não funcionam nos endpoints de opções sobre ações.
O caminho começa no ativo base: descubra o vencimento, abra a cadeia e só então escolha uma série para histórico ou analytics.
Qual endpoint usar
| Pergunta | Endpoint |
|---|---|
| Quais vencimentos existem? | /api/v2/futures/options/expirations |
| Quais strikes existem? | /api/v2/futures/options/strikes |
| Quais calls e puts formam a cadeia? | /api/v2/futures/options/chain |
| Como uma série negociou no tempo? | /api/v2/futures/options/historical |
| Quais são as gregas e a IV do vencimento? | /api/v2/futures/options/analytics |
| Como as gregas mudaram numa série? | /api/v2/futures/options/analytics/history |
A documentação de opções sobre futuros contém os schemas e parâmetros atuais.
Descobrir o vencimento
O parâmetro underlying recebe o código do ativo base, como BGI. Símbolo
completo de contrato não vale nessa primeira chamada.
curl "https://brapi.dev/api/v2/futures/options/expirations?underlying=BGI"A resposta devolve underlying e a lista expirations, com datas em
YYYY-MM-DD. Repare que o vencimento da opção pode não coincidir com o do
futuro. Deduzir um a partir do outro dá errado; consulte o calendário.
O endpoint de strikes precisa de underlying e expirationDate, e o filtro
side aceita call ou put.
curl "https://brapi.dev/api/v2/futures/options/strikes?underlying=BGI&expirationDate=DATA_ENCONTRADA&side=call"Substitua DATA_ENCONTRADA por uma data retornada em expirations.
Abrir a cadeia sem fixar uma data
Este exemplo descobre o primeiro vencimento e abre a cadeia, sem nenhuma data fixa que vá vencer.
import requests
base = "https://brapi.dev/api/v2/futures/options"
expiration_response = requests.get(
f"{base}/expirations",
params={"underlying": "BGI"},
timeout=30,
)
expiration_response.raise_for_status()
expiration = expiration_response.json()["expirations"][0]
chain_response = requests.get(
f"{base}/chain",
params={
"underlying": "BGI",
"expirationDate": expiration,
"side": "call",
},
timeout=30,
)
chain_response.raise_for_status()
series = chain_response.json()["series"]Em produção, pegar sempre o primeiro item é arriscado: às vezes ele vence na semana seguinte. Defina uma regra que descarte vencimentos curtos demais para o seu caso.
A cadeia aceita date, side, minStrike e maxStrike. Limitar strikes
encolhe a resposta e evita processar séries muito longe do preço base.
Ler preço, estilo e multiplicador
Cada série informa symbol, tipo, estilo, strike, vencimento, multiplicador e
lote. A cotação vem com OHLC, preço de referência, variação, negócios e volume.
optionType vale call ou put. optionStyle indica exercício americano ou
europeu, e vale a pena ler esse campo mesmo quando você acha que já sabe: o
estilo não segue o ativo de forma previsível.
contractMultiplier vem da especificação do futuro e é o que converte o preço
da opção em valor financeiro do contrato.
Séries distantes do preço base costumam não negociar no dia. Aí close vem
nulo enquanto referencePrice continua preenchido.
Preço de referência não é negócio
Verifique a fonte do preço antes de medir liquidez ou simular execução. Um valor de referência não prova que alguém negociou naquele nível.
Consultar histórico de uma série
Depois de escolher o symbol, use /api/v2/futures/options/historical. Uma
série por chamada, com intervalo de datas e ordem.
symbol = series[0]["symbol"]
history_response = requests.get(
f"{base}/historical",
params={
"symbol": symbol,
"startDate": "2026-06-01",
"endDate": "2026-07-31",
"sortOrder": "asc",
},
timeout=30,
)
history_response.raise_for_status()
option = history_response.json()["option"]
history = option.get("history", [])Uma série ilíquida vem com poucos pontos e o gráfico fica esburacado. Repetir o último fechamento conserta a aparência e mente sobre a liquidez. Se você fizer isso, marque os valores como estimados.
Ler gregas e volatilidade implícita
/api/v2/futures/options/analytics recebe ativo base e vencimento, mais os
mesmos filtros de lado e strike, date e limit.
analytics_response = requests.get(
f"{base}/analytics",
params={
"underlying": "BGI",
"expirationDate": expiration,
"side": "call",
"limit": 50,
},
timeout=30,
)
analytics_response.raise_for_status()
analytics = analytics_response.json()["analytics"]Cada item pode trazer volatilidade implícita, delta, gamma, theta, vega e rho.
Leia junto model, priceSource, confidence e nullReason.
Opções europeias usam Black-76. Americanas usam uma aproximação binomial sobre o futuro, porque o exercício antecipado muda o valor do contrato e Black-76 não dá conta disso.
Sem uma entrada válida, as métricas vêm nulas e nullReason diz por quê. Um
delta nulo virando zero passa despercebido e estraga qualquer soma de exposição.
Quando o cálculo usa referencePrice no lugar de fechamento negociado,
priceSource registra a escolha. Olhe a confiança antes de comparar duas
séries.
Acompanhar analytics no tempo
/api/v2/futures/options/analytics/history recebe symbol, datas e ordem, e
devolve o histórico de analytics dentro da chave option.
Compare pontos da mesma série. Trocar vencimento, strike ou estilo troca o contrato, e o gráfico desenha uma linha contínua como se nada tivesse mudado.
Todas essas rotas usam dados de fim de pregão. Servem para pesquisa, painéis e controle de risco, não para uma tela de negociação intradiária.
Abra a referência de analytics e execute a
sequência com underlying=BGI.
