# Here is the solution:
require(fBasics)
# Be sure that R is running in time zone GMT. # Set your Windows environment variable to "GMT" # Your PC Windows clock can still run in any other time zone! # My clock is now running in Zurich in Europe.
Date = c("2003-10-09", "2003-10-10", "2003-10-13", "2003-10-14") Open = c(1.27, 1.25, 1.27, 1.29) High = c(1.28, 1.28, 1.29, 1.29) Low = c(1.25, 1.25, 1.27, 1.27) Close = c(1.25, 1.27, 1.28, 1.27) Volume = c(152810, 111338, 243843, 180211) Data = data.frame(Open, High, Low, Close, Volume)
# In which time zone are your data recorded? zone = "Australia/Sydney" # At what local time have your data been recorded? # Say, 16:00:00 local time "Australia/Sydney" when the exchange closes? Time = "16:00:00" # At which Financial Center you like to use your Data? FinCenter = "Australia/Sydney"
# Make a timeSeries Object: sydney.ts = timeSeries( data = Data, charvec = paste(Date, Time), units = c("Open", "High", "Low", "Close", "Volume"), zone = "Australia/Sydney", FinCenter = "Australia/Sydney")
sydney.ts # You should get: # Open High Low Close Volume # 2003-10-09 16:00:00 1.27 1.28 1.25 1.25 152810 # 2003-10-10 16:00:00 1.25 1.28 1.25 1.27 111338 # 2003-10-13 16:00:00 1.27 1.29 1.27 1.28 243843 # 2003-10-14 16:00:00 1.29 1.29 1.27 1.27 180211
# Now, you are living at your "FinCenter" in Adelaide, # but the data were recorded in the time "zone" of Sydney:
adelaide.ts = timeSeries( data = Data, charvec = paste(Date, Time), units = c("Open", "High", "Low", "Close", "Volume"), zone = "Australia/Sydney", FinCenter = "Australia/Adelaide") adelaide.ts
# Or, you are living in Melbourne:
melbourne.ts = timeSeries(
data = Data,
charvec = paste(Date, Time),
units = c("Open", "High", "Low", "Close", "Volume"),
zone = "Australia/Sydney",
FinCenter = "Australia/Melbourne") melbourne.ts
# Why does it fail for Perth? # Have a look on the tail of the DST rules for Sydney: tail(Sydney()) # You get: # Sydney offSet # 123 2028-03-25 16:00:00 36000 # 124 2028-10-28 16:00:00 39600 # 125 2029-03-24 16:00:00 36000 # 126 2029-10-27 16:00:00 39600 # 127 2030-03-30 16:00:00 36000 # 128 2030-10-26 16:00:00 39600
# Now for Perth: tail(Perth()) # You get: # Perth offSet # 8 1974-10-26 18:00:00 32400 # 9 1975-03-01 18:00:00 28800 # 10 1983-10-29 18:00:00 32400 # 11 1984-03-03 18:00:00 28800 # 12 1991-11-16 18:00:00 32400 # 13 1992-02-29 18:00:00 28800
# OOPS ... # The DST rules are missing after 1992. # A quick repair: # Let's assume that the DST dates are the same as for Sydney: # and the offset 2 hours (120 Minutes) earlier:
rm(Perth)
PERTH <<- Perth
Perth = function() {
Perth = paste(substring(as.character(Sydney()[52:128,1]), 1, 10), "18:00:00")
offSet = Sydney()[52:128,2] - 2*60*60
rbind(PERTH(), data.frame(Perth, offSet))
}
# Try the complete Perth(): Perth()
perth.ts = timeSeries(
data = Data,
charvec = paste(Date, Time),
units = c("Open", "High", "Low", "Close", "Volume"),
zone = "Australia/Sydney",
FinCenter = "Australia/Perth") perth.ts
# You get: # Open High Low Close Volume # 2003-10-09 14:00:00 1.27 1.28 1.25 1.25 152810 # 2003-10-10 14:00:00 1.25 1.28 1.25 1.27 111338 # 2003-10-13 14:00:00 1.27 1.29 1.27 1.28 243843 # 2003-10-14 14:00:00 1.29 1.29 1.27 1.27 180211
# Is that right, there are 2 hours difference from Perth to Sydney?
# Note there are some other FinCenters which are not up to date. # The list will be checked and updated with the next version of Rmetrics.
# Regards # Diethelm Wuertz
Tom Mulholland wrote:
First things first
R "R version 2.0.1, 2004-11-15" OS.type "windows" GUI "Rgui"
I thought that I had the time and date stuff nearly under control. I don't get the ubiquitous "GMT" warning although I'm not sure that the way I have done it is correct. I use a batch file to invoke R
set TZ=GMT rgui.exe
I have a dataset that I use called tempdata
> str(tempdata)
`data.frame': 300 obs. of 7 variables:
$ date : chr "2003/10/09" "2003/10/10" "2003/10/13" "2003/10/14" ...
$ Open : num 1.27 1.25 1.27 1.29 1.27 1.28 1.32 1.35 1.35 1.34 ...
$ High : num 1.28 1.28 1.29 1.29 1.29 1.31 1.35 1.37 1.37 1.34 ...
$ Low : num 1.25 1.25 1.27 1.27 1.27 1.28 1.31 1.32 1.33 1.32 ...
$ Close : num 1.25 1.27 1.28 1.27 1.28 1.31 1.35 1.35 1.34 1.33 ...
$ Volume : int 152810 111338 243843 180211 159147 386021 270289 690343 574630 314740 ...
$ dateposix:`POSIXct', format: chr "2003-10-09" "2003-10-10" "2003-10-13" "2003-10-14" ...
I use the POSIXct in my own home-made plots. In playing with Fmetrics I naturaly wanted to create a time series
This works
ts = timeSeries(tempdata[,2:6], charvec = tempdata[,1],format = "%Y/%m/%d",FinCenter = "Australia/Sydney")
Although if I set myFinCenter to "Australia/Perth" it fails. (See below for structure)
while
ts = timeSeries(tempdata[,2:6], charvec = tempdata[,1],format = "%Y/%m/%d",FinCenter = "Australia/Perth") fails with
Error in if (timeTest == 0) iso.format = "%Y-%m-%d" : missing value where TRUE/FALSE needed
Ive looked at the function but I'm missing something.
Any ideas would be much appreciated
> str(ts)
Formal class 'timeSeries' [package "fBasics"] with 7 slots
..@ Data : num [1:300, 1:5] 1.27 1.25 1.27 1.29 1.27 1.28 1.32 1.35 1.35 1.34 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:300] "2003-10-09 10:00:00" "2003-10-10 10:00:00" "2003-10-13 10:00:00" "2003-10-14 10:00:00" ...
.. .. ..$ : chr [1:5] "TS.1" "TS.2" "TS.3" "TS.4" ...
..@ positions : chr [1:300] "2003-10-09 10:00:00" "2003-10-10 10:00:00" "2003-10-13 10:00:00" "2003-10-14 10:00:00" ...
..@ format : chr "%Y-%m-%d %H:%M:%S"
..@ FinCenter : chr "Australia/Sydney"
..@ units : chr [1:5] "TS.1" "TS.2" "TS.3" "TS.4" ...
..@ title : chr "Time Series Object"
..@ documentation: chr "Created at Australia/Sydney 2004-12-12 19:52:35"
_______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html