CPM
O CPM é o contrato de opção digital da B3 relacionado às decisões do COPOM. Ele é exposto como um produto independente na raiz da API:
O resultado contém os contratos negociados, a reunião correspondente, a data de expiração, a variação do strike em pontos-base e o preço de ajuste de referência da B3.
Busca os contratos CPM negociados em uma data.
Fonte: B3. A lista de contratos vem do boletim de preços (SPR) e o preço de ajuste vem do "Preço de Referência" do boletim de derivativos consolidados, o mesmo exibido no painel "Probabilidades da Taxa Selic Meta" da B3. As datas da reunião e de expiração vêm do calendário do COPOM.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de negociação. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars ordenado por |
DataFrame
|
|
DataFrame
|
se não houver contratos CPM na data. |
Output Columns
- data_referencia (Date): data de negociação.
- codigo_negociacao (String): código do contrato (ex.:
CPMZ25C099500). - data_fim_reuniao (Date): último dia da reunião do COPOM.
- data_expiracao (Date): primeiro dia útil após
data_fim_reuniao, data de liquidação do contrato. - tipo_opcao (String):
"call"ou"put". - variacao_strike_bps (Int32): variação da Selic Meta, em pontos-base, associada ao strike.
- preco_ajuste (Float64): Preço de Referência da B3, em pontos (0–100).
- dias_uteis (Int32): dias úteis de
data_referenciaatédata_expiracao.
Notes
A B3 só publica o Preço de Referência de datas recentes (cerca de um
mês). Para datas mais antigas, preco_ajuste é nulo.
Examples:
Source code in pyield/cpm/_contratos.py
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | |
Probabilidades implícitas
As probabilidades derivadas dos preços dos contratos ficam em
yd.cpm.probabilidades:
import polars as pl
todas = yd.cpm.probabilidades("29-01-2025")
proxima = todas.filter(pl.col("ranking_reuniao") == 1)
Calcula as probabilidades implícitas das reuniões do COPOM.
Fonte: B3, a partir dos preços dos contratos CPM (yd.cpm.contratos),
descontados pela curva de DI1. Inclui todas as reuniões com contratos
negociados na data. Somente strikes com preco_ajuste não nulo são
incluídos; reuniões em que todos os strikes têm preço nulo são excluídas.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de negociação. |
required |
tipo_opcao
|
Literal['call', 'put']
|
Tipo de opção, |
'call'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars ordenado por |
DataFrame
|
|
DataFrame
|
se não houver dados. |
Output Columns
- data_referencia (Date): data de negociação.
- data_fim_reuniao (Date): último dia da reunião do COPOM.
- data_expiracao (Date): data de expiração do contrato CPM.
- ranking_reuniao (Int32): 1 para a reunião mais próxima com preços, 2 para a seguinte, e assim por diante.
- variacao_strike_bps (Int32): variação do strike em pontos-base, crescente dentro de cada reunião.
- dias_uteis (Int32): dias úteis até a expiração.
- preco_ajuste (Float64): Preço de Referência da B3 em pontos (0–100).
- taxa_di1 (Float64): taxa DI1 interpolada até a expiração.
- fator_desconto (Float64): fator aplicado na inversão da fórmula da
B3,
exp(dias_uteis / 252 * ln(1 + taxa_di1)). - prob_bruta (Float64): probabilidade antes da normalização,
preco_ajuste * fator_desconto / 100. - prob (Float64): probabilidade normalizada,
prob_bruta / soma(prob_bruta)pordata_expiracao, com soma 1,0 por reunião. - prob_acumulada (Float64): probabilidade acumulada em ordem crescente de strike.
Notes
Para uma única reunião, filtre o resultado, por exemplo
df.filter(pl.col("ranking_reuniao") == 1) para a mais próxima.
Examples:
>>> df = yd.cpm.probabilidades("29-01-2025")
>>> proxima = df.filter(pl.col("ranking_reuniao") == 1)
Source code in pyield/cpm/_probabilidades.py
Migração
Na versão atual, use:
em vez de yd.cpm.data, yd.cpm.probabilidades.all_meetings,
yd.cpm.probabilidades.meeting e dos caminhos antigos yd.selic.cpm e
yd.selic.probabilities.