Python Pandas Dataframe:投资组合回测在不同日期投资现金流

时间:2014-07-29 14:49:43

标签: python pandas portfolio

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

我的问题是:根据各自的每日回报,是否有一种pythonic方式让Apple上的20k美元正现金流和Google上的80k美元增长?

目前我正在按每个位置(列)进行迭代,然后按第i行进行迭代:

wealth.ix[i] = wealth.ix[i-1] * (1 + returns[i])

但我知道使用Python和Pandas可以经常避免这种迭代。

感谢您花费时间。

link to iPython Notebook

西蒙

1 个答案:

答案 0 :(得分:1)

首先,您需要将您的头寸更改为预付款,因为您保留了投资。

pos = pd.DataFrame.from_dict(positions).reindex(returns.index).fillna(method="ffill")

然后你需要cumprod

wealth = pos.shift() * (1+returns).cumprod(axis=0)

shift是必要的,因为你没有在第一天收到回报。