股票价格中的布朗运动模拟[Python代码实现]

·
·
·

股票价格的波动形成了一种随机模式。价格每天波动是由市场力量(如供求关系、公司估值和收益)、经济因素(如通胀、流动性、国家和投资者的人口统计数据、政治发展等)所致。市场参与者试图利用所有这些因素来预测股票价格,并通过他们的交易活动使价格变动呈现出随机性,因为金融和经济世界是不断变化的。
图片

什么是布朗运动?

布朗运动(Brownian motion)是一种随机过程,最初由英国生物学家罗伯特·布朗在1827年观察到悬浮颗粒的不规则运动而提出。布朗运动的特点是连续性、无记忆性和随机性,它在数学和物理学领域有着广泛的应用。

在金融领域,布朗运动用于模拟股票价格的随机波动。这是因为股票价格的变动受到许多随机且不可预测的因素的影响,例如新闻事件、市场情绪和利率变化。通过将股票价格建模为布朗运动过程,分析师可以使用随机微积分等数学工具来预测未来股票价格,并估计与不同投资策略相关的风险。布朗运动模型的应用包括:

  • 资产价格模拟:通过模拟资产价格路径,可以评估不同策略和投资组合的风险和回报。
  • 期权定价:布朗运动模型可用于计算期权合约的理论价格,例如欧式期权的黑-斯科尔斯(Black-Scholes)定价模型。
  • 风险管理:通过模拟布朗运动路径,可以对投资组合的风险进行评估和管理,例如计算价值-at-风险(Value-at-Risk)指标。

布朗运动的数学定义

标准布朗运动

在金融随机过程的上下文中,布朗运动也被描述为维纳过程,它是一个具有正态分布增量的连续随机过程。使用维纳过程的符号表示,连续时间下的资产价格模型可以表示为:
图片
其中dS是连续时间dt内资产价格的变化量。dX是来自正态分布(N(0, 1)或维纳过程)的随机变量。σ被假设为常数,表示考虑外部影响导致的意外变化的价格波动率。μdt表示时间间隔内的确定性回报,其中μ表示资产价格的增长率或“漂移”。
当市场使用标准布朗运动建模时,未来价格的概率分布函数是正态分布。

几何布朗运动

图片
其中dS是连续时间dt内资产价格的变化量。dX是来自正态分布(N(0, 1)或维纳过程)的随机变量。σ被假设为常数,表示考虑外部影响导致的意外变化的价格波动率。μdt表示时间间隔内的确定性回报,其中μ表示资产价格的增长率或“漂移”。
当市场使用几何布朗运动建模时,未来价格的概率分布函数是对数正态分布。

使用Python代码模拟布朗运动

# 导入依赖库
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# 固定随机数种子
rng = np.random.default_rng(42)

# 设置路径数量和每条路径的时间步数
paths = 50
points = 1000

# 初始化平均值为零,而波动性(标准差)为 1 的高斯分布
mu, sigma = 0.01.0
Z = rng.normal(mu, sigma, (paths, points))

# 定义时间步长和 t 轴
interval = [0.01.0]
dt = (interval[1] - interval[0]) / (points - 1)
t_axis = np.linspace(interval[0], interval[1], points)

# 标准布朗运动:生成的布朗运动路径具有零均值和单位标准差
W = np.zeros((paths, points))
for idx in range(points - 1):
    real_idx = idx + 1
    W[:, real_idx] = W[:, real_idx - 1] + np.sqrt(dt) * Z[:, idx]

# 绘制标准布朗运动路径
fig, ax = plt.subplots(11, figsize=(128))
for path in range(paths):
    ax.plot(t_axis, W[path, :])
ax.set_title("Standard Brownian Motion sample paths")
ax.set_xlabel("Time")
ax.set_ylabel("Asset Value")
plt.show()

# 获取最终路径值集合
final_values = pd.DataFrame({'final_values': W[:, -1]})

# 用 Seaborn 估计并绘制这些最终值的分布
fig, ax = plt.subplots(11, figsize=(128))
sns.kdeplot(data=final_values, x='final_values', fill=True, ax=ax)
ax.set_title("Kernel Density Estimate of asset path final value distribution")
ax.set_ylim(0.00.325)
ax.set_xlabel('Final Values of Asset Paths')
plt.show()

# 输出这些最终值的均值和标准差
print(final_values.mean(), final_values.std())

# 创建非零均值和非单位标准差
mu_c, sigma_c = 5.02.0

# 几何布朗运动:生成的布朗运动路径具有恒定均值 mu_c 和恒定标准差 sigma_c
X = np.zeros((paths, points))
for idx in range(points - 1):
    real_idx = idx + 1
    X[:, real_idx] = X[:, real_idx - 1] + mu_c * dt + sigma_c * np.sqrt(dt) * Z[:, idx]

# 绘制几何布朗运动路径
fig, ax = plt.subplots(11, figsize=(128))
for path in range(paths):
    ax.plot(t_axis, X[path, :])
ax.set_title("Constant mean and standard deviation Brownian Motion sample paths")
ax.set_xlabel("Time")
ax.set_ylabel("Asset Value")
plt.show()

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/111038
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2天前
下一篇 2天前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注