如何调整R语言中期权链数据框的显示格式?
调整期权链数据展示格式:合并认购/认沽期权表
当前使用quantmod和pedquant包获取期权链数据,代码输出的认购(Call)、认沽(Put)期权数据是分开的两个数据框,各自包含Option Strike、对应价格及成交量列。需要调整格式,将两表合并,删除重复的Option Strike列,实现统一结构展示。
修改后的代码
library(quantmod) library(pedquant) option_chain <- function(ticker, exp){ view_window <- function(dfr, var, x, pm){ idx <- which(abs(dfr[, var]-x) == min(abs(dfr[, var] - x))) return(dfr[(idx - pm) : (idx + pm), ]) } # 获取期权链原始数据 options <- getOptionChain(ticker, exp) call_filter <- options$calls[, c("Strike", "Last", "Vol")] put_filter <- options$puts[, c("Strike", "Last", "Vol")] # 获取标的实时股价 ticker_price <- md_stock(ticker, type = "real") price <- ticker_price$close # 筛选行权价附近的期权数据 call <- view_window(dfr = call_filter, var = "Strike", x = price, pm = 5) put <- view_window(dfr = put_filter, var = "Strike", x = price, pm = 5) # 重命名列名 colnames(call) <- c('Option Strike', "Call Price", "Call Volume") colnames(put) <- c('Option Strike', "Put Price", "Put Volume") # 合并认购/认沽表:基于行权价匹配,保留所有行 merged_options <- merge(call, put, by = "Option Strike", all = TRUE) # 打印股票信息及合并后的期权数据 cat("股票代码:", ticker_price$symbol, "\n") cat("数据时间:", ticker_price$time, "\n") cat("当前股价:", price, "\n\n") print(merged_options) } # 调用示例 ticker <- "BABA" exp <- "2023-06-30" option_chain(ticker, exp)
关键修改说明
- 使用
merge()函数将两表按Option Strike列合并,all = TRUE确保所有行权价都被保留(即使某一行权价只有认购或认沽期权数据) - 改用
cat()输出股票基础信息,相比print()格式更规整易读 - 最终输出合并后的单一数据框,包含
Option Strike、Call Price、Call Volume、Put Price、Put Volume列,结构统一
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

