2016-07-15 17 views
-1

Ich habe einen Vektor der Aktienkurse im Laufe des Tages:Finden Mindestlauf und Max in R

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

ich zwei Dinge finden möchten. Wie ich den Algorithmus durch den Tag gehe. Ich möchte herausfinden, wie weit der aktuelle Punkt von dem historischen Minimum und der Maxime des Tages entfernt ist.

Im Paket "stocks" gibt es eine Funktion namens "mdd", die den maximalen Tagesbedarf ermittelt (d. H. Den niedrigsten Wert, der einem Punkt entspricht, der am weitesten vom historischen Maximum des Tages entfernt ist). Ich möchte jedoch nicht nur den niedrigsten Wert, ich möchte einen Vektor. Ich habe den folgenden Code entwickelt, um das zu tun. Ich brauche jedoch einen Weg, wie weit ein Punkt vom laufenden historischen Minimum entfernt ist.

Schließlich wird der typische Preis berechnet durch (max (Tag) + min (Tag) + Schlusskurs)/3. Gibt es eine Möglichkeit, diese Arbeit wie ein laufender Durchschnitt zu gestalten, indem Sie die historischen Min- und Max-Werte den ganzen Tag lang ausführen?

Vielen Dank für Ihre Hilfe im Voraus

+0

Können Sie ein Beispiel Ihrer erwarteten Ausgabe veröffentlichen? – thepule

Antwort

2

Sie müssen nur cummmin und cummax für kumulative Minima und Maxima, von denen Sie, wie weit-Minimum berechnen und maximal Sie sind, und was auch immer Permutationen Sie mögen:

# 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 
+0

gibt es eine Möglichkeit, auch die laufende Standardabweichung zu finden –

+0

Hm, ich kenne keine kumulative Funktion dafür, und Sie können keine mit 'Reduce' machen, weil es keine binäre Funktion ist, aber Sie könnten es berechnen iterativ: 'df $ sd <- sapply (seq_along (df $ preis), funktion (x) {sd (df $ preis [seq (x)])})' – alistaire