2016-05-06 7 views
0

Так что я использую функцию AmericanOption от RQuantLib. Он отлично работает, если вход одиночные номера, например:RQuantLib: Применить опцию к списку данных

AmericanOption(type = 'call', underlying = 73.59, strike = 74, dividendYield 
= 0, riskFreeRate = 0.006, maturity = 0.25, volatility= 0.2, timeSteps = 
150, gridPoints = 149, engine="CrankNicolson") 

Однако, поскольку у меня есть данные временных рядов, содержащих ежедневные данные одного и того же варианта с течением времени, например:

Time  underlying strike ... 
10-01  73   74 
10-02  74   74 
10-03  75   74 
... 

очевидно, тогда я хочу применить функцию оценки к каждой отдельной точке данных и вывести результат как новый кадр данных, содержащий результаты за каждый день.

И поскольку у меня уже есть базовые и забастовочные цены в качестве списков данных, то, что я сделал, это создание последовательности 0 для дивидендов («дивиденд»), последовательности 0,006 для безрисковой («без риска») и зрелости разложения как:

end <- 21/252 
interval <- 1/252 
opmaturity <- seq(0.25, end, by=-interval) 

(от 3 месяцев до погашения до 1 месяца до погашения)

Так, конечно, я не могу просто сделать следующее:

AmericanOption(type = 'call', underlying = RR$Stock, strike = 
RR$Strike.Price, dividendYield = dividend, riskFreeRate = riskfree, maturity 
= ematurity, volatility= vol, timeSteps = 150, gridPoints = 149, 
engine="CrankNicolson") 

, потому что функция ожидает одно значение.

Итак, как мне сделать это правильно, чтобы сообщить функции ввести данные временного ряда?

Благодаря

ответ

0

Достаточно использовать функцию mapply, как следовать

mapply(AmericanOption, type = 'call', underlying = RR$Stock, strike = 
RR$Strike.Price, dividendYield = dividend, riskFreeRate = riskfree, maturity 
= ematurity, volatility= vol, timeSteps = 150, gridPoints = 149, 
engine="CrankNicolson")