在 R 中找到 运行 最小值和最大值
Find running minimum and Max in R
我有一个全天股票价格的向量:
> head(bidStock)
[,1]
[1,] 1179.754
[2,] 1178.000
[3,] 1178.438
[4,] 1178.367
[5,] 1178.830
[6,] 1178.830
我想找到两件事。正如我的算法经历了一天。我想让它找出当前点距离全天的历史最小值和最大值有多远。
'stocks' 包中有一个名为 'mdd' 的函数,它可以找到全天的最大跌幅(即对应于距离历史最大值最远的点的最低值那天)。但是,我不想要最低值,我想要一个向量。我想出了下面的代码来做到这一点。但是,我还需要一种方法来处理一个点与 运行 历史最小值的距离。
mddVec<-rep(NA,1)
for (i in 1: length(bidStock)){
mddVec[i]<-mdd(bidStock[1:i])
}
最后,典型价格由(max(day) + min(day) + custom price)/3计算。有没有一种方法可以像 运行 平均值那样使用全天的 运行 历史最小值和最大值。
提前感谢您的帮助
您只需要 cummmin
和 cummax
来计算累积最小值和最大值,您可以从中计算出您离最小值和最大值还有多远,以及您喜欢的任何排列:
# in base R, as data.frame
df <- data.frame(price = bidStock,
min = cummin(bidStock),
max = cummax(bidStock))
df$off_min <- df$price - df$min
df$off_max <- df$price - df$max
df$typical_price <- (df$price + df$min + df$max) / 3 # using price for closing price
df
## price min max off_min off_max typical_price
## 1 1179.754 1179.754 1179.754 0.000 0.000 1179.754
## 2 1178.000 1178.000 1179.754 0.000 -1.754 1178.585
## 3 1178.438 1178.000 1179.754 0.438 -1.316 1178.731
## 4 1178.367 1178.000 1179.754 0.367 -1.387 1178.707
## 5 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
## 6 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
# or in dplyr
library(dplyr)
data.frame(price = bidStock) %>%
mutate(min = cummin(bidStock),
max = cummax(bidStock),
off_min = price - min,
off_max = price - max,
typical_price = (price + min + max) / 3)
## price min max off_min off_max typical_price
## 1 1179.754 1179.754 1179.754 0.000 0.000 1179.754
## 2 1178.000 1178.000 1179.754 0.000 -1.754 1178.585
## 3 1178.438 1178.000 1179.754 0.438 -1.316 1178.731
## 4 1178.367 1178.000 1179.754 0.367 -1.387 1178.707
## 5 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
## 6 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
我有一个全天股票价格的向量:
> head(bidStock)
[,1]
[1,] 1179.754
[2,] 1178.000
[3,] 1178.438
[4,] 1178.367
[5,] 1178.830
[6,] 1178.830
我想找到两件事。正如我的算法经历了一天。我想让它找出当前点距离全天的历史最小值和最大值有多远。
'stocks' 包中有一个名为 'mdd' 的函数,它可以找到全天的最大跌幅(即对应于距离历史最大值最远的点的最低值那天)。但是,我不想要最低值,我想要一个向量。我想出了下面的代码来做到这一点。但是,我还需要一种方法来处理一个点与 运行 历史最小值的距离。
mddVec<-rep(NA,1)
for (i in 1: length(bidStock)){
mddVec[i]<-mdd(bidStock[1:i])
}
最后,典型价格由(max(day) + min(day) + custom price)/3计算。有没有一种方法可以像 运行 平均值那样使用全天的 运行 历史最小值和最大值。
提前感谢您的帮助
您只需要 cummmin
和 cummax
来计算累积最小值和最大值,您可以从中计算出您离最小值和最大值还有多远,以及您喜欢的任何排列:
# in base R, as data.frame
df <- data.frame(price = bidStock,
min = cummin(bidStock),
max = cummax(bidStock))
df$off_min <- df$price - df$min
df$off_max <- df$price - df$max
df$typical_price <- (df$price + df$min + df$max) / 3 # using price for closing price
df
## price min max off_min off_max typical_price
## 1 1179.754 1179.754 1179.754 0.000 0.000 1179.754
## 2 1178.000 1178.000 1179.754 0.000 -1.754 1178.585
## 3 1178.438 1178.000 1179.754 0.438 -1.316 1178.731
## 4 1178.367 1178.000 1179.754 0.367 -1.387 1178.707
## 5 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
## 6 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
# or in dplyr
library(dplyr)
data.frame(price = bidStock) %>%
mutate(min = cummin(bidStock),
max = cummax(bidStock),
off_min = price - min,
off_max = price - max,
typical_price = (price + min + max) / 3)
## price min max off_min off_max typical_price
## 1 1179.754 1179.754 1179.754 0.000 0.000 1179.754
## 2 1178.000 1178.000 1179.754 0.000 -1.754 1178.585
## 3 1178.438 1178.000 1179.754 0.438 -1.316 1178.731
## 4 1178.367 1178.000 1179.754 0.367 -1.387 1178.707
## 5 1178.830 1178.000 1179.754 0.830 -0.924 1178.861
## 6 1178.830 1178.000 1179.754 0.830 -0.924 1178.861