QuantLib + Python:Macro TARGET() e calendário padrão (RuntimeError:opção expirou)
-
13-12-2019 - |
Pergunta
Estou usando o Quantlib para realizar cálculos em dados históricos.
Depois de configurar a estrutura necessária (curvas, etc.), quando eu ligo option.ImpliedVolatility()
Recebo a seguinte exceção (para opções que expiraram):
File "/usr/local/lib/python2.6/dist-packages/QuantLib/QuantLib.py", line 3683, in impliedVolatility
def impliedVolatility(self, *args): return _QuantLib.VanillaOption_impliedVolatility(self, *args)
RuntimeError: option expired
Um trecho das linhas de código para configurar as curvas necessárias, etc., é mostrado abaixo:
dividend_yield = YieldTermStructureHandle(FlatForward(0, TARGET(), div_yield, Actual365Fixed()))
risk_free_rate = YieldTermStructureHandle(FlatForward(0, TARGET(), rf_rate, Actual365Fixed()))
volatility = BlackVolTermStructureHandle(BlackConstantVol(0, TARGET(), annualized_histvol, Actual360()))
EU FORTEMENTE suspeitar que o TARGET()
a macro usada tem como padrão a data atual do sistema.
Como posso configurar a biblioteca para usar uma data histórica específica?
Solução
A data de avaliação é definida executando, digamos,
Settings.instance().evaluationDate = Date(14,March,2010)
antes dos cálculos.Se não for definido, o padrão será a data atual, conforme você suspeitava.
O calendário do TARGET apenas informa à curva quais dias são feriados, mas não tem efeito na data de avaliação em si.