我想通过使用模拟回报来模拟一系列股票价格。例如,我将初始股票价格设置为 70 美元,并创建了一个具有 10 个回报期的熊猫系列:
returns = pd.Series([1.01,1.02,1.03,1.01,0.99,0.98,1.07,0.99,1.03,1.03])
如何获得 10 个周期的一系列股票价格?(第一个价格数据应该是初始股票价格(70) * 1.01
;第二个应该是70 * 1.01 * 1.02
;第三个应该是...直到20日。
initial stock price = 70
returns = pd.Series([1.01,1.02,1.03,1.01,0.99,0.98,1.07,0.99,1.03,1.03])
IIUC,使用 cumprod
:
initial_stock_price = 70
returns = pd.Series([1.01,1.02,1.03,1.01,0.99,0.98,1.07,0.99,1.03,1.03])
returns.cumprod() * initial_stock_price
输出:
0 70.700000
1 72.114000
2 74.277420
3 75.020194
4 74.269992
5 72.784592
6 77.879514
7 77.100719
8 79.413740
9 81.796153
dtype: float64
您可以使用reduce将列表中的所有值相乘,然后乘以价格:
from functools import reduce
import pandas as pd
inital_price = 70
returns = pd.Series([1.01,1.02,1.03,1.01,0.99,0.98,1.07,0.99,1.03,1.03])
[inital_price * reduce(lambda x, y: x*y, returns[0:i+1]) for i in range(len(returns))]
输出:
[70.7,
72.114,
74.27742,
75.0201942,
74.269992258,
72.78459241284,
77.8795138817388,
77.10071874292142,
79.41374030520907,
81.79615251436535]