74 lines
2.4 KiB
Markdown
74 lines
2.4 KiB
Markdown
---
|
||
date:
|
||
"{ date:YYYY-MM-DD }":
|
||
tags:
|
||
title:
|
||
---
|
||
|
||
|
||
```python
|
||
import random
|
||
import math
|
||
import numpy as np
|
||
import matplotlib.pyplot as plt
|
||
|
||
# 初始本金
|
||
initial_principal = 10000
|
||
# 游戏次数
|
||
num_games = 146
|
||
# 获胜概率
|
||
win_prob = 0.75
|
||
# 年化赢利率
|
||
annual_win_rate = 0.5
|
||
# 年化输利率
|
||
annual_loss_rate = -0.8
|
||
# 模拟次数
|
||
simulation_times = 10000
|
||
|
||
final_amounts = []
|
||
|
||
for _ in range(simulation_times):
|
||
principal = initial_principal
|
||
# 模拟游戏过程
|
||
for _ in range(num_games):
|
||
# 模拟游戏结果
|
||
result = random.random()
|
||
if result < win_prob:
|
||
# 赢了
|
||
daily_rate = (5 / 365) * annual_win_rate
|
||
principal *= (1 + daily_rate)
|
||
else:
|
||
# 输了
|
||
daily_rate = (5 / 365) * annual_loss_rate
|
||
principal *= (1 + daily_rate)
|
||
|
||
final_amounts.append(principal)
|
||
|
||
# 绘制直方图
|
||
plt.hist(final_amounts, bins=50, edgecolor='black')
|
||
plt.title('Histogram of Final Amounts after 10000 Simulations')
|
||
plt.xlabel('Final Amount')
|
||
plt.ylabel('Frequency')
|
||
|
||
plt.show()
|
||
```
|
||
|
||
|
||
### 代码解释
|
||
|
||
|
||
|
||
1. **模拟部分**:
|
||
- 定义了初始本金、游戏次数、获胜概率、年化赢利率、年化输利率和模拟次数等参数。
|
||
- 通过两层循环模拟一万次两年的游戏过程,每次游戏根据随机结果更新本金,并将每次模拟的最终资金存储在 `final_amounts` 列表中。
|
||
2. **绘制直方图部分**:
|
||
- 使用 `plt.hist()` 函数绘制 `final_amounts` 的直方图,`bins=50` 表示将数据分成 50 个区间,`edgecolor='black'` 为每个柱子添加黑色边框,使图形更清晰。
|
||
- 使用 `plt.title()`、`plt.xlabel()` 和 `plt.ylabel()` 分别设置图形的标题、x 轴标签和 y 轴标签。
|
||
3. **`plt.show()` 的作用**:
|
||
- `plt.show()` 是 `matplotlib` 库中的一个函数,它的作用是显示当前绘制的图形。当你运行这段代码时,它会弹出一个窗口,在这个窗口中会显示绘制好的直方图图片。这个窗口允许你进行一些基本的操作,比如放大、缩小、保存图片等。
|
||
|
||
|
||
|
||
运行上述代码后,你会看到一个直方图,该直方图展示了一万次模拟后最终资金的分布情况,x 轴表示最终资金的数值区间,y 轴表示落在每个区间内的模拟次数(频率)。
|
||
|
||
![[../attachments/Pasted image 20250222115616.png]] |