Pular para conteúdo

NTN-B Principal

dv01(settlement, maturity, rate, face_value)

Calcula o DV01 (Dollar Value of 01) da NTN-B Principal em R$.

Representa a variação de preço para um aumento de 1 bp (0,01%) na taxa.

Parameters:

Name Type Description Default
settlement DateLike

Data de liquidação.

required
maturity DateLike

Data de vencimento.

required
rate float

Taxa de desconto (YTM) do título.

required
face_value float

Valor nominal atualizado (VNA).

required

Returns:

Name Type Description
float float

DV01 (Dollar Value of 01), variação de preço para 1 bp.

Examples:

>>> from pyield import ntnbprinc as bp
>>> bp.dv01("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
1.1200559999997495
Source code in pyield/tn/ntnbprinc.py
def dv01(
    settlement: DateLike,
    maturity: DateLike,
    rate: float,
    face_value: float,
) -> float:
    """
    Calcula o DV01 (Dollar Value of 01) da NTN-B Principal em R$.

    Representa a variação de preço para um aumento de 1 bp (0,01%) na taxa.

    Args:
        settlement (DateLike): Data de liquidação.
        maturity (DateLike): Data de vencimento.
        rate (float): Taxa de desconto (YTM) do título.
        face_value (float): Valor nominal atualizado (VNA).

    Returns:
        float: DV01 (Dollar Value of 01), variação de preço para 1 bp.

    Examples:
        >>> from pyield import ntnbprinc as bp
        >>> bp.dv01("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
        1.1200559999997495
    """
    if any_is_empty(settlement, maturity, rate, face_value):
        return float("nan")

    preco_1 = price(settlement, maturity, rate, face_value)
    preco_2 = price(settlement, maturity, rate + 0.0001, face_value)
    return preco_1 - preco_2

price(settlement, maturity, rate, face_value)

Calcula o preço (PU) da NTN-B Principal pelas regras do Tesouro Nacional.

Parameters:

Name Type Description Default
settlement DateLike

Data de liquidação.

required
maturity DateLike

Data de vencimento.

required
rate float

Taxa de desconto (YTM) do título.

required
face_value float

Valor nominal atualizado (VNA).

required

Returns:

Name Type Description
float float

Preço (PU) da NTN-B Principal conforme as regras do Tesouro Nacional.

References
  • https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf

Examples:

>>> from pyield import ntnbprinc
>>> ntnbprinc.price("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
3537.763157
Source code in pyield/tn/ntnbprinc.py
def price(
    settlement: DateLike,
    maturity: DateLike,
    rate: float,
    face_value: float,
) -> float:
    """
    Calcula o preço (PU) da NTN-B Principal pelas regras do Tesouro Nacional.

    Args:
        settlement (DateLike): Data de liquidação.
        maturity (DateLike): Data de vencimento.
        rate (float): Taxa de desconto (YTM) do título.
        face_value (float): Valor nominal atualizado (VNA).

    Returns:
        float: Preço (PU) da NTN-B Principal conforme as regras do Tesouro Nacional.

    References:
        - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf

    Examples:
        >>> from pyield import ntnbprinc
        >>> ntnbprinc.price("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
        3537.763157
    """
    if any_is_empty(settlement, maturity, rate, face_value):
        return float("nan")

    # Calcula dias úteis entre liquidação e vencimento
    dias_uteis = bday.count(settlement, maturity)

    # Calcula anos úteis truncados conforme ANBIMA
    anos_uteis = utils.truncate(dias_uteis / 252, 14)

    fator_desconto = (1 + rate) ** anos_uteis

    # Trunca o preço em 6 casas conforme ANBIMA
    return utils.truncate(face_value / fator_desconto, 6)