i have time series of momentum signal. I want to get the date of each of the
"-1" signal period. for example , the first period of -1 signal
begins on
2005-9-21 and ends on 2005-9-28. 2nd period of -1 signal begins on
2005-09-30 and ends on 2005-10-28.
Thx
Cameron
date Px 200MA Signals
2005-09-15 26.27 25.83865 1
2005-09-16 26.07 25.83275 1
2005-09-19 26.00 25.82730 1
2005-09-20 25.84 25.82035 1
2005-09-21 25.49 25.81115 -1
2005-09-22 25.34 25.80250 -1
2005-09-23 25.27 25.79205 -1
2005-09-26 25.27 25.78225 -1
2005-09-27 25.34 25.77355 -1
2005-09-28 25.67 25.76565 -1
2005-09-29 25.94 25.75920 1
2005-09-30 25.73 25.75230 -1
2005-10-03 25.50 25.74400 -1
2005-10-04 24.98 25.73410 -1
2005-10-05 24.67 25.72270 -1
2005-10-06 24.73 25.71100 -1
2005-10-07 24.59 25.69910 -1
2005-10-10 24.46 25.68635 -1
2005-10-11 24.41 25.67415 -1
2005-10-12 24.30 25.66090 -1
2005-10-13 24.59 25.64935 -1
2005-10-14 24.67 25.63890 -1
2005-10-17 24.53 25.62795 -1
2005-10-18 24.57 25.61710 -1
2005-10-19 25.09 25.60835 -1
2005-10-20 24.79 25.59840 -1
2005-10-21 24.78 25.58855 -1
2005-10-24 25.10 25.58070 -1
2005-10-25 25.03 25.57185 -1
2005-10-26 25.11 25.56375 -1
2005-10-27 24.85 25.55410 -1
2005-10-28 25.53 25.55040 -1
2005-10-31 25.70 25.54830 1
2005-11-01 25.96 25.54650 1
2005-11-02 26.46 25.54890 1
2005-11-03 26.44 25.55180 1
2005-11-04 26.66 25.55685 1
-code
library(tseries)
library(timeSeries)
msft <- as.timeSeries(get.hist.quote(instrument="MSFT",
start="1986-03-31",
end="2008-09-10", quote=c("C"), provider="yahoo",
retclass="zoo"))
msft <- cbind(msft,as.timeSeries(rollapply(as.zoo(msft
),width=200,mean,align="right")))
msft <- cbind(msft,NA)
msft[,3] <- (ifelse(msft[,1]>msft[,2],1,-1))
print(msft)
--
View this message in context:
http://r.789695.n4.nabble.com/help-on-timeseries-tp3076866p3076866.html
Sent from the R help mailing list archive at Nabble.com.
Hi Raymond,
Try that.
con <- textConnection("
date Px 200MA Signals
2005-09-15 26.27 25.83865 1
2005-09-16 26.07 25.83275 1
2005-09-19 26.00 25.82730 1
2005-09-20 25.84 25.82035 1
2005-09-21 25.49 25.81115 -1
2005-09-22 25.34 25.80250 -1
2005-09-23 25.27 25.79205 -1
2005-09-26 25.27 25.78225 -1
2005-09-27 25.34 25.77355 -1
2005-09-28 25.67 25.76565 -1
2005-09-29 25.94 25.75920 1
2005-09-30 25.73 25.75230 -1
2005-10-03 25.50 25.74400 -1
2005-10-04 24.98 25.73410 -1
2005-10-05 24.67 25.72270 -1
2005-10-06 24.73 25.71100 -1
2005-10-07 24.59 25.69910 -1
2005-10-10 24.46 25.68635 -1
2005-10-11 24.41 25.67415 -1
2005-10-12 24.30 25.66090 -1
2005-10-13 24.59 25.64935 -1
2005-10-14 24.67 25.63890 -1
2005-10-17 24.53 25.62795 -1
2005-10-18 24.57 25.61710 -1
2005-10-19 25.09 25.60835 -1
2005-10-20 24.79 25.59840 -1
2005-10-21 24.78 25.58855 -1
2005-10-24 25.10 25.58070 -1
2005-10-25 25.03 25.57185 -1
2005-10-26 25.11 25.56375 -1
2005-10-27 24.85 25.55410 -1
2005-10-28 25.53 25.55040 -1
2005-10-31 25.70 25.54830 1
2005-11-01 25.96 25.54650 1
2005-11-02 26.46 25.54890 1
2005-11-03 26.44 25.55180 1
2005-11-04 26.66 25.55685 1
")
# wrap the text from the email with textConnection
egData <- read.table(con, header = TRUE, as.is = TRUE)
# a data frame
egData$StartStop <- c(0, diff(egData$Signals))
# column flagging changes in value
logic.start <- egData$StartStop == -2
# logical vector showing position where Signal becomes -1
logic.stop <- c(c(egData$StartStop == 2)[-1], FALSE)
# logical vector showing position BEFORE position
# where Signal becomes 1
signal.df <- data.frame(Start = egData$date[logic.start],
Stop = egData$date[logic.stop])
signal.df
# data frame of start and stop dates
Best regards,
Frederic
Frederic Andrieu
?
T: +44 (0)1249 767700
F: +44 (0)1249 767707
M: +44 (0)7813526123
www.mango-solutions.com
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of cameron
Sent: 07 December 2010 17:42
To: r-help at r-project.org
Subject: [R] help on timeseries
i have time series of momentum signal. I want to get the date of each of the
"-1" signal period. for example , the first period of -1 signal
begins on
2005-9-21 and ends on 2005-9-28. 2nd period of -1 signal begins on
2005-09-30 and ends on 2005-10-28.
Thx
Cameron
date Px 200MA Signals
2005-09-15 26.27 25.83865 1
2005-09-16 26.07 25.83275 1
2005-09-19 26.00 25.82730 1
2005-09-20 25.84 25.82035 1
2005-09-21 25.49 25.81115 -1
2005-09-22 25.34 25.80250 -1
2005-09-23 25.27 25.79205 -1
2005-09-26 25.27 25.78225 -1
2005-09-27 25.34 25.77355 -1
2005-09-28 25.67 25.76565 -1
2005-09-29 25.94 25.75920 1
2005-09-30 25.73 25.75230 -1
2005-10-03 25.50 25.74400 -1
2005-10-04 24.98 25.73410 -1
2005-10-05 24.67 25.72270 -1
2005-10-06 24.73 25.71100 -1
2005-10-07 24.59 25.69910 -1
2005-10-10 24.46 25.68635 -1
2005-10-11 24.41 25.67415 -1
2005-10-12 24.30 25.66090 -1
2005-10-13 24.59 25.64935 -1
2005-10-14 24.67 25.63890 -1
2005-10-17 24.53 25.62795 -1
2005-10-18 24.57 25.61710 -1
2005-10-19 25.09 25.60835 -1
2005-10-20 24.79 25.59840 -1
2005-10-21 24.78 25.58855 -1
2005-10-24 25.10 25.58070 -1
2005-10-25 25.03 25.57185 -1
2005-10-26 25.11 25.56375 -1
2005-10-27 24.85 25.55410 -1
2005-10-28 25.53 25.55040 -1
2005-10-31 25.70 25.54830 1
2005-11-01 25.96 25.54650 1
2005-11-02 26.46 25.54890 1
2005-11-03 26.44 25.55180 1
2005-11-04 26.66 25.55685 1
-code
library(tseries)
library(timeSeries)
msft <- as.timeSeries(get.hist.quote(instrument="MSFT",
start="1986-03-31",
end="2008-09-10", quote=c("C"), provider="yahoo",
retclass="zoo"))
msft <- cbind(msft,as.timeSeries(rollapply(as.zoo(msft
),width=200,mean,align="right")))
msft <- cbind(msft,NA)
msft[,3] <- (ifelse(msft[,1]>msft[,2],1,-1))
print(msft)
--
View this message in context:
http://r.789695.n4.nabble.com/help-on-timeseries-tp3076866p3076866.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
LEGAL NOTICE
This message is intended for the use o...{{dropped:9}}
Hi:
This is more or less the same idea as the other respondent, but uses
function rle() instead. The function:
findDates <- function(df) {
u <- rle(df$Signals)
n <- length(u$values)
ends <- with(u, cumsum(lengths)[values == -1])
begins <- with(u, cumsum(lengths)[values == 1] + 1)
# Endpoint issues:
if(u$values[1] == -1) begins <- c(1, begins)
if(u$values[n] == 1) begins <- begins[-length(begins)]
# generate output data frame
data.frame(beginDate = df$date[begins],
endDate = df$date[ends])
}
Using d as the name of your data frame, I coerced the date variable to be of
class Date with
d$date <- as.Date(d$date, format = '%Y-%m-%d') before calling the
function.
> findDates(d)
beginDate endDate
1 2005-09-21 2005-09-28
2 2005-09-30 2005-10-28
A couple of stress tests:
d2 <- d[, 1:3]
d2$Signals <- c(rep(-1, 5), rep(1, 6), -1, rep(1, 3), rep(-1, 10), rep(1,
8), rep(-1, 4))> findDates(d2)
beginDate endDate
1 2005-09-15 2005-09-21
2 2005-09-30 2005-09-30
3 2005-10-06 2005-10-19
4 2005-11-01 2005-11-04
d2$Signals <- c(rep(-1, 5), rep(1, 10), rep(-1, 2), rep(1,
20))> findDates(d2)
beginDate endDate
1 2005-09-15 2005-09-21
2 2005-10-06 2005-10-07
I didn't test the function with dates of class time.series, ts or zoo, so
you may need to adapt it to your situation.
HTH,
Dennis
On Tue, Dec 7, 2010 at 9:42 AM, cameron <raymond.fu@invesco.com> wrote:
>
> i have time series of momentum signal. I want to get the date of each of
> the
> "-1" signal period. for example , the first period of -1 signal
begins on
> 2005-9-21 and ends on 2005-9-28. 2nd period of -1 signal begins on
> 2005-09-30 and ends on 2005-10-28.
>
>
> Thx
> Cameron
>
> date Px 200MA Signals
> 2005-09-15 26.27 25.83865 1
> 2005-09-16 26.07 25.83275 1
> 2005-09-19 26.00 25.82730 1
> 2005-09-20 25.84 25.82035 1
> 2005-09-21 25.49 25.81115 -1
> 2005-09-22 25.34 25.80250 -1
> 2005-09-23 25.27 25.79205 -1
> 2005-09-26 25.27 25.78225 -1
> 2005-09-27 25.34 25.77355 -1
> 2005-09-28 25.67 25.76565 -1
> 2005-09-29 25.94 25.75920 1
> 2005-09-30 25.73 25.75230 -1
> 2005-10-03 25.50 25.74400 -1
> 2005-10-04 24.98 25.73410 -1
> 2005-10-05 24.67 25.72270 -1
> 2005-10-06 24.73 25.71100 -1
> 2005-10-07 24.59 25.69910 -1
> 2005-10-10 24.46 25.68635 -1
> 2005-10-11 24.41 25.67415 -1
> 2005-10-12 24.30 25.66090 -1
> 2005-10-13 24.59 25.64935 -1
> 2005-10-14 24.67 25.63890 -1
> 2005-10-17 24.53 25.62795 -1
> 2005-10-18 24.57 25.61710 -1
> 2005-10-19 25.09 25.60835 -1
> 2005-10-20 24.79 25.59840 -1
> 2005-10-21 24.78 25.58855 -1
> 2005-10-24 25.10 25.58070 -1
> 2005-10-25 25.03 25.57185 -1
> 2005-10-26 25.11 25.56375 -1
> 2005-10-27 24.85 25.55410 -1
> 2005-10-28 25.53 25.55040 -1
> 2005-10-31 25.70 25.54830 1
> 2005-11-01 25.96 25.54650 1
> 2005-11-02 26.46 25.54890 1
> 2005-11-03 26.44 25.55180 1
> 2005-11-04 26.66 25.55685 1
>
> -code
>
> library(tseries)
> library(timeSeries)
>
> msft <- as.timeSeries(get.hist.quote(instrument="MSFT",
> start="1986-03-31",
> end="2008-09-10", quote=c("C"),
provider="yahoo", retclass="zoo"))
> msft <- cbind(msft,as.timeSeries(rollapply(as.zoo(msft
> ),width=200,mean,align="right")))
> msft <- cbind(msft,NA)
> msft[,3] <- (ifelse(msft[,1]>msft[,2],1,-1))
>
> print(msft)
>
> --
> View this message in context:
> http://r.789695.n4.nabble.com/help-on-timeseries-tp3076866p3076866.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
[[alternative HTML version deleted]]