gpt4 book ai didi

r - 从头开始创建交易日日历

转载 作者:行者123 更新时间:2023-12-04 23:59:15 26 4
gpt4 key购买 nike

我只是花了一天时间调试一些 R 代码才发现我遇到的问题是由雅虎使用 getSymbol 返回的数据中缺少日期引起的。在我写这篇文章的时候,雅虎正在返回这个:

           QQQ.Open QQQ.High QQQ.Low QQQ.Close QQQ.Volume QQQ.Adjusted
2014-01-03 87.27 87.35 86.62 86.64 35723700 86.64
2014-01-06 86.66 86.76 86.00 86.32 32073100 86.32
2014-01-07 86.72 87.25 86.56 87.12 25860600 87.12
2014-01-08 87.14 87.55 86.95 87.31 27197400 87.31
2014-01-09 87.63 87.64 86.72 87.02 23674700 87.02
2014-01-13 87.18 87.48 85.68 86.01 48842300 86.01
2014-01-14 86.30 87.72 86.30 87.65 37178900 87.65
2014-01-15 88.03 88.54 87.94 88.37 39835600 88.37
2014-01-16 88.30 88.51 88.16 88.38 31630100 88.38
2014-01-17 88.11 88.37 87.67 87.88 36895800 87.88

缺少 2014-01-10。其他 ETF 会返回该日期。我希望雅虎将在这些天的某一天修复数据(数据在 Google 上),但现在它是错误的,导致我的代码有些不合适。

为了解决这个问题,我想检查我的数据以确保市场开放的所有日期都有数据。如果在某个包中有一种固定的方法可以做到这一点,我会很感激有关这方面的信息,但为此我开始使用 timeDate 包编写一些代码。但是,我最终遇到了我不明白的 xts 索引问题。代码如下:
library(timeDate)
library(quantmod)

MyZone = "UTC"
Sys.setenv(TZ = MyZone)

YearStart = "1990"
YearEnd = "2014"
currentYear = getRmetricsOptions("currentYear")

dateStart = paste0(YearStart, "-01-01")
dateEnd = paste0(YearEnd, "-12-31")

DayCal = timeSequence(from = dateStart, to = dateEnd, by="day", zone = MyZone)

TradingCal = DayCal[isBizday(DayCal, holidayNYSE())]

testSym = "QQQ"
getSymbols(testSym, src="yahoo", from = dateStart, to = dateEnd)

testData = get(testSym)

head(testData)
tail(testData, n=10)

#Save date range of data being checked
firstIndex = index(testData)[1]
lastIndex = index(testData)[nrow(testData)]

#Create an xts series covering all dates
AllDates = xts(x=rep(1, length.out=length(TradingCal)),
order.by=TradingCal, tzone = MyZone)

head(AllDates)
tail(AllDates)

index(AllDates)[1:20]
index(testData)[1:20]

tzone(AllDates)
tzone(testData)

#Create an xts object that has all dates covered
#by testSym but using calendar I created
CheckData = subset(AllDates, ((index(AllDates)>=firstIndex) &&
(index(AllDates)<=lastIndex))
)

class(index(AllDates))
class(index(testData))

这里的目标是创建一个“已知的好日历”,我可以用它来创建一个简单的 xts 对象。使用该对象,我将检查该对象中的每个索引是否在被测试的数据中都有相应的索引。但是,我的索引似乎不兼容,所以我没有得到那么远。当我运行代码时,我最后得到了这个:
> CheckData = subset(AllDates, ((index(AllDates)>=firstIndex) && (index(AllDates)<=lastIndex))
+ )
Error in `>=.default`(index(AllDates), firstIndex) :
comparison (5) is possible only for atomic and list types
> class(index(AllDates))
[1] "timeDate"
attr(,"package")
[1] "timeDate"
> class(index(testData))
[1] "Date"
>

有人可以向我展示我在这里的错误方式,以便我可以继续前进吗?谢谢!

最佳答案

您需要转换 TradingCalDate :

TradingDates <- as.Date(TradingCal)

这是在 TradingDates 中查找索引值的另一种方法不在您的 testData 中指数。
AllDates <- xts(,TradingDates)
testSubset <- paste(start(testData), end(testData), sep="/")
CheckData <- merge(AllDates, testData)[testSubset]
BadDates <- CheckData[is.na(rowSums(CheckData))]

关于r - 从头开始创建交易日日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com