Python Pandas 数据框 : portfolio backtesting investing cashflows on different dates

标签 python pandas portfolio

假设有以下返回数据帧:

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()

现在假设我想对两种 Assets 的投资进行回测,同时假设现金流量不同时进行投资:

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 的 20,000 美元正现金流和 Google 的 80,000 美元根据各自的每日返回增长?

目前我正在对每个位置(列)进行迭代,然后对第 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 Pandas 数据框 : portfolio backtesting investing cashflows on different dates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018311/

相关文章:

portfolio - 将代码带入编程工作面试有什么问题?

python - Docker 中的 R、Python、rpy2 和 drc 包

python - 如何修复错误 chromedriver 服务意外退出。状态代码为 : -6

python - 在 PyQt5 中截取网页

python - Pandas 将 float append 到 for 循环中的列

python - Pandas sort_values 没有正确排序数字

python - Pandas :在一组中使用多个功能

html - 如何防止文本显示在搜索引擎中? (如何取消搜索引擎优化特定文本)

python - 用于存储交叉引用的最合适的文件格式

html - 未能使投资组合响应