【发布时间】:2016-04-09 18:36:50
【问题描述】:
在升级 Anaconda(因此升级 pandas 和 numpy)之前运行的脚本存在问题
我有一个 DataFrame,我想使用其中的一列并乘以另一个 DataFrame 的一列中的值,将最终值输出到新 DataFrame 中的一列。正如我所说,这段代码一直有效,直到我升级到 pandas 0.17。
class MarketOnClosePortfolio(Portfolio):
def __init__(self, symbol, bars, signals, initial_capital=10000.0):
self.symbol = symbol
self.bars = bars
self.signals = signals
self.initial_capital = float(initial_capital)
self.positions = self.generate_positions()
def generate_positions(self):
positions = pd.DataFrame(index=signals.index).fillna(0.0)
positions[self.symbol] = signals['signal']*10
return positions
def backtest_portfolio(self):
portfolio = self.positions*self.bars['Close']
pos_diff = self.positions.diff()
portfolio = pd.DataFrame(index=signals.index)
portfolio['holdings'] = (self.positions*self.bars['Close'])
portfolio['cash'] = self.initial_capital - (pos_diff*self.bars['Close']).sum(axis=1).cumsum()
portfolio['total'] = portfolio['cash'] + portfolio['holdings']
portfolio['returns'] = portfolio['total'].pct_change()
return portfolio
if __name__ == "__main__":
portfolio = MarketOnClosePortfolio(symbol, bars, signals, initial_capital=10000.0)
returns = portfolio.backtest_portfolio()
我在尝试执行 returns = portfolio.backtest_portfolio() 引用 portfolio['holdings'] = self.positions*self.bars['Close'] 并返回时出现错误
ValueError: 传递的项目数错误 3509,位置暗示 1。
self.positions 有这个样子(它的索引在 3600 左右):
Symbol
1 int
2 int
3 int
self.bars.Close 有这个外观(索引大小与 self.positions 相同):
Close
1 float
2 float
3 float
我在这里忽略了一些明显的东西吗?我知道我传递的是一个系列而不是一个单一的值,但我很困惑为什么我会得到“放置意味着 1”。
非常感谢任何帮助。
【问题讨论】:
-
@Stefan。 self.positions 是
symbol index value形式的数据框,大约有 3600 行。 -
你试过self.positions.shape和self.bars['close'].shape吗?顺便说一句,看起来您正在创建
portfolio两次。我猜self.bars['Close']只选择了一个项目,可能是row index,而不是你可能想要的column。可能想试试self.bars.loc[:, 'Close']]。 -
好的。有趣的。它 self.bars.Close.shape 返回 (3559, ) 但是当我 print(bars.head()) 它具有所有预期值。 self.positions.shape 返回与应具有的 1 列相同的索引值。 (3559, 1)
-
您是否要将
self.bars.close与self.positions中的所有columns相乘?没有看到data.. -
是的,我是。 self.positions 只有一列(符号)定义给定股票代码中的头寸。我在问题中添加了一小部分数据格式
标签: python numpy pandas quantitative-finance