让我们假设具有以下返回的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/

10-11 05:49