- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
希望有人可以提供一个给定日期的函数,它将返回纽约证券交易所当月的交易日。
如果考虑到假期,那就是额外的好处,如果没有,我也不太担心。
提前致谢!
最佳答案
我的个人包中有一个名为 TradingDates
的函数,它使用假期日历来自timeDate包裹返回指定年份中所有交易日的日期。包括我该函数的代码位于本文末尾以及函数中PrevTradingDate
和 NextTradingDate
这是此次交易的动机TradingDates
函数。
一旦你获取了该代码,就很容易创建一个返回的函数给定日期属于该月的哪个交易日。现在,输入日期必须是(单一)交易日期,但这可以很容易地更改,具体取决于您的偏好。
TradingDayOfMonth <- function(Date, FUN=holidayNYSE, ...) {
if (length(Date) > 1) stop('not vectorized; Date should be length 1')
Date <- as.Date(Date, ...)
tdy <- TradingDates(format(Date, "%Y"), FUN=FUN) #trading dates in year
if (!Date %in% tdy) stop("Date is not a Trading Date")
tdm <- tdy[format(tdy, "%m") %in% format(Date, "%m")] # trading dates in the same month as "Date"
which(tdm == Date)
}
R> PrevTradingDate()
[1] "2012-11-02"
R> NextTradingDate()
[1] "2012-11-05"
R> TradingDayOfMonth(PrevTradingDate())
[1] 2
R> TradingDayOfMonth(NextTradingDate())
[1] 3
R> TradingDayOfMonth('2012-11-15')
[1] 11
<小时/>
上述工作所需的代码:
#' Get Trading Dates for one or more years
#'
#' Get a vector of dates of non-holiday weekdays.
#'
#' This uses holiday calendar functions (\code{holidayNYSE} by default)
#' from the \emph{timeDate} package. If \emph{timeDate} is not loaded, it
#' will be temporarily loaded, then unloaded \code{on.exit}.
#'
#' @param year vector of 4 digit years or something that is coercible to
#' a vector 4 digit years via \code{as.numeric}
#' @param FUN a function that takes a \code{year} argument and returns a vector
#' that can be coerced to a \code{Date}. \code{holidayNYSE} by default. Most
#' likely, this will be one of: \sQuote{holidayLONDON}, \sQuote{holidayNERC},
#' \sQuote{holidayNYSE}, \sQuote{holidayTSX}, \sQuote{holidayZURICH}
#' @return a vector of all dates in \code{years} that are weekdays and not
#' holidays.
#' @author GSee
#' @examples
#' \dontrun{
#' TradingDates(2012)
#' TradingDates(2010:2011)
#' }
#' @export
TradingDates <- function(year=format(Sys.Date(), "%Y"), FUN=holidayNYSE) {
# the next few lines should be removed when this code is added to a package
# that Imports timeDate
if (!"package:timeDate" %in% search()) {
suppressPackageStartupMessages({
if (!require(timeDate)) {
stop("timeDate must be installed to use this function.")
}
})
on.exit(detach(package:timeDate, unload=TRUE))
}
## End of code that should be removed when this is added to a package
year <- as.numeric(year)
fun <- match.fun(FUN)
do.call('c', lapply(year, function(y) {
holidays <- as.Date(fun(year=y))
all.days <- seq.Date(as.Date(paste(y, '01-01', sep='-')),
as.Date(paste(y, '12-31', sep='-')), by='days')
nohol <- all.days[!all.days %in% holidays]
nohol[!format(nohol, '%w') %in% c("6", "0")] #neither holiday nor weekend
}))
}
#' Get Date of previous (next) trading day
#'
#' Get the Date of the previous (next) trading day.
#'
#' For \code{PrevTradingDate}, \code{n} is the number of days to go back. So,
#' if \code{n} is 2 and today is a a Monday, it would return the date of the
#' prior Thursday because that would be 2 trading days ago.
#' \code{n} works analogously in \code{NextTradingDate}.
#'
#' The maximum value that \code{n} can be is the total number of days in the
#' year prior to \code{Date} plus the total number of years in the current
#' year of \code{Date}. So, on the last day of the year, the max value of
#' \code{n} will usually be \code{504} (because most years have 252 trading
#' days). One the first day of the year, the max value of \code{n} will usually
#' be \code{252}.
#'
#' @param n number of days to go back. 1 is the previous trading day; 2 is the
#' trading day before that, etc. \code{n} should be less than 365, but see
#' details
#' @param Date a \code{Date} or something that can be coerced to a \code{Date}
#' @return \code{PrevTradingDate} returns the date of the previous trading day
#' up to, but not including, \code{Date}. \code{NextTradingDate} returns the
#' date of the next trading day.
#' @author GSee
#' @seealso \code{\link{TradingDates}}
#' @examples
#' \dontrun{
#' PrevTradingDate()
#' PrevTradingDate('2012-01-03')
#' NextTradingDate()
#' NextTradingDate('2012-12-24')
#' }
#' @export
#' @rdname PrevTradingDate
PrevTradingDate <- function(Date=Sys.Date(), n=1) {
stopifnot(require(xts)) #remove this line when this is added to a package that Imports xts (needed for first/last)
D <- as.Date(Date)
y <- as.numeric(format(D, "%Y"))
trading.days <- TradingDates(y)
out <- trading.days[trading.days < Date]
if (length(out) >= n) {
first(last(out, n))
} else {
prev.year.td <- TradingDates(y - 1)
max.n <- length(out) + length(prev.year.td)
if (n > max.n) stop("'n' is too large. Try something less than 252.")
new.n <- n - length(out) # we need this many trading days from previous year
# if it's the 1st trading day of the year, return the last trading date of
# previous year
first(last(TradingDates(y - 1), new.n))
}
}
#' @export
#' @rdname PrevTradingDate
NextTradingDate <- function(Date=Sys.Date(), n=1) {
stopifnot(require(xts)) #remove this line when this is added to a package that Imports xts (needed for first/last)
D <- as.Date(Date)
y <- as.numeric(format(D, "%Y"))
trading.days <- TradingDates(y)
out <- trading.days[trading.days > Date]
if (length(out) >= n) {
last(first(out, n))
} else {
next.year.td <- TradingDates(y + 1)
max.n <- length(out) + length(next.year.td)
new.n <- n - length(out) # how many trading days we need from next year
if (n > max.n) stop("'n' is too large. Try something less than 252.")
# if it's the last trading day of the year, return the first trading date of
# next year
last(first(TradingDates(y + 1), new.n))
}
}
关于r - 计算 NYSE 交易日的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215246/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!