You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:15:01