以文本方式查看主题

-  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)