下载
登录/ 注册
主页
论坛
视频
热股
可转债
下载
下载

研究打板破产的概率,以及破解之道

26-03-28 13:30 364次浏览
道观小生
+关注
博主要求身份验证
登录用户ID:
我不是打板的模式,但是经常听到有人一下子挣了很多,又有人打板归零,所以想模拟一下

使用蒙特卡法,写程序代码模拟打板模式破产的概率。假设打板模式是正数学期望的:年化收益率200%,而最大回撤是-100%(这里的年化收益率和最大回撤,都指的是单利统计,即每天操作1次,按次计算收益率。即10年的收益率求和除以10,是200%,而最大回撤是指每隔3年,连续一段时间的收益率之和为-100%)。如果满仓操作(这里是模拟复利了,但是收益率的分布服从之前单利的情况),统计其净值低于30%的概率。然后对比每次操作采用总资金的20%进行操作,再统计其净值低于30%的概率。时间长度为10年。并画出每次模拟的净值曲线。
参数设置:即收益率的均值0.8%,250个交易日就是200%,标准差是20%,即打板失败吃面可能是几个板,所以很多时候收益>30%,但是也有很都时候亏损大于-30%

mu = 0.008 # 日收益率均值(年化200%)
sigma = 0.2 # 日收益率标准差(可调整)
=== 蒙特卡洛模拟结果 ===模拟次数: 10000
满仓操作 - 最终净值低于10%的概率: 0.9986
满仓操作 - 路径中曾低于10%的概率: 0.9998
20%仓位 - 最终净值低于10%的概率: 0.0151

20%仓位 - 路径中曾低于10%的概率: 0.0558

意思就是说,满仓打板破产的概率几乎是100%,而分仓打板,或每次采用20%的仓位打板,而破产的概率只有1~2%,附上代码和结果图:欢迎批评指正

import numpy as np
import matplotlib.pyplot as plt

# 设置中文字体(确保系统有SimHei或Microsoft YaHei)

plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘, ‘Microsoft YaHei‘] # 用于正常显示中文
plt.rcParams[‘axes.unicode_minus‘] = False # 用于正常显示负号

# 参数设置

np.random.seed(42) # 固定随机种子,结果可复现
n_days = 2500 # 10年,假设每年250个交易日
n_simulations = 10000 # 蒙特卡洛模拟次数
mu = 0.008 # 日收益率均值(年化400%)
sigma = 0.2 # 日收益率标准差(可调整)
threshold = 0.1 # 破产阈值(净值低于30%)

# 生成收益率序列(形状:n_simulations × n_days)

returns = np.random.normal(mu, sigma, size=(n_simulations, n_days))

# 满仓操作:净值 = 初始1 * 累积乘积(1+r)

nav_full = np.cumprod(1 + returns, axis=1)

# 20%仓位操作:每日收益率 = 0.2 * r

nav_partial = np.cumprod(1 + 0.2 * returns, axis=1)

# 统计破产概率(最终净值低于阈值)

bankrupt_full_final = nav_full[:, -1] < threshold
bankrupt_partial_final = nav_partial[:, -1] < threshold
prob_full_final = np.mean(bankrupt_full_final)
prob_partial_final = np.mean(bankrupt_partial_final)

# 统计破产概率(路径中曾低于阈值)

bankrupt_full_path = np.any(nav_full < threshold, axis=1)
bankrupt_partial_path = np.any(nav_partial < threshold, axis=1)
prob_full_path = np.mean(bankrupt_full_path)
prob_partial_path = np.mean(bankrupt_partial_path)

print("=== 蒙特卡洛模拟结果 ===")

print(f"模拟次数: {n_simulations}")
print(f"满仓操作 - 最终净值低于{threshold*100:.0f}%的概率: {prob_full_final:.4f}")
print(f"满仓操作 - 路径中曾低于{threshold*100:.0f}%的概率: {prob_full_path:.4f}")
print(f"20%仓位 - 最终净值低于{threshold*100:.0f}%的概率: {prob_partial_final:.4f}")
print(f"20%仓位 - 路径中曾低于{threshold*100:.0f}%的概率: {prob_partial_path:.4f}")

# 绘制部分模拟路径(前10条)

fig, axes = plt.subplots(1, 2, figsize=(12, 5))
for i in range(min(10, n_simulations)):
axes[0].plot(nav_full, alpha=0.7)
axes[1].plot(nav_partial, alpha=0.7)
axes[0].axhline(y=threshold, color=‘r‘, linestyle=‘--‘, label=f‘阈值 {threshold*100:.0f}%‘)
axes[1].axhline(y=threshold, color=‘r‘, linestyle=‘--‘)
axes[0].set_title(‘满仓操作净值曲线(前10条)‘)
axes[1].set_title(‘20%仓位操作净值曲线(前10条)‘)
axes[0].set_xlabel(‘交易日‘)
axes[1].set_xlabel(‘交易日‘)
axes[0].set_ylabel(‘净值‘)
axes[1].set_ylabel(‘净值‘)
axes[0].legend()
plt.tight_layout()
plt.show()
打开淘股吧APP
1
评论(3)
收藏
展开
热门 最新
天润福

26-03-28 18:44

0
👌好
道观小生

26-03-28 14:56

0
理解错误。你是相当于把10万给5个人,每个人还是2万满仓操作。但这种做法是,比如10万本金,实际持仓只有2万,后来总资金做到了20万,拿来做的只有4万,大多数利润用于补仓。而你把10万分给5个人,假如有人做到了20万,他还会把20万全部投入。不知道明白区别没有?
画家Painter

26-03-28 13:52

0
100%仓位 相当于一个单位。(比如10W)
20%仓位也相当于1个单位。(比如2W)但是我后面还有4个单位可以继续玩下去。
理论上,满仓和20%仓位。只是能多玩4次游戏而已。
20%看成一个整体。100%看成一个整体。
这结果就是一样的扎心。
刷新 首页上一页 下一页末页
提交