| 以文本方式查看主题 - SCI论坛 (http://artsoncqu.eicp.top/scibbs/index.asp) -- 金融证券 (http://artsoncqu.eicp.top/scibbs/list.asp?boardid=70) ---- 宏远股份申购策略(借助于DeepSeek工具实现编程计算) (http://artsoncqu.eicp.top/scibbs/dispbbs.asp?boardid=70&id=12278) |
| -- 作者:sciadmin -- 发布时间:2025/8/9 17:58:02 -- 宏远股份申购策略(借助于DeepSeek工具实现编程计算) 只介绍一些基本的机理供探讨,欢迎网友指正! 由于顶格申购的股数是通过网上实际发行量的5%计算的,所以可以根据顶格申购145.73万股倒推回去,得到网上发行量2914.6万股。 正股的计算其实很简单,用总的发行股数去除申购资金,就能得到每元能摊到多少股,从而可以计算出获得100股需要的资金量,你的申报资金达不到100股,就只能贡献碎股了,顶格申购翻车道理一样,因此申购的总资金越高,你要获得100股需要的资金就越高,这是一道简单的算数题。 宏远股份申购策略资金需求分析(单位:万元) 申购资金_亿元 正股门槛_万元 碎股门槛_万元 1+0策略 1+1策略 2+1策略 7300 250.5 430 263.025 430 501.0 7400 253.9 430 266.595 430 507.8 7500 257.3 430 270.165 430 514.6 7600 260.8 430 273.840 430 521.6 7700 264.2 430 277.410 430 528.4 7800 267.6 350 280.980 350 535.2 7900 271.0 350 284.550 350 542.0 8000 274.5 350 288.225 350 549.0 这是简单计算的结果,碎股如果顶格申购不翻车,分配线是很高的,如果翻车,直线下降,这个没有办法预先知道,都只能是推测,我们下面通过模拟试试正态分布下的模拟结果,先测算翻车线如下: int_row num_row 7300 5.33 7400 5.26 7500 5.19 7600 5.12 7700 5.06 7800 4.99 7900 4.93 8000 4.87 7700接近临界了(实际是7790,网上已经有很多测算了,这个算出来不难) 我们下面就用这个7700进行均值模拟得到如下策略 策略 均值 p5 p95 1 正股门槛 264.2261 247.5 281.405 2 1+1策略 399.4640 350.0 430.000 3 2+1策略 528.4521 495.0 562.810 正股门槛均值在264万,要有95%的置信度需要加到281万 1+1策略均值在399万,同样比较保险的值在430万 K+1主要是正股门槛了,这个是简单的倍数,不再赘述。 |
| -- 作者:sciadmin -- 发布时间:2025/8/9 17:58:33 -- #R代码 # 北证申购策略资金需求分析(宏远股份2025年8月11日申购) # 核心参数初始化 W <- 1e4*145.73/0.05 # 网上发行量(股)通过顶格申购股数反推 P <- 9.17 # 发行价(元) [1,3](@ref) T_range <- seq(7300, 8000, by=100) * 1e8 # 申购资金范围(元) [2,5](@ref) # 正股门槛计算(100股整数倍) calculate_F1 <- function(T_total) { R <- (W * P) / T_total # 配售比例 round(100 * P / R / 1e4, 1) # 转换为万元,保留1位小数 [1](@ref) } # 碎股门槛修正模型(基于顶格翻车逻辑) estimate_F2 <- function(T_total) { # 顶格翻车阈值7790亿 [3](@ref) if (T_total < 7790 * 1e8) { F2 <- 430 # 顶格未翻车时碎股门槛 [3](@ref) } else { F2 <- 350 # 顶格翻车释放碎股,门槛降低 [3](@ref) } return(F2) } # 主分析函数 analyze_strategy <- function() { # 计算各资金量下的门槛 results <- data.frame( 申购资金_亿元 = T_range/1e8, 正股门槛_万元 = sapply(T_range, calculate_F1), 碎股门槛_万元 = sapply(T_range, estimate_F2) ) # 计算策略需求 results$"1+0策略" <- results$正股门槛_万元 * 1.05 # 增加5%安全垫 [4](@ref) results$"1+1策略" <- pmax(results$正股门槛_万元, results$碎股门槛_万元) results$"2+1策略" <- 2 * results$正股门槛_万元 # 输出结果 cat("宏远股份申购策略资金需求分析(单位:万元)\\n") print(results, row.names = FALSE) # 可视化 par(mfrow=c(1,2)) matplot(results$申购资金_亿元, results[,c("正股门槛_万元","碎股门槛_万元")], type="l", lwd=2, col=c("blue","red"), xlab="申购资金(亿元)", ylab="资金需求(万元)", main="基础门槛分析") legend("topleft", legend=c("正股门槛","碎股门槛"), col=c("blue","red"), lty=1:1, lwd=2) matplot(results$申购资金_亿元, results[,c("1+0策略","1+1策略","2+1策略")], type="l", lwd=2, col=c("green","orange","purple"), xlab="申购资金(亿元)", ylab="资金需求(万元)", main="策略需求分析") legend("topleft", legend=c("1+0策略","1+1策略","2+1策略"), col=c("green","orange","purple"), lty=1:1, lwd=2) return(results) } # 执行分析 result_data <- analyze_strategy() # 蒙特卡洛模拟(考虑资金波动) monte_carlo_sim <- function(n_sim=10000) { # 申购资金服从正态分布 [2](@ref) T_mean <- 7700 * 1e8 T_sd <- 300 * 1e8 # 标准差300亿 [2](@ref) simulated_T <- rnorm(n_sim, T_mean, T_sd) # 模拟各策略需求 simulated_F1 <- sapply(simulated_T, calculate_F1) simulated_F2 <- sapply(simulated_T, estimate_F2) simulated_1plus1 <- pmax(simulated_F1, simulated_F2) simulated_2plus1 <- 2 * simulated_F1 # 分析分布 par(mfrow=c(1,3)) hist(simulated_F1, breaks=30, main="正股门槛分布", xlab="万元", col="lightblue", xlim=c(240,300)) abline(v=quantile(simulated_F1, c(0.05,0.95)), col="red", lty=2) hist(simulated_1plus1, breaks=30, main="1+1策略分布", xlab="万元", col="lightgreen", xlim=c(350,450)) abline(v=quantile(simulated_1plus1, c(0.05,0.95)), col="red", lty=2) hist(simulated_2plus1, breaks=30, main="2+1策略分布", xlab="万元", col="lightpink", xlim=c(500,650)) abline(v=quantile(simulated_2plus1, c(0.05,0.95)), col="red", lty=2) return(data.frame( 策略 = c("正股门槛", "1+1策略", "2+1策略"), 均值 = c(mean(simulated_F1), mean(simulated_1plus1), mean(simulated_2plus1)), p5 = c(quantile(simulated_F1, 0.05), quantile(simulated_1plus1, 0.05), quantile(simulated_2plus1, 0.05)), p95 = c(quantile(simulated_F1, 0.95), quantile(simulated_1plus1, 0.95), quantile(simulated_2plus1, 0.95)) )) } # 执行模拟 mc_results <- monte_carlo_sim() cat("\\n蒙特卡洛模拟结果(95%置信区间,单位:万元):\\n") print(mc_results) # 顶格翻车阈值估算(由5+1变成4+1对应的申购总金额就是翻车阈值) df <- data.frame( int_row = as.integer(round(result_data[, 1], 0)), num_row = round(145.73 * 9.17 / result_data[, 2], 2) ) print(df, row.names = FALSE) |