【发布时间】:2017-07-25 23:13:25
【问题描述】:
我正在处理股票(何时买入/卖出以及持有多少股票)
我是一个初学者,试图从 Excel 中的小样本量转移到 R 中的更大样本量。
我将尝试用一个可重现的例子来解释我的问题。如果无法理解,请告诉我,我会尽力澄清。
我有两只股票:
AAPL.price <- c(140,145,150,148,152,156,153)
MSFT.price <- c(70,75,73,74,73,76,74)
price <- data.frame (AAPL.price,MSFT.price)
我还有一个数据框,它告诉我何时买入和何时卖出给定股票(1 是买入,-1 是卖出)
AAPL <- c(1,-1,0,1,0,0,-1)
MSFT <- c(0,0,1,0,-1,0,1)
decision <- data.frame (AAPL,MSFT)
此外,我还创建了一个公式,告诉我在每个时间点我持有多少股票。但是,由于股票数量取决于可用现金等因素,我创建了一个函数,它总是告诉我,当我购买股票时,我总是减 100(只是为了简单起见,希望我以后可以改变它)。
函数是:
numberstocks <- function(x) {
newValue <- 0
for (i in 1:length(x)) {
if (x[i] == -1) {
newValue <- -100
} else if (x[i] == 1) {
newValue <- 100
} else if (x[i] == 0 && newValue != 100) {
newValue <- 0
}
x[i] <- newValue
}
return(x)
}
通过应用decision2 <- as.data.frame (lapply(decision,numberstocks)),我得到一个数据框,当我持有股票时价值为 100,当我卖出股票时价值为-100。
之后,我开始计算现金。为此,我在数据框中添加了两列:一列是我的现金流动(来自买卖),另一列是我的实际现金价值。
positivevalues <- function (x)
sapply (seq_along(x),function (i) {
if (x[i] < -0.5) {
100
}else{
x[i]
}
})
decision3 <- as.data.frame (lapply(decision2[,1:2], positivevalues))
decision2$cashmov <- with (decision2, c(rowSums(decision*price*decision3)))
decision2$cash <- with (decision2, c(1000000, matrix(0,6,1)))
decision2$cash <- 0
for (i in 1) {
decision2$cash [i] = 1000000
}
for (i in 2:7){
decision2$cash [i] = decision2$cash[i-1]-decision2$cashmov[i]
}
最后,我还创建了一个列,告诉我每个时期我购买的股票数量。
decision2$numberbuys <- with (decision2, c(rowSums(decision>0)))
我想要的是,对于每一点,当我购买股票时,我希望拥有“100”而不是“100”
decision2$cash[i-1]/decision2$numberbuys[i]/price
这会影响 [i] 期的现金,从而影响 [i+1] 期的股票数量等等。
有人可以帮我解决这个问题吗?
对不起,如果太混乱了,我尽量说清楚。
提前谢谢你
【问题讨论】: