пространство имен заблокировано для RQuantLib - PullRequest
0 голосов
/ 29 декабря 2018

Запуск этого на RStudio / Windows.Последняя строка завершается с ошибкой:

Ошибка в registerNames (имена, пакет, ". global ", добавить): пространство имен для пакета "RQuantLib" заблокировано;изменения в списке глобальных переменных не допускаются.

library(RQuantLib)

myStrike <- 1240
myPrice <- 1410

volVec <- c(0.1, 0.2, 0.3, 0.4, 0.5)
priceVec <- c(1500,1400,1300,1200,1100)
myType <- "put"
rfRate <- 0.02
maturity <- 360/360
vol <- 0.3


EO = EuropeanOption(type = myType,price = myPrice,strike = myStrike, dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,volatility = vol )
EOres = EuropeanOptionArrays(type = myType,price = priceVec,strike = myStrike, dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,volatility = volVec )
summary(EO)
plotOptionSurface(EOres)

1 Ответ

0 голосов
/ 10 января 2019

Спасибо, что задали этот вопрос, и приносим извинения за то, что пропустили его в течение нескольких дней.Оформить заявку на GitHub тоже было бы неплохо.

Код, который вы публикуете (и, возможно, цитируемый из моей старой документации ...), содержит ошибки.Второй аргумент для EuropeanOption() и EuropeanOptionArrays() теперь underlying, а не price.Таким образом, мы делаем это

library(RQuantLib)

myStrike <- 1240
myPrice <- 1410

volVec <- c(0.1, 0.2, 0.3, 0.4, 0.5)
priceVec <- c(1500,1400,1300,1200,1100)
myType <- "put"
rfRate <- 0.02
maturity <- 360/360
vol <- 0.3


EO <- EuropeanOption(type = myType, underlying = myPrice,strike = myStrike,
                     dividendYield = 0, riskFreeRate = rfRate, maturity = maturity,
                     volatility = vol )
EOres <- EuropeanOptionArrays(type = myType, underlying = priceVec,strike = myStrike, 
                              dividendYield = 0,riskFreeRate = rfRate, maturity = maturity,
                              volatility = volVec )
summary(EO)
plotOptionSurface(EOres)

Далее, в функции plotOptionSurface() нам нужно закомментировать вызов globalVariables(), он больше не может быть в теле функции.Так что сделайте это, например,

pos <- function(EOres, ylabel="", xlabel="", zlabel="", fov=60) {
    if (requireNamespace("rgl", quietly=TRUE)) {
        #utils::globalVariables(c("clear3d", "bg3d", "ligh3d", "rgl.viewpoint", "rgl.surface", "tgl.texts"))
        axis.col <- "black"
        text.col <- axis.col
        ylab <- ylabel
        xlab <- xlabel
        zlab <- zlabel
        y <- EOres

        ## clear scene:
        rgl::clear3d()
        rgl::clear3d(type="bbox")
        rgl::clear3d(type="lights")

        ## setup env:
        rgl::bg3d(color="#DDDDDD")
        rgl::light3d()

        rgl::rgl.viewpoint(fov=fov)

        x <- 1:nrow(y)
        z <- 1:ncol(y)
        x <- (x-min(x))/(max(x)-min(x))
        y <- (y-min(y))/(max(y)-min(y))
        z <- (z-min(z))/(max(z)-min(z))
        rgl::rgl.surface(x, z, y, alpha=0.6, lit=TRUE, color="blue")
        rgl::rgl.lines(c(0,1), c(0,0), c(0,0), col=axis.col)
        rgl::rgl.lines(c(0,0), c(0,1), c(0,0), col=axis.col)
        rgl::rgl.lines(c(0,0),c(0,0), c(0,1), col=axis.col)
        rgl::rgl.texts(1,0,0, xlab, adj=1, col=text.col)
        rgl::rgl.texts(0,1,0, ylab, adj=1, col=text.col)
        rgl::rgl.texts(0,0,1, zlab, adj=1, col=text.col)

        ## add grid (credit's to John Fox scatter3d)
        xgridind <- round(seq(1, nrow(y), length=25))
        zgridind <- round(seq(1, ncol(y), length=25))
        rgl::rgl.surface(x[xgridind], z[zgridind], y[xgridind,zgridind],
                         color="darkgray", alpha=0.5, lit=TRUE,
                         front="lines", back="lines")

        ## animate (credit to rgl.viewpoint() example)
        start <- proc.time()[3]
        while ((i <- 36*(proc.time()[3]-start)) < 360) {
            rgl::rgl.viewpoint(i,i/8);
        }
    } else {
        message("Please install the 'rgl' package before using this function.")
    }
}

Теперь мы можем вызвать элемент списка результатов, например,

pos(EOres[[1]])  # value

и то же самое для остальных.

...