我有美国股市的每日数据。我想从中获取每周时间序列并计算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)
答案 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
对其数据进行分组,将min
和Week
函数应用于您的数据。
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个日期就会开始。