# 北证申购策略资金需求分析(碎股门槛分段处理)
# 在6600-8400亿元之间将碎股门槛反序排列
# 核心参数初始化
V <- 90.25
W <- 1e4 * V / 0.05 # 网上发行量(股)
P <- 15.78 # 发行价(元)
T_range <- seq(6400, 8600, by = 200) * 1e8 # 申购资金范围(元)
# 正股门槛计算(100股整数倍)
calculate_F1 <- function(T_total) {
R <- (W * P) / T_total # 配售比例
round(100 * P / R / 1e4) # 转换为万元并取整
}
# 碎股门槛计算(6600-8400亿之间反序)
estimate_F2 <- function(T_range) {
# 先计算全部原始值
raw_values <- sapply(T_range, function(T_total) {
F1 <- calculate_F1(T_total)
if (T_total < 6600 * 1e8) {
round(480 * (1 + (V * P - 3 * F1) / F1))
} else {
round(F1 * (1 + (V * P - 3 * F1) / F1))
}
})
# 找出6600-8400亿对应的索引范围
idx_range <- which(T_range >= 6600 * 1e8 & T_range <= 8400 * 1e8)
# 对该范围内的值反序排列
if (length(idx_range) > 1) {
raw_values[idx_range] <- rev(raw_values[idx_range])
}
return(raw_values)
}
# 主分析函数
analyze_strategy <- function() {
# 计算各资金量下的门槛
results <- data.frame(
申购资金_亿元 = T_range / 1e8,
正股门槛_万元 = sapply(T_range, calculate_F1),
碎股门槛_万元 = estimate_F2(T_range)
)
# 计算策略需求
results$"1+0策略" <- round(results$正股门槛_万元)
results$"1+1策略" <- round(pmax(results$正股门槛_万元,
results$碎股门槛_万元))
results$"2+1策略" <- round(2 * results$正股门槛_万元)
results$"3+1策略" <- round(3 * results$正股门槛_万元)
# 输出结果
cat("北证申购策略分析\n")
print(results, row.names = FALSE)
# 可视化
par(mfrow = c(1, 2))
plot(results$申购资金_亿元, results$正股门槛_万元,
type = "o", col = "blue", pch = 19, lwd = 2,
xlab = "申购资金(亿元)", ylab = "资金需求(万元)",
main = "正股门槛趋势")
plot(results$申购资金_亿元, results$碎股门槛_万元,
type = "o", col = "red", pch = 19, lwd = 2,
xlab = "申购资金(亿元)", ylab = "碎股门槛(万元)",
main = "碎股门槛趋势")
abline(v = c(66, 84), lty = 2, col = "gray") # 标记调整区间
return(results)
}
# 执行分析
result_data <- analyze_strategy()
V*P #顶格申购资金
W #网上发行量
# 顶格申购资金总量突变点预估(整数部分变化会导致碎股突变)
df <- data.frame(
int_row = as.integer(round(result_data[, 1], 0)),
num_row = round(V * P / result_data[, 2], 2)
)
print(df, row.names = FALSE)