在R中查找最小运行和最大值

时间:2016-07-15 21:06:56

标签: r algorithm statistics stocks

我有一整天的股票价格向量:

> head(bidStock)
         [,1]
[1,] 1179.754
[2,] 1178.000
[3,] 1178.438
[4,] 1178.367
[5,] 1178.830
[6,] 1178.830

我想找到两件事。因为我算法经历了一天。我希望它能找到当前点与历史最小值和格言在一天中的距离。

'stock'包中有一个名为'mdd'的函数,它在一天中找到最大值下降(即最低值,对应于距离当天历史最大值最远的点)。但是,我不想只是最低值,我想要一个向量。我已经提出了下面的代码来做到这一点。但是,我还需要一种方法来处理一个点与运行历史最小值的距离。

    mddVec<-rep(NA,1)
   for (i in 1: length(bidStock)){
     mddVec[i]<-mdd(bidStock[1:i])
     }

最后,典型价格按(最大(日)+分(日)+收盘价)/ 3计算。是否有办法使用全天运行历史最小值和最大值来使其像平均值一样运行。

感谢您的提前帮助

1 个答案:

答案 0 :(得分:3)

您只需要cummmincummax来计算累积最小值和最大值,您可以从中计算出最小值和最大值之间的距离,以及您喜欢的任何排列:

# 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