如何用numpy模拟随机回报

如何用numpy模拟随机回报,numpy,random,dataframe,quantitative-finance,Numpy,Random,Dataframe,Quantitative Finance,模拟随机回报的快速方法是什么。我知道numpy.random。然而,这并不能指导我如何对资产回报进行建模 我试过: import numpy as np r = np.random.rand(100) 但这并不准确。其他人是如何做到这一点的?我建议采用以下两种方法之一: One:假设收益率正态分布,平均值等于0.1%,标准偏差约为1%。这看起来像: import numpy as np np.random.seed(314) r = np.random.randn(100) / 100

模拟随机回报的快速方法是什么。我知道
numpy.random
。然而,这并不能指导我如何对资产回报进行建模

我试过:

import numpy as np

r = np.random.rand(100)

但这并不准确。其他人是如何做到这一点的?

我建议采用以下两种方法之一:


One:

假设收益率正态分布,平均值等于0.1%,标准偏差约为1%。这看起来像:

import numpy as np

np.random.seed(314)
r = np.random.randn(100) / 100 + 0.001
seed(314)
在特定点设置随机数生成器,以便如果我们都使用相同的种子,我们将看到相同的结果

randn
从正态分布中提取

我还建议使用
pandas
。它是一个实现类似于
R
DataFrame
对象的库

import pandas as pd

df = pd.DataFrame(r)
然后,您可以按如下方式绘制累积回报:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()


两个:

第二种方法是假设收益是对数正态分布的。这意味着日志(r)正常。在这个场景中,我们提取正态分布的随机数,然后使用这些值作为
e
的指数。看起来是这样的:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()
如果绘制它,它看起来像这样:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()

我建议两种方法中的一种:


One:

假设收益率正态分布,平均值等于0.1%,标准偏差约为1%。这看起来像:

import numpy as np

np.random.seed(314)
r = np.random.randn(100) / 100 + 0.001
seed(314)
在特定点设置随机数生成器,以便如果我们都使用相同的种子,我们将看到相同的结果

randn
从正态分布中提取

我还建议使用
pandas
。它是一个实现类似于
R
DataFrame
对象的库

import pandas as pd

df = pd.DataFrame(r)
然后,您可以按如下方式绘制累积回报:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()


两个:

第二种方法是假设收益是对数正态分布的。这意味着日志(r)正常。在这个场景中,我们提取正态分布的随机数,然后使用这些值作为
e
的指数。看起来是这样的:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()
如果绘制它,它看起来像这样:

df.add(1).cumprod().plot()
r = np.exp(np.random.randn(100) / 100 + 0.001) - 1
pd.DataFrame(r).add(1).cumprod().plot()

综合答案。在交易期权估值方面做了很多工作,所以也许值得寻找人们在这方面所做的工作。如果您假设股票可以根据其波动性以二元方式在每个时间段上涨或下跌,但趋势与无风险回报率一致,那么随着时间段的缩短,这种二项分布趋势趋于对数正态,是否有特殊原因使用
r=np.random.randn(100)/100+0.001
而不是
r=np.随机.正常(0.001,0.01,大小=100)
?我通常更喜欢后者,因为它非常清楚什么是平均值,什么是标准差分。综合答案。在交易期权估值方面做了很多工作,所以也许值得寻找人们在这方面所做的工作。如果您假设股票可以根据其波动性以二元方式在每个时间段上涨或下跌,但趋势与无风险回报率一致,那么随着时间段的缩短,这种二项分布趋势趋于对数正态,是否有特殊原因使用
r=np.random.randn(100)/100+0.001
而不是
r=np.随机.正常(0.001,0.01,大小=100)
?我通常更喜欢后者,因为它非常清楚什么是平均值,什么是STDEV。