일부 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의 경우 반환됩니다. 필자는 야후가 요즘 데이터를 고칠 것이라고 예상한다. (데이터는 구글에있다.)하지만 지금은 내 코드가 어떤 문제를 일으키는 것은 잘못된 것이다.
이 문제를 해결하기 위해 시장이 공개 된 모든 날짜의 데이터가 있는지 확인하기 위해 데이터를 확인하고 싶습니다. 어떤 패키지에서 이것을 수행 할 수있는 방법이 있다면, 그 정보에 감사 하겠지만, 결국에는 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"
>
누군가 내 길을 잘못 표시하여 앞으로 나아갈 수 있습니까? 감사!
TradingDates <- as.Date(TradingCal)
그리고 여기 당신의 testData
인덱스에없는 그 TradingDates
에 인덱스 값을 찾을 수있는 또 다른 방법 :
유용한 정보 : http://stackoverflow.com/a/13220346/967840 – GSee
감사합니다. 실제로 나쁜 날짜를 수정하는 것을 처리 할 수있는 방법은 잘못된 데이터가있는 심볼에 '패치'가있는 MySQL 데이터베이스를 만드는 것입니다. 여기서 패치는 비교할 사전 및 사후 데이터가 있습니다. 귀하의 링크가 도움이 될 것 같아요. 건배! – LGTrader