我有orders.csv
一个名为orders_df
数据帧:矢量化操作创建一个新的数据帧
Symbol Order Shares
Date
2011-01-10 AAPL BUY 100
2011-01-13 AAPL SELL 200
2011-01-13 IBM BUY 100
2011-01-26 GOOG SELL 200
我最终orders_df = orders_df.sort_index()
排序的数据帧。
然后,我创建一个symbols
像这样:
symbols = np.append(orders_df.loc[:, 'Symbol'].unique(), 'SPY')
这才是我的第二个数据帧df_prices
。
df_prices = get_data(symbols, orders_df.index, addSPY=False)
df_prices.loc[:, 'CASH] = 1.0
打印出:
AAPL IBM GOOG XOM SPY CASH
Date
2011-01-10 150 100 50 400 100 1.0
2011-01-13 250 200 500 100 100 1.0
2011-01-13 250 200 500 100 100 1.0
2011-01-26 100 150 100 300 50 1.0
现在,我初始化第三个数据帧:”
df_trades = pd.DataFrame(0, df_prices.index, columns=list(df_prices))
我需要填写使用前两次的正确值这个数据帧日期帧。如果我BUY
AAPL
,我想乘Shares
从orders_df
价格AAPL
次-1
。如果它是SELL
我不会乘以-1
。我将该值放在正确的CASH
列中。对于其他专栏,我只需在交易日内复制每只股票的Shares
。
AAPL IBM GOOG XOM SPY CASH
Date
2011-01-10 100 0 0 0 0 -15000
2011-01-13 -200 0 0 0 0 50000
2011-01-13 0 100 0 0 0 -20000
2011-01-26 0 0 -200 0 0 20000
如何使用矢量化操作实现df_trades
?
UPDATE
如果我没有:
df_prices = get_data(symbols, orders_df.index, addSPY=False)
df_prices.loc[:, 'CASH] = 1.0
打印出
AAPL IBM GOOG XOM SPY CASH
2011-01-10 340.99 143.41 614.21 72.02 123.19 1.0
2011-01-11 340.18 143.06 616.01 72.56 123.63 1.0
2011-01-12 342.95 144.82 616.87 73.41 124.74 1.0
2011-01-13 344.20 144.55 616.69 73.54 124.54 1.0
2011-01-14 346.99 145.70 624.18 74.62 125.44 1.0
2011-01-18 339.19 146.33 639.63 75.45 125.65 1.0
2011-01-19 337.39 151.22 631.75 75.00 124.42 1.0
我怎么会产生df_trades
呢?
示例值不再有效fyi。
你能证明你的非量化代码? – Quickbeam2k1
我还没有建立'df_trades'。这些就是价值应该是的。 – dirtysocks45
我不太了解你的df_trades的逻辑。如果我以150的价格购买100 APPL,第一现金价值不应该是-15000吗?你想df_trades类似于你的库存还是库存变化?如果price_df中有一天价格有多个价格应该用于每笔交易? –