我有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中有一天價格有多個價格應該用於每筆交易? –