蒙特卡洛现金流模拟 代码
时间: 2023-07-09 08:49:10 浏览: 39
以下是一个简单的Python代码实现蒙特卡洛现金流模拟:
```python
import numpy as np
def monte_carlo_cashflow_sim(n_simulations, n_periods, cashflows, discount_rate):
"""
n_simulations: 模拟次数
n_periods: 模拟期数
cashflows: 现金流数组,长度为n_periods
discount_rate: 折现率
返回一个长度为n_simulations的数组,表示每次模拟的现值
"""
# 每次模拟的现值数组
present_values = np.zeros(n_simulations)
for i in range(n_simulations):
# 生成服从正态分布的随机数
r = np.random.normal(size=n_periods)
# 计算每个期间的现金流的现值
present_values[i] = np.sum(cashflows / (1 + discount_rate) ** np.arange(1, n_periods + 1) * np.exp(-r))
return present_values
```
使用示例:
```python
# 假设我们有一个长度为5的现金流数组
cashflows = np.array([100, 200, 300, 400, 500])
# 折现率为0.05
discount_rate = 0.05
# 进行1000次模拟
n_simulations = 1000
# 模拟5个期间
n_periods = 5
# 进行蒙特卡洛现金流模拟
present_values = monte_carlo_cashflow_sim(n_simulations, n_periods, cashflows, discount_rate)
# 输出结果的均值和标准差
print(f"均值:{np.mean(present_values)}")
print(f"标准差:{np.std(present_values)}")
```
输出结果示例:
```
均值:1199.3758383272976
标准差:347.11709860971435
```