编写带条件分支的R函数,获取期权Delta及Gamma值的技术问题
基于optionstrat包扩展期权Delta与Gamma计算函数
需要编写R函数,根据option_type参数选择计算看涨/看跌期权的Delta和Gamma值:
- 当
option_type为"c"时,计算看涨期权的Delta(调用calldelta)和Gamma(从calleval结果中提取) - 当
option_type不为"c"时,计算看跌期权的Delta(调用putdelta)和Gamma(从puteval结果中提取)
修改后的函数代码
library(optionstrat) # 定义全局固定参数(也可改为函数参数增强灵活性) x <- 10 # 执行价 sigma <- 0.25 # 波动率 t <- 0.25 # 到期时间(年) r <- 0.05 # 无风险利率 stock_option_greeks <- function(option_type, s) { # 注意用==做相等判断,而非赋值符= if (option_type == "c") { delta_val <- calldelta(s, x, sigma, t, r) gamma_val <- calleval(s, x, sigma, t, r)$Gamma } else { delta_val <- putdelta(s, x, sigma, t, r) gamma_val <- puteval(s, x, sigma, t, r)$Gamma } # 用列表返回多个结果,便于调用后提取 return(list(Delta = delta_val, Gamma = gamma_val)) }
函数调用示例
# 获取股价为10时的看涨期权Delta和Gamma call_greeks <- stock_option_greeks("c", 10) call_greeks$Delta # 查看Delta值 call_greeks$Gamma # 查看Gamma值 # 获取股价为10时的看跌期权Delta和Gamma put_greeks <- stock_option_greeks("p", 10) put_greeks$Delta put_greeks$Gamma
关键优化说明
- 修正判断逻辑:将原代码中的赋值符
=改为相等判断符==,这是之前代码出现警告的核心原因之一 - 多结果返回:用列表封装Delta和Gamma,支持一次性获取两个期权希腊值
- 灵活扩展方案:若想避免依赖全局变量,可将
x、sigma、t、r改为函数参数,示例如下:
stock_option_greeks <- function(option_type, s, x, sigma, t, r) { if (option_type == "c") { delta_val <- calldelta(s, x, sigma, t, r) gamma_val <- calleval(s, x, sigma, t, r)$Gamma } else { delta_val <- putdelta(s, x, sigma, t, r) gamma_val <- puteval(s, x, sigma, t, r)$Gamma } return(list(Delta = delta_val, Gamma = gamma_val)) } # 调用示例:传入所有参数 call_greeks <- stock_option_greeks("c", s=10, x=10, sigma=0.25, t=0.25, r=0.05)
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

