我正在处理股票(何时买入/卖出以及持有多少股票)
我是一名尝试从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)))
我想要的是,对于每一点,当我购买股票时,而不是拥有&#34; 100&#34;,我想拥有
decision2$cash[i-1]/decision2$numberbuys[i]/price
哪会影响期间[i]的现金,从而影响[i + 1]等股票的数量。
有人可以帮我这个吗?
如果它太混乱我很抱歉,我尽量保持清醒。
提前谢谢
答案 0 :(得分:0)
如果我找对你,那么下一个实现就会遇到问题:
decision2$cash[i-1]/decision2$numberbuys[i]/price
。
con <- textConnection("AAPL MSFT cash cashmov numberbuys
100 0 1000000 14000 1
-100 0 1014500 -14500 0
0 100 1007200 7300 1
100 100 992400 14800 1
100 -100 999700 -7300 0
100 0 999700 0 0
-100 100 1007600 -7900 1")
decision2 <- read.table(con, header = T)
df <- data.frame(cash = decision2$cash, numberbuys = decision2$numberbuys)
#cash.offset column is decision2$cash[i-1]
df$cash.offset <- c(NA, df$cash[1:nrow(df) - 1])
df$res <- df$cash.offset / df$numberbuys
df$AAPL <- df$res / decision2$AAPL
df$MSFT <- df$res / decision2$MSFT
df$AAPL[is.infinite(df$AAPL)] <- 0
df$MSFT[is.infinite(df$MSFT)] <- 0
print(df)
cash numberbuys cash.offset res AAPL MSFT
1 1000000 1 NA NA NA NA
2 1014500 0 1000000 Inf 0 0
3 1007200 1 1014500 1014500 0 10145
4 992400 1 1007200 1007200 10072 10072
5 999700 0 992400 Inf 0 0
6 999700 0 999700 Inf 0 0
7 1007600 1 999700 999700 -9997 9997