Как построить график выплат по опционам R

#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")
  

LOL Не смейтесь, ребята!!
введите описание изображения здесь

Я бы хотел, чтобы график выглядел примерно так. Очевидно, я не ожидаю, что кто-либо из вас сделает это за меня, но если бы вы могли снабдить меня нужными инструментами и функциями, о которых я, возможно, не слышал, я был бы вечно благодарен. введите описание изображения здесь

Комментарии:

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')
  

Разворот бабочки