蒙特卡洛模拟股票价格(使用Python)

在我的一篇文章中,我介绍了使用Python实现的随机游走预测的概念。在这篇文章中,我想对股价随机游走进行蒙特卡罗模拟。为此,我将使用以下虚构的股价历史记录:

#虚报每日收盘价的申报单
history_prices = [180,192,193,195,191,199,198,200,199,203,205,207,205,208,201,203,204,201,205,206,207]
print(stockPrices)
[180, 192, 193, 195, 206, 211, 191, 204, 215, 190, 205, 207, 205, 211, 222, 215, 245, 201, 205, 206, 214]

在准备下一步时,我现在将导入所有相关的Python模块:

#导入统计信息以计算例如价格历史记录的标准差
import statistics as stat
#导入pyplot进行绘图
import matplotlib.pyplot as plt
#导入随机以生成随机数
import random as rnd

假设股价随机波动,我可以从虚构价格历史记录的相对变化中得出标准偏差,这样我就可以对随机股价波动建模:

relative_prices = []
for i in range(0,len(history_prices)):
    if i == 0:
        pass
    else:
        relative_prices.append((history_prices[i]-history_prices[i-1])/(history_prices[i-1])) 
std_prices = stat.stdev(relative_prices)
print(std_prices)
0.021375589655016836

现在,我基于未来随机价格的标准偏差,假设未来100天的一次示例性随机价格走动,我假设是随机正态分布。历史记录中的最后一个已知价格用作起点:

#模拟100天的随机价格上涨
#-进行计算,定义功能
def randomWalk(stdev,pastPrices):
    days = [i for i in range(1,101)]
    prices = []
    price = pastPrices[-1]
    for i in range(1,101):
        price = price + price*rnd.normalvariate(0,stdev)
        prices.append(price)
    return([days,prices])
#-进行计算,使用功能
prices = randomWalk(std_prices,history_prices)
#-可视化线图中的随机游走
plt.plot(prices[0],prices[1])
plt.title("random price walk")
plt.xlabel("day")
plt.ylabel("stock price")
Text(0, 0.5, 'stock price')

我可以通过重新计算其他随机游动来重复此过程,从而创建股价波动的蒙特卡罗模拟。在下面的示例中,我对30个单独的步行重复随机步行过程:

plt.figure()
for i in range(0,30):
    prices = randomWalk(std_prices,history_prices)
    plt.plot(prices[0],prices[1])
plt.title("monte-carlo simulation of stock price development")
plt.xlabel("day")
plt.ylabel("stock price")
Text(0, 0.5, 'stock price')

You May Also Like

Leave a Reply

Leave a Reply

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据