让我们假设有以下返回的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可以经常避免这种迭代。
感谢您花费时间。
西蒙
答案 0 :(得分:1)
首先,您需要将您的头寸更改为预付款,因为您保留了投资。
pos = pd.DataFrame.from_dict(positions).reindex(returns.index).fillna(method="ffill")
然后你需要cumprod
wealth = pos.shift() * (1+returns).cumprod(axis=0)
shift
是必要的,因为你没有在第一天收到回报。