如何在每日时间序列数据中获得每周最高或最低的最低值,然后将其作为每周时间序列?

时间:2018-01-29 04:27:21

标签: r go

我有美国股市的每日数据。我想从中获取每周时间序列并计算SMA和EMA。为了能够做到这一点,要求是从每周最高高度创建每周时间序列,并从每周最低低点创建另一个每周时间序列。在那之后,我会计算他们的sma和ema然后分配到一周中的每一天(一个时期前进)。所以,第一个问题首先,我如何从每天使用R(任何包)获得每周,或者更好,如果你能告诉我一个算法,任何语言,但首选是Golang?无论如何,如果需要,我可以在golang中重写它。

   Date           High     Low     Week(High)   Week(Low)   WkSMAHigh 2DP     WkSMALow 2DP 
                                                         (one period forward)   
Dec 24 Fri         6        3           8            3            5.5              1.5       
Dec 23 Thu         7        5                                     5.5              1.5
Dec 22 Wed         8        5                                     5.5              1.5
Dec 21 Tue         4        4                                     5.5              1.5
Assume Holiday (Dec 20)
Dec 17 Fri         4        3           6            2           None
Dec 16 Thu         4        3
Dec 15 Wed         5        2
Dec 14 Tue         6        4
Dec 13 Mon         6        4
Dec 10 Fri         5        1           5            1           None
Dec 9 Thu          4        3
Dec 8 Wed          3        2
Assume Holiday (Dec 6 & 7)

1 个答案:

答案 0 :(得分:0)

我首先要生成一个列,指定它是哪一周。

您可以使用lubridate包执行此操作,这需要将日期转换为Date类型。它有一个名为week的函数,它返回自1月1日+ 1以来已经过去的完整7天期间的数量。但是我不知道这些数据是否会持续数年。另外我认为有一种更简单的方法可以做到这一点。

我将在下面给出的示例只是通过创建一个只重复整数7次的列来完成它,直到数据帧的长度。

假装您的数据框名为ohlcData

# Create a sequence 7 at a time all the way up to the end of the data frame
# I limit the sequence to the length nrow(ohlcData) so the rounding error
# doesn't make the vectors uneven lengths
ohlcData$Week <- rep(seq(1, ceiling(nrow(ohlcData)/7), each = 7)[1:nrow(ohlcData)]

随着创建,我们可以继续使用plyr包,它具有一个非常有用的函数ddply。此函数将函数应用于由另一列数据分组的数据列。在这种情况下,我们会根据新列max对其数据进行分组,将minWeek函数应用于您的数据。

library(plyr)

weekMax <- ddply(ohlcData[,c("Week", "High")], "Week", numcolwise(max))
weekMin <- ddply(ohlcData[,c("Week", "Low")], "Week", numcolwise(min))

那将为您提供每周的最小值和最大值。为weekMax和weekMin返回的数据帧将包含2列,Week和值。结合这些,但你认为合适。也许是weekExtreme <- cbind(weekMax, weekMin[,2])。如果您希望能够将日期范围与周数相结合,那么从第一个日期开始,每隔7个日期就会开始。