当前位置: 首页 > 知识库问答 >
问题:

我如何在Python中为股价移动创建随机游动(具有一定的概率)?

丁灿
2023-03-14

我想在Python中模拟股票价格的运动,持续3年,总共300步,有5条路径。股价可以上涨或下跌,上涨概率=q,下跌概率=1-q。

如果它增加,则周期价格t=周期价格t-1×u,如果它减少,则周期价格t=周期价格t-1×d

我对如何用随机数回答这个问题有点困惑。虽然我这样做,它可以显示结果,但我不确定是否比较随机数和q是正确的方法

#m = time step
#T = year
#sigma = volatility
#S0 = price period 0
#r = riskfree
def price_path(m,T,sigma,s0,r):
    prices = np.zeros(m)
    prices[0] = s0
    u = np.exp(sigma*np.sqrt(T/m))
    d = 1/u
    q = (np.exp(sigma*T/m) - d) / (u-d)
    for i in range(m-1):
        rand_var = np.random.rand()
        if(rand_var < q):
            prices[i+1] = prices[i] * u
        else:
            prices[i+1] = prices[i] * d
    return prices

np.random.seed(3912)
fig, ax =plt.subplots()
for i  in range(5):
    rd_walk = price_path(m=300,T=3,sigma=0.25,s0=50,r=0.05)`
    plt.plot(rd_walk)

共有1个答案

翁建弼
2023-03-14

你做对了,因为它只是一个伯努利分布。

通过使用numpy,可以更简洁地编写price_path:

def price_path(m,T,sigma,s0,r):
    
    u = np.exp(sigma*np.sqrt(T/m))
    d = 1/u
    q = (np.exp(sigma*T/m) - d) / (u-d)
    
    up_or_down = np.where(np.random.rand(m)<q,u,d)
    up_or_down[0] = 1.
    prices = s0 * np.cumprod(up_or_down)
    
    return prices
 类似资料:
  • 本文向大家介绍如何在R中创建具有随机值的矩阵?,包括了如何在R中创建具有随机值的矩阵?的使用技巧和注意事项,需要的朋友参考一下 通常,使用给定值创建矩阵,但是如果我们要创建具有随机值的矩阵,则将对矩阵函数使用常规方法。R中的随机选择可以根据我们的目标以多种方式完成,例如,如果要从正态分布中随机选择值,则将使用rnorm函数并将其存储在矩阵中,然后将其传递到矩阵函数中。 示例 输出结果 示例 输出结

  • 问题内容: 我对使用 Python 编程很 陌生 。 我想制作一个将从Google Finance 获取股票价格* 的应用程序。一个示例是CSCO (思科系统) 。然后,我将使用该数据 在库存达到一定值时向用户发出警告 。它还需要 每30秒刷新一次 。 __ *** 问题是我不知道如何获取数据! 谁有想法? 问题答案: 该模块由CoreyGoldberg提供。 程序: 用法示例: 更新 :更改了正

  • 如何在Chrome中创建随机user_agent?我在用假用户代理。这里是图书馆。打印输出是工作的,但当它似乎没有加载到Chrome。

  • 问题内容: 我想知道在特定范围内生成随机数的最佳方法(例如在Java中)是什么,而每个范围内的每个数字都有一定的发生概率? 例如 从[1; 3]内产生随机整数,并具有以下概率: P(1)= 0.2 P(2)= 0.3 P(3)= 0.5 现在,我正在考虑在[0; 100]内生成随机整数并执行以下操作的方法: 如果它在[0; 20]之内->我得到我的随机数1。 如果它在[21; 50]之内->我得到

  • 问题内容: 如果我定义一个小python程序为 我收到回溯错误 我要弄清楚的是,如何在不实例化对象的情况下动态地将类方法设置为类? 编辑: 这个问题的答案是 返回以下输出 问题答案: 您可以通过简单地分配给类对象或通过对类对象的setattr动态地将类方法添加到类中。在这里,我使用python约定,即类以大写字母开头,以减少混乱:

  • 问题内容: 假设我需要一个3位数的电话号码,因此它类似于: 问题答案: 要获得一个随机的3位数字: (假设您实际上是指三位数,而不是“最多三位数”。) 要使用任意数量的数字: 输出: