gpt4 book ai didi

python - 如何在Python中使简单的股票价格模拟过程更加高效?

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:55 25 4
gpt4 key购买 nike

我编写了一些非常简单的代码来模拟股票价格,假设每天在 -2% 和 +2% 之间随机波动(它过于简单,但出于演示目的,我认为它比使用 GMB 公式更容易)。

我遇到的问题是它非常慢,我知道这是因为我使用了双循环。据我了解,我也许可以使用矢量化,但我不知道如何使用。

基本上,我所做的是创建 100 个模拟,假设一年有 256 个交易日,每天将之前的股价乘以 0.98 到 1.02 之间的随机数。

我目前使用嵌套 for 循环来执行此操作。据我所知,这并不好,但作为一个新手,我很难进行矢量化。我在网上读过有关它的内容,根据我的理解,基本上不是使用循环,而是尝试将它们都转换为矩阵并使用矩阵乘法,但我不确定如何在这里应用它。有人能指出我正确的方向吗?

from numpy import exp, sqrt, log, linspace
from random import gauss
from random import uniform
import pandas as pd


nsims = 100
stpx = 100
days = 256
mainframe = pd.DataFrame(0, index = list(range(1,days)), columns = list(range(1,nsims)))
mainframe.iloc[0] = stpx
for i in range(0, nsims-1):
for x in range(1, days-1):
mainframe.iloc[x, i] = mainframe.iloc[x-1, i]* uniform(.98, 1.02)

最佳答案

当一个计算依赖于前一个计算的结果时,向量化可能会很棘手,就像在这种情况下,第 x 天需要知道第 x-1 天的结果。我不会说这是不可能的,因为很可能有人可以找到一种方法,但这是我的解决方案,至少摆脱了一个循环。我们仍然循环几天,但我们通过生成随机数数组并利用 numpy 的逐元素乘法(这比使用循环快得多)来一次完成所有 100 次模拟:

您需要添加以下导入:

import numpy as np

然后用这个单个循环替换您的嵌套循环:

for x in range(1, days-1):
mainframe.iloc[x] = mainframe.iloc[x-1] * np.random.uniform(0.98, 1.02, nsims-1)

编辑添加:因为您使用的是一个非常简单的公式,仅涉及基本乘法,所以您实际上可以通过生成随机数字矩阵、按列使用 numpy 的累积乘积函数并将其乘以来摆脱两个循环每个值从 100 开始的 DataFrame。不过,如果您开始使用更复杂的公式,我不确定这种方法是否可行。无论如何,这就是:

import pandas as pd
import numpy as np

nsims = 100
stpx = 100
days = 256

mainframe = pd.DataFrame(stpx, index=list(range(1, days)), columns=list(range(1, nsims)))
rand_matrix = np.random.uniform(0.98, 1.02, (days-2, nsims-1)).cumprod(axis=0)
mainframe.iloc[1:] *= rand_matrix

关于python - 如何在Python中使简单的股票价格模拟过程更加高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com