Amostragem de fatores de desconto em curva interpolada
Resumo
O documento mostra como obter fatores de desconto em datas entre os vencimentos cotados usados para construir uma curva de desconto QuantLib. Depois de construir uma curva de desconto log-linear por trechos a partir de taxas de swap, o exemplo gera uma sequência de datas futuras e chama o método de desconto da curva para cada uma. Os valores resultantes formam uma amostra da curva em intervalos regulares, que pode ser exibida junto das datas.
O código de exemplo coleta amostras em intervalos de cinco anos, embora a pergunta solicite intervalos de seis meses; a mesma abordagem serve ao escolher datas separadas por seis meses. Uma segunda resposta esclarece o ponto central: a curva pode retornar um fator de desconto para qualquer data solicitada, então não é necessário limitar os resultados aos nós originais da curva. O exemplo usa dados sintéticos de swaps em coroas suecas e habilita a extrapolação além do último prazo de entrada. Portanto, o resultado ilustra o uso da API, não evidências de mercado, e os valores extrapolados dependem das premissas e da configuração da curva.
Ideias principais
- Uma curva de desconto construída pode retornar fatores de desconto para datas entre os nós de vencimento usados como entrada.
- Escolha o intervalo desejado entre datas e consulte a curva uma vez para cada data.
- O exemplo coleta amostras em intervalos de cinco anos; para intervalos de seis meses, basta alterar o incremento das datas.
- Fatores de desconto além do último nó da curva podem depender das configurações de extrapolação e devem ser interpretados com isso em mente.
Tags
Texto completo
# QuantLib Python - Discount Factor Interpolation within curve nodes
# QuantLib Python - Discount Factor Interpolation within curve nodes
Generated a discount curve, dCurve.PiecewiseLogLinearDiscount() using input par rate for terms (.5Y, 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 15Y, 20Y, 30Y) and output discount curve matching the input term structure. Any suggestions on how to output the discount factor curve on a .5Y interval term structure up to 30Y?
## Answer by Xiarpedia (score 1)
https://quant.stackexchange.com/a/77563
Based on your question I created the following curve example:
```
import QuantLib as ql
import pandas as pd
# Set the evaluation date
ql.Settings.instance().evaluationDate = ql.Date(30, 12, 2022)
# Declare a store variable for the helpers
helpers = []
# Create the attributes of the swap
calendar = ql.Sweden()
frequency = ql.Annual
convention = ql.ModifiedFollowing
# Synthetic market data
daycount = ql.Thirty360(ql.Thirty360.BondBasis)
index = ql.IborIndex(
"MyIndex",
ql.Period("3M"),
2,
ql.SEKCurrency(),
calendar,
ql.Following,
False,
daycount,
)
tenor = ["4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "25Y", "30Y"]
quotes = [
3.33,
3.2775,
3.235,
3.205,
3.1775,
3.1525,
3.1325,
3.095,
3.0275,
2.92,
2.815,
2.6925,
]
for r, m in zip(quotes, tenor):
rate = ql.QuoteHandle(ql.SimpleQuote(r / 100.0))
tenor = ql.Period(m)
helpers.append(
ql.SwapRateHelper(
rate, tenor, calendar, frequency, convention, daycount, index
)
)
curve = ql.PiecewiseLogLinearDiscount(0, calendar, helpers, ql.Actual365Fixed())
curve.enableExtrapolation()
dates, rates = zip(*curve.nodes())
```
Which leaves me at the stage you are at. We can then interpolate on a 5 year interval as following:
```
# Interpolate on a 5Y interval
nodes = []
start_date = ql.Date(30, 12, 2022)
while True:
start_date += ql.Period("5Y")
nodes.append(start_date)
if start_date > ql.Date(30, 12, 2053):
break
discount_factors = [curve.discount(d) for d in nodes]
display(pd.DataFrame(dict({"Date": nodes, "Discount Factor": discount_factors})))
```
Which results in:
| | Date | Discount Factor |
| 0 | December 30th, 2027 | 0.851205 |
| 1 | December 30th, 2032 | 0.735589 |
| 2 | December 30th, 2037 | 0.641855 |
| 3 | December 30th, 2042 | 0.567462 |
| 4 | December 30th, 2047 | 0.508218 |
| 5 | December 30th, 2052 | 0.464726 |
| 6 | December 30th, 2057 | 0.424997 |
## Answer by Luigi Ballabio (score 0)
https://quant.stackexchange.com/a/77564
You can pass any date you like to the `discount` method of the curve you built. It will return the corresponding discount factor.Exibido na íntegra, com atribuição conforme a licença da fonte. Licença: CC BY-SA 4.0 (Stack Exchange)
Este resumo foi escrito pelo agente de pesquisa da Stratmill com base no original; não é uma cópia da fonte.