0

我需要使用 R 的 QuantLib 包计算金融期权的隐含波动率。我在使用函数“EuropeanOptionImpliedVolatility”的迭代时遇到问题,因为它的输出是一个对象(称为 ImpliedVolatility)。

largo = nrow(call26) #number of rows in my data set
impl_vol= vector("list",largo)
for(i in largo){
  impl_vol[[i]] = EuropeanOptionImpliedVolatility(type="call", value=valor_opcion[i],
      underlying=st[i], strike=strike[i], dividendYield=dividendo[i], 
      riskFreeRate=rf[i], maturity=maturity[i], volatility=0.4)
}

结果是:

list(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL, structure(list(impliedVol = 0.173643438965225, 
        parameters = structure(list(type = "call", value = 52.95, 
            underlying = 1497.66, strike = 1680, dividendYield = 0.01, 
            riskFreeRate = 0.04, maturity = 0.983561644, volatility = 0.4), .Names = c("type", 
        "value", "underlying", "strike", "dividendYield", "riskFreeRate", 
        "maturity", "volatility"))), .Names = c("impliedVol", 
    "parameters"), class = c("EuropeanOptionImpliedVolatility", 
    "ImpliedVolatility")))

而且我需要隐含的波动率......如果我计算一个单一的金融期权,我可以使用它

valor$impliedVol

我能做些什么?谢谢!

4

2 回答 2

0

您的循环中有错误,而不是:

for(i in largo){

它的 :

for(i in 1:largo){

由于此错误,仅195计算最后一个元素(索引)的隐含波动率(正如您在发布的输出结构中清楚地看到的那样,第一个194列表槽是NULL,最后一个有一个值)。

一旦你修正了那个错字,就可以访问这个值:

impl_vol[[i]]$impliedVol
于 2014-05-18T21:02:27.200 回答
0

快速的:

  • 您不能存储复合对象(例如EuropeanOptionImpliedVolatility()在向量中返回的对象。

  • 您可以将它们存储在列表中

  • 如果您知道维度,则可以将它们填充到矩阵中。

  • 否则,您可以增长 data.frame 对象(效率不高)

如果您想要的只是隐含波动率,请将其提取并存储在向量中。RQuantLib 包包含几乎所有用途的示例。

于 2014-05-18T21:02:33.773 回答