对于某个股票的每次买入交易,必须存在相同股票的卖出交易来关闭该头寸。如果不存在卖出交易或股票数量变为零,则在卖出价格处放置NA。
说明:
我们以34.56的价格购买了100股AIG股票。接下来,我们必须为同一股票AIG找到退出(SELL)交易。下面存在此交易,共有600股。因此,我们用100股写入此交易,从600股的SELL交易中减少股份至500股,并以买入价格和卖出价格将此交易记录在宽格式中。
下一个交易是GOOG。对于这支股票,我们找到了两个卖出交易,并将它们都记录在宽格式中,但还有100股未售,因此我们将此交易放置为“未完成”,在卖出价格处放置NA。
如有必要,我可以稍后在伪代码中提供算法。但我希望我的解释很清楚。
我的问题是:使用R编写干净且矢量化的代码很容易吗?这个算法在命令式编程语言(如C ++)中很容易实现。但是在R中,我遇到了麻烦。
EDIT 1:添加了R的输入和输出数据框。
inputDF1 <- data.frame(Ticker = c("AIG", "GOOG", rep("AIG", 3), rep("GOOG", 2), rep("NEM", 3)), Side = c(rep("BUY", 4), rep("SELL", 3), "BUY", rep("SELL", 2)), Shares = c(100, 400, 200, 400, 600, 200, 100, 100, 50, 50), Price = c(34.56, 457, 28.56, 24.65, 30.02, 460, 461, 45, 56, 78))
inputDF2 <- data.frame(Ticker = c(rep("AIG", 3), rep("GOOG", 3)), Side = c(rep("BUY", 2), "SELL", "BUY", rep("SELL", 2)), Shares = c(100, 100, 200, 300, 200, 100), Price = c(34, 35, 36, 457, 458, 459))
inputDF3 <- data.frame(Ticker = c(rep("AIG", 3), rep("GOOG", 3)), Side = c(rep("BUY", 2), "SELL", "BUY", rep("SELL", 2)), Shares = c(100, 100, 100, 300, 100, 100), Price = c(34, 35, 36, 457, 458, 459))
outputDF1 <- data.frame(Ticker = c("AIG", rep("GOOG", 3), rep("AIG", 3), rep("NEM", 2)), Side = rep("BUY", 9), Shares = c(100, 200, 100, 100, 200, 300, 100, 50, 50), BuyPrice = c(34.56, 457, 457, 457, 28.56, 24.65, 24.65, 45, 45), SellPrice = c(30.02, 460, 461, NA, 30.02, 30.02, NA, 56, 78))
outputDF2 <- data.frame(Ticker = c(rep("AIG", 2), rep("GOOG", 2)), Side = rep("BUY", 4), Shares = c(100, 100, 200, 100), BuyPrice = c(34, 35, 457, 457), SellPrice = c(36, 36, 458, 459))
outputDF3 <- data.frame(Ticker = c(rep("AIG", 2), rep("GOOG", 3)), Side = rep("BUY", 5), Shares = rep(100, 5), BuyPrice = c(34, 35, rep(457, 3)), SellPrice = c(36, NA, 458, 459, NA))
EDIT 2: 更新了 R 的示例、输入/输出数据