【问题标题】:Random walk pandas随机行走的熊猫
【发布时间】:2013-05-20 00:49:35
【问题描述】:

我正在尝试在 pandas 中快速创建一个模拟随机游走系列。

import pandas as pd
import numpy as np
dates = pd.date_range('2012-01-01', '2013-02-22')
y2 = np.random.randn(len(dates))/365
Y2 = pd.Series(y2, index=dates)
start_price = 100

想建立另一个日期系列,从开始日期的 start_price 开始,并按随机增长率增长。 伪代码:

P0 = 100
P1 = 100 * exp(Y2)
P2 = P1 * exp(Y2)

在 excel 中很容易做到,但如果不使用 pandas 迭代数据帧/系列,我想不出办法,而且我也很头疼。

试过了:

p = Y2.apply(np.exp)-1
y = p.cumsum(p)
y.plot()

这应该给出自开始以来的累积复合回报

【问题讨论】:

    标签: python pandas random-walk


    【解决方案1】:
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    def geometric_brownian_motion(T = 1, N = 100, mu = 0.1, sigma = 0.01, S0 = 20):        
        dt = float(T)/N
        t = np.linspace(0, T, N)
        W = np.random.standard_normal(size = N) 
        W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
        X = (mu-0.5*sigma**2)*t + sigma*W 
        S = S0*np.exp(X) ### geometric brownian motion ###
        return S
    
    dates = pd.date_range('2012-01-01', '2013-02-22')
    T = (dates.max()-dates.min()).days / 365
    N = dates.size
    start_price = 100
    y = pd.Series(
        geometric_brownian_motion(T, N, sigma=0.1, S0=start_price), index=dates)
    y.plot()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2019-05-08
      • 2014-09-02
      • 1970-01-01
      相关资源
      最近更新 更多