set.seed(123)
S <- rnorm(100) * 50 + 100 # 标的资产价格
S <- abs(S)
K <- rnorm(100) * 50 + 100 # 行权价格
K <- abs(K)
T <- runif(100, 0.1, 5) # 到期时间
r <- runif(100, 0.01, 0.1) # 无风险利率
r <- abs(r)
sigma <- rnorm(100, 0.1, 0.1) # 波动率
d1 <- (log(S / K) + (r + sigma^2 / 2) * T) / (sigma * sqrt(T))
d2 <- d1 - sigma * sqrt(T)
C <- S * pnorm(d1) - K * exp(-r * T) * pnorm(d2) #pnorm函数用于计算标准正态分布的累积分布函数。
df <- data.frame(S, K, T, r, sigma, C)
步骤 2: 数据分割
将数据集分为特征(输入)和目标变量(输出),并进一步分为训练集和测试集。
# 分割数据
features <- df[, 1:5] # 特征
target <- df$C # 目标变量
# 分割训练集和测试集
train_indices <- sample(1:nrow(features), size = 0.8 * nrow(features))
x_train <- features[train_indices, ]
y_train <- target[train_indices]
x_test <- features[-train_indices, ]
y_test <- target[-train_indices]
步骤 3: 构建和训练
神经网络模型
# 构建和训练模型
# 假设我们使用一个隐藏层,包含5个神经元
model <- neuralnet(C ~ S + K + T + r + sigma, data = df, hidden = c(5), linear.output = TRUE)
Warning message:Algorithm did not converge in 1 of 1 repetition(s) within the stepmax. 结果显示无法收敛,请大神解答