让我们假设具有以下返回的DataFrame:
import numpy as np
import pandas as pd
import pandas.io.data as web
data = web.DataReader(['AAPL','GOOG'],data_source='google')
returns = data['Close'].pct_change()
现在,假设我要对这两种资产的投资进行回测,并且还假设现金流量不是同时投资的:
positions = {}
positions['APPL'] = {returns.index[10]: 20000.0}
positions['GOOG'] = {returns.index[20]: 80000.0}
wealth = pd.DataFrame.from_dict(positions).reindex(returns.index).fillna(0.0)
我的问题是:是否有一种Python方式可以根据各自的每日收益来让苹果公司的2万美元和谷歌的8万美元的正现金流量增长?
目前,我正在按每个位置(列)然后按第i行进行迭代:
wealth.ix[i] = wealth.ix[i-1] * (1 + returns[i])
但是我知道使用Python和Pandas可以避免这种迭代。
感谢您的宝贵时间。
link to iPython Notebook
西蒙妮
最佳答案
首先,因为您保留了投资,所以您需要更改头寸以进行补仓。
pos = pd.DataFrame.from_dict(positions).reindex(returns.index).fillna(method="ffill")
然后您需要
cumprod
wealth = pos.shift() * (1+returns).cumprod(axis=0)
shift
是必需的,因为您在第一天没有得到退货。关于python - Python Pandas Dataframe:投资组合在不同日期回测投资现金流量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25018311/