Нахождение ближайшего страйка к текущей цене акций из цепочки опционов. - PullRequest
0 голосов
/ 05 января 2019

Цель состоит в том, чтобы найти ближайшую цену исполнения из цепочки опционов. Это насколько я получил.

library(quantmod)
tickers = c("AAPL", "MSFT", "GS")
price = getQuote(tickers)
chains = lapply(tickers, getOptionChain, exp = "2019-01-25")
calls = lapply(chains, function(x) x$calls)

##I was thinking to use a function such as

which.min(abs(calls - price))

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

1 Ответ

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

Чтобы получить соответствующие строки, мы можем использовать

Map(function(cl, p) cl[which.min(abs(p - cl$Strike)), ], calls, price$Last)
# [[1]]
#                     Strike Last  Chg  Bid  Ask   Vol   OI
# AAPL190104C00148000    148  0.3 0.21 0.24 0.42 43235 4344
#
# [[2]]
#                     Strike Last Chg  Bid  Ask  Vol   OI
# MSFT190104C00102000    102 0.04   0 0.02 0.09 6397 3250
#
# [[3]]
#                   Strike Last  Chg Bid  Ask  Vol  OI
# GS190104C00175000    175 0.25 0.13   0 0.25 2624 678

, где

price$Last
# [1] 148.26 101.93 175.05

В этом случае lapply - не лучший вариант, поскольку нам приходится работать с двумя объектами одновременно: price и calls. В этом случае mapply и Map выполняют работу, при этом Map совпадает с mapply с SIMPLIFY = FALSE.

Итак, мы переходим одновременно calls и price$Last и применяем

function(cl, p) cl[which.min(abs(p - cl$Strike)), ]
...