notes_works/量化交易相关/更贝尔分布.md
zhangkun9038@dingtalk.com 4380e95e00 2025-04-07 13:07:53: ...
2025-04-07 13:08:02 +08:00

109 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date:
"{ date:YYYY-MM-DD }":
tags:
title:
---
在之前模拟游戏收益的情境中,模拟一万次后收益和实际年化利率的最高值、最低值本身并不一定对应着某种典型的已知函数形式。不过我们可以从以下几个角度来分析和探讨可能的关联:
1. 数据分布特性与函数的关系
模拟收益和年化利率的随机性
每次模拟游戏的结果是随机的,由游戏的获胜概率、赢和输时的年化利率等因素共同决定。在多次模拟后,收益和年化利率的分布是基于大量随机事件的统计结果。
这种随机性使得最高值和最低值的产生也是随机的,并不遵循简单的确定性函数规律。例如,每次模拟中游戏的输赢顺序不同,最终的收益和年化利率就会不同,从而导致最高值和最低值不断变化。
2. 可能的近似分布及对应函数
收益和年化利率的分布可能近似为某种概率分布
正态分布:在某些情况下,如果模拟的次数足够多且满足一定条件,收益和年化利率可能近似服从正态分布。但最高值和最低值并非正态分布本身,而是从正态分布样本中选取的极端值。
极值分布对于大量随机变量的最大值和最小值它们往往服从极值分布。常见的极值分布有三种类型Gumbel 分布、Fréchet 分布和 Weibull 分布。
Gumbel 分布:通常用于描述最大值的分布,当数据没有上限且分布的尾部较轻时,最大值可能服从 Gumbel 分布。
Fréchet 分布:适用于具有重尾分布且没有上限的数据,最大值可能遵循此分布。
Weibull 分布:可用于描述最小值的分布,当数据有下限且满足一定条件时,最小值可能服从 Weibull 分布。
1. 通过代码验证近似分布
以下是一个简单的示例,展示如何使用 Python 模拟游戏收益,并观察最高值和最低值的分布情况,尝试判断是否符合某种极值分布:
```python
import random
import math
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gumbel_r, weibull_min
# 初始本金
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 = []
annual_interest_rates = []
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)
# 计算实际年化利率
years = 2
annual_interest_rate = math.pow(principal / initial_principal, 1 / years) - 1
annual_interest_rates.append(annual_interest_rate)
# 提取每次模拟中的最高和最低收益
max_amounts = []
min_amounts = []
for i in range(0, simulation_times, 100): # 这里简单分组,每 100 次模拟一组
group = final_amounts[i: i + 100]
max_amounts.append(max(group))
min_amounts.append(min(group))
# 绘制最高值的直方图并拟合 Gumbel 分布
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(max_amounts, bins=30, density=True, alpha=0.6, color='g')
params = gumbel_r.fit(max_amounts)
x = np.linspace(min(max_amounts), max(max_amounts), 100)
plt.plot(x, gumbel_r.pdf(x, *params), 'r-', lw=2)
plt.title('Distribution of Max Amounts (Fitted Gumbel)')
# 绘制最低值的直方图并拟合 Weibull 分布
plt.subplot(1, 2, 2)
plt.hist(min_amounts, bins=30, density=True, alpha=0.6, color='b')
params = weibull_min.fit(min_amounts)
x = np.linspace(min(min_amounts), max(min_amounts), 100)
plt.plot(x, weibull_min.pdf(x, *params), 'r-', lw=2)
plt.title('Distribution of Min Amounts (Fitted Weibull)')
plt.show()
```
![[../attachments/Pasted image 20250222113205.png]]
这张图包含两个子图,分别展示了模拟游戏收益中最高值和最低值的分布情况,以及它们与特定极值分布的拟合结果:
### 左图Distribution of Max Amounts (Fitted Gumbel)
- **直方图**绿色的直方图表示每次分组模拟每100次模拟为一组中的最高收益的分布频率。纵轴是概率密度横轴是收益金额。可以看到收益最高值主要集中在一定范围内其中某个区间的出现频率相对较高而两端的频率较低。
- **红色曲线**这条曲线是根据Gumbel分布拟合得到的概率密度函数PDF。通过将模拟数据拟合到Gumbel分布我们可以判断最高收益的分布是否近似符合Gumbel分布。从图中可以看出红色曲线与直方图的形状有一定的契合度说明最高收益的分布在一定程度上符合Gumbel分布的特征。
### 右图Distribution of Min Amounts (Fitted Weibull)
- **直方图**:蓝色的直方图展示了每次分组模拟中的最低收益的分布频率。同样,纵轴是概率密度,横轴是收益金额。最低收益值的分布也呈现出一定的集中趋势,有一个出现频率较高的区间。
- **红色曲线**该曲线是根据Weibull分布拟合得到的概率密度函数PDF。将模拟数据拟合到Weibull分布以判断最低收益的分布是否符合Weibull分布。从图中可见红色曲线与直方图的形状也较为匹配表明最低收益的分布在一定程度上符合Weibull分布的特点。
总体而言通过直方图和拟合曲线的对比可以初步判断在这个游戏收益模拟中最高收益的分布近似符合Gumbel分布最低收益的分布近似符合Weibull分布。