#r #ggplot2
#r #ggplot2
Вопрос:
Я ничего не могу найти в Интернете относительно решения для создания графика выплаты опциона с промежуточными шагами для сложного заказа. В настоящее время я могу сделать это вручную, создав последовательность чисел, а затем построив график каждой отдельной точки.
Конечная цель — создать блестящее приложение, и в настоящее время это сильно замедляется, если приложением будут пользоваться разные люди. Есть ли какие-либо более быстрые решения? Кроме того, я хотел бы сделать график немного более интерактивным, а не статичным.
Вот код и график для бабочки с прогнозом на один день вперед PnL окончательный PnL.
library(derivmkts)
spot = 100
spot.sequence = seq(50, 150, .5) #create sequence to get price at each pont
body.strike = 100
itm.strike = 80
otm.strike = 120
vol = .2
Dte1 = 10
Dte.final = .01 #can not use 0 as i get an error from bscall()
butterfly.price.Dte1 = vector()
butterfly.price.Dte.final = vector()
for(i in 1:length(spot.sequence)){
body.price = bscall(spot.sequence[i], body.strike, vol, 0, Dte1/252, 0)*-2
itm.price = bscall(spot.sequence[i],itm.strike, vol,0, Dte1/252, 0)
otm.price = bscall(spot.sequence[i], otm.strike, vol, 0, Dte1/252, 0)
butterfly.price.Dte1[i] = body.price itm.price otm.price
}
for(i in 1:length(spot.sequence)){
body.price = bscall(spot.sequence[i], body.strike, vol, 0, Dte.final/252, 0)*-2
itm.price = bscall(spot.sequence[i],itm.strike, vol,0, Dte.final/252, 0)
otm.price = bscall(spot.sequence[i], otm.strike, vol, 0, Dte.final/252, 0)
butterfly.price.Dte.final[i] = body.price itm.price otm.price
}
plot(butterfly.price.Dte.final)
lines(butterfly.price.Dte1, col = "red")
Я бы хотел, чтобы график выглядел примерно так. Очевидно, я не ожидаю, что кто-либо из вас сделает это за меня, но если бы вы могли снабдить меня нужными инструментами и функциями, о которых я, возможно, не слышал, я был бы вечно благодарен.
Комментарии:
1. Похоже, у вас уже есть нужные данные, вам нужно только настроить график. Вы можете попробовать и посмотреть на plotly или ggplot
2. Сегодня утром он был помечен как «Highcharts». Сейчас этого нет. Рассматривали ли вы возможность использования Highcharter с Highcharts.js библиотека?
Ответ №1:
Не уверен, что это то, о чем вы спрашиваете, но несколько комментариев: Все функции ценообразования в derivmkts
векторизованы, поэтому вам не нужен цикл. И вы можете создать butterfly
функцию и использовать ее. Я не знаю о скорости относительно альтернатив. Я использую greeks
функцию в следующем, чтобы возвращались входные данные:
library(derivmkts)
library(ggplot2)
library(dplyr)
butterfly <- function(s, k1, k2, k3, v, r, tt, d) {
bscall(s, k1, v, r, tt, d) -
2*bscall(s, k2, v, r, tt, d)
bscall(s, k3, v, r, tt, d)
}
s0 <- 100
s <- seq(50, 150, by = 0.5)
itmk <- 80; atmk <- 100; otmk <- 120
v <- 0.2
d <- 0
r <- 0
tt <- c(0.0001, .04, .5, 1)
ttexp <- 0.0001
x <- expand.grid(s = s, tt = tt)
sl <- unlist(x$s)
ttl <- unlist(x$tt)
bf <- greeks(butterfly(sl, itmk, atmk, otmk, v, r, ttl, d ), complete = TRUE)
group_by(bf, tt) %>%
mutate(profit = butterfly(s, itmk, atmk, otmk, v, r, tt, d)) %>%
ggplot(aes(x = s, y = profit, color = as.factor(tt), group = tt))
geom_line() labs(color = 'Expiration')