Извините, что беспокою вас, ребята, я довольно новичок в программировании, поэтому мне очень трудно понять большинство опубликованных решений в Интернете. Я попытался найти ответы на мою проблему, но, похоже, не смог найти ни одного.
У меня есть данные с подробностями опций. Он называется gcp5.
> str(gcp5)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 90 obs. of 10 variables:
$ Expiry Date : POSIXct, format: "2019-12-20" "2019-12-20" ...
$ Strike : num 1210 1215 1220 1225 1230 ...
$ Open Interest: num 34 87 50 52 115 17 99 62 907 36 ...
$ Underlying : num 1209 1209 1209 1209 1209 ...
$ CallOrPut : chr "c" "c" "c" "c" ...
$ Bid : num 43.2 44.1 41.9 40 34.8 36.1 31.4 29.6 27.9 28.4 ...
$ Ask : num 44.1 44.7 42.7 40.6 35.7 36.7 32.2 30.4 28.6 29 ...
$ value : num 1484 3863 2115 2096 4054 ...
$ time : num 0.205 0.205 0.205 0.205 0.205 ...
$ price : num 43.7 44.4 42.3 40.3 35.2 ...
Я хочу добавить новый столбец с именем vol. Я хочу использовать функцию GBSVolatility (под библиотекой fOptions), чтобы заполнить этот новый столбец. Я использовал команду, как показано ниже, и получил несколько странных сообщений об ошибках. Я не уверен, что не так.
gcp6 <- mutate(gcp5, vol = GBSVolatility(gcp5$price, gcp5$CallOrPut,
gcp5$Underlying, gcp5$Strike, gcp5$time, 0.03, 0))
#Error in uniroot(.fGBSVolatility, interval = c(-10, 10), price = price, :
#f() values at end points not of opposite sign
#In addition: Warning messages:
# 1: In if (is.na(f.lower)) stop("f.lower = f(lower) is NA") :
# the condition has length > 1 and only the first element will be used
#2: In if (is.na(f.upper)) stop("f.upper = f(upper) is NA") :
# the condition has length > 1 and only the first element will be used
Я понимаю, что у каждого есть свои обязанности в жизни, и им нужно время для их выполнения. Спасибо всем, кто потратил время, пытаясь помочь ответить на мой вопрос. Очень ценю вашу доброту в помощи.
Кроме того (подробности о первой и последней 5 строках данных):
> dput(head(gcp5))
structure(list(`Expiry Date` = structure(c(1576800000, 1576800000,
1576800000, 1576800000, 1576800000, 1576800000), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), Strike = c(1210, 1215, 1220, 1225,
1230, 1235), `Open Interest` = c(34, 87, 50, 52, 115, 17), Underlying = c(1209,
1209, 1209, 1209, 1209, 1209), CallOrPut = c("c", "c", "c", "c",
"c", "c"), Bid = c(43.2, 44.1, 41.9, 40, 34.8, 36.1), Ask = c(44.1,
44.7, 42.7, 40.6, 35.7, 36.7), value = c(1484.1, 3862.8, 2115,
2095.6, 4053.75, 618.8), time = c(0.205479452054795, 0.205479452054795,
0.205479452054795, 0.205479452054795, 0.205479452054795, 0.205479452054795
), price = c(43.65, 44.4, 42.3, 40.3, 35.25, 36.4)), row.names = c(NA,
6L), class = c("tbl_df", "tbl", "data.frame"))
> dput(tail(gcp5))
structure(list(`Expiry Date` = structure(c(1576800000, 1576800000,
1576800000, 1576800000, 1576800000, 1576800000), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), Strike = c(1180, 1185, 1190, 1195,
1200, 1205), `Open Interest` = c(48, 12, 119, 9, 0, 26), Underlying = c(1209,
1209, 1209, 1209, 1209, 1209), CallOrPut = c("p", "p", "p", "p",
"p", "p"), Bid = c(47.9, 59.4, 52.7, 64.3, 72, 69.4), Ask = c(52.4,
60.1, 56.3, 65.2, 73.5, 70.2), value = c(2407.2, 717, 6485.5,
582.75, 0, 1814.8), time = c(0.205479452054795, 0.205479452054795,
0.205479452054795, 0.205479452054795, 0.205479452054795, 0.205479452054795
), price = c(50.15, 59.75, 54.5, 64.75, 72.75, 69.8)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L))