2 votos

Quantlib: AmericanOption implica volatilidad / root no está entre corchetes

Cuando aplico la función de volatilidad implícita de la opción americana en el siguiente formato:

  impliedvol_test_v1$IV <- NA
  impliedvol_test_v1$`risk free rate` <- as.numeric(impliedvol_test_v1$`risk 
  free rate`)

  for(iRow in seq(1,nrow(impliedvol_test_v1),1)){

  typeTMP <- impliedvol_test_v1$type[iRow]  
  valueTMP <- impliedvol_test_v1$value[iRow]
  strikeTMP <- impliedvol_test_v1$strike[iRow]
  underlyingTMP <- impliedvol_test_v1$underlying[iRow]
  dividendyieldTMP <- impliedvol_test_v1$`Dividend yield`[iRow]
  riskfreerateTMP <- impliedvol_test_v1$`risk free rate`[iRow]
  maturityTMP <- impliedvol_test_v1$maturity[iRow]
  volatilityTMP <- impliedvol_test_v1$volatility[iRow]

  impliedvol_test_v1$IV[iRow] <- AmericanOptionImpliedVolatility(typeTMP, 
  valueTMP,strikeTMP, underlyingTMP, dividendyieldTMP, riskfreerateTMP, 
  maturityTMP, volatilityTMP)

  }

Recibo el siguiente error: Error en americanOptionImpliedVolatilityEngine(type, value, underlying, :

/ / /QuantLib-1.6.2/ql/math/solver1d. hpp:202: En la función `QuantLib::Real QuantLib::Solver1D::solve(const F&, QuantLib::Real, QuantLib::Real, QuantLib::Real, QuantLib::Real) const [con F = QuantLib::{anónimo}::PriceError; Impl = QuantLib::Brent; QuantLib::Real = doble]': root no entre corchetes: f[1e-007,4] -> [2.230734e+000,2.306800e+001]

Lo cual es raro ya que recibo los valores IV cuando los conecto manualmente.

El conjunto de datos parece:

enter image description here

Cuando introduzco los valores manualmente, recibo los valores de cada fila.

¡Gracias por tu ayuda! Ben

0 votos

Hay un foro específico de quantlib donde creo que sería mejor hacer esta pregunta?

1voto

BigCanOfTuna Puntos 210

¿Podría mostrar la llamada exacta que utiliza cuando "los enchufa manualmente"?

De todos modos, ¿se puede anular el intervalo de horquillado en RQuantLib con un rango más estrecho, por ejemplo del 1% al 100%?

library("NMOF")
vanillaOptionImpliedVol("american", price = 3.7,
                        S = 37.39, X = 35,
                        tau = .1698, q = 0.0654, r = 0.17, 
                        uniroot.control = list(interval = c(0.01, 1)))
## [1] 0.3172167

vanillaOptionAmerican(S = 37.39, X = 35,
                      tau = .1698, q = 0.0654, r = 0.17, 
                      v = .3173^2)$value
## [1] 3.700333

0 votos

Por ejemplo, recibo valores sólo para las dos primeras filas utilizando mis entradas como arriba. Para la fila siguiente, he utilizado de nuevo la misma función americanptionimpliedvolatility y me ha dado un valor para el IV. ¿Qué es lo que parece estar mal aquí? y ¿cómo puedo ajustarlo?

0 votos

¿Qué filas funcionan y cuáles no?

0 votos

Compruebe el orden de los argumentos en su llamada a la función: debe ser subyacente, luego huelga. Parece que los tienes al revés. (Nombrar los argumentos es una buena idea).

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X