<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=UTF-8" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18975"></HEAD>
<BODY bgColor=#ffffff text=#000000>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>Stephen,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>It depends what you mean by "logic".</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>If you mean statistical logic, I'll defer to Eric Zivot and 
Sarbo who are far wiser than I am. I will note, however, that you are testing 
for a p-value of 0.05, so I expect 5% of your test results to be misleading. In 
other words, for every 20 pairs tested by your batch job, I expect one will be 
suspect.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>"Spurious cointegration" is a serious problem. I suggest 
Googling that topic. You may be suprised what you learn. (The irony, of course, 
is that cointegration was supposed to cure "spurious correlation." Oh 
well.)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>If you mean financial logic, I strongly suggest not blindly 
risking money on your statistical test. Some filtering is required. Look for 
trades that make sense.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>For example, my software reports that the stocks of MSFT and 
GOOG form a mean-reverting pair. But I would not trade that spread: too much 
idiosyncratic risk. </FONT></SPAN><SPAN class=765244113-19102010><FONT 
color=#0000ff size=2 face=Arial>My software also reports that Corn futures and 
Soybean Oil futures form a mean-reverting pair. But I would not trade that 
spread because the economic connection between corn and bean oil is too 
weak.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>Hope that helps.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=765244113-19102010><FONT color=#0000ff 
size=2 face=Arial>Paul</FONT></SPAN></DIV><BR>
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>
<FONT size=2 face=Tahoma><B>From:</B> r-sig-finance-bounces@stat.math.ethz.ch 
[mailto:r-sig-finance-bounces@stat.math.ethz.ch] <B>On Behalf Of </B>Stephen 
Choularton<BR><B>Sent:</B> Monday, October 18, 2010 9:46 PM<BR><B>To:</B> 
r-sig-finance@stat.math.ethz.ch<BR><B>Subject:</B> [R-SIG-Finance] 
cointegration<BR></FONT><BR></DIV>
<DIV></DIV>Hi Folks<BR><BR>I'm using this to find cointegrated stocks on the 
AX.<BR><BR>library(xts)<BR>library(quantmod)<BR><BR># quickly re-source this 
file<BR>s <- function() source('meanrev.R')<BR><BR>checkPairFromYahoo <- 
function(sym1, sym2, dateFilter='::')<BR>{<BR>  t.xts <- 
getCombined(sym1, sym2, dateFilter=dateFilter)<BR><BR>  cat("Date range 
is", format(start(t.xts)), "to", format(end(t.xts)), "\n")<BR><BR>  # Build 
linear model<BR>  m <- buildLM(t.xts)<BR><BR>  # Note beta -- <A 
class=moz-txt-link-freetext 
href="http://en.wikipedia.org/wiki/Beta_(finance)">http://en.wikipedia.org/wiki/Beta_(finance)</A><BR>  
beta <- getBeta(m)<BR>  cat("Assumed hedge ratio is", beta, 
"\n")<BR><BR>  # Build spread<BR>  sprd <- buildSpread(t.xts, 
beta)<BR><BR>  # Test cointegration<BR>  ht <- 
testCoint(sprd)<BR>  cat("PP p-value is", as.double(ht$p.value), 
"\n")<BR><BR>  if (as.double(ht$p.value) < 0.05)<BR>  
{<BR>    
cat("###############################################################\n", sym1 
,":", sym2 ," is likely mean-reverting.\n", 
"###########################################################\n" )<BR>  
}<BR>  else<BR>  {<BR>    #cat(sym1 ,":", sym2 ," is 
not mean-reverting.\n")<BR>  }<BR>}<BR><BR>getCombined <- function(sym1, 
sym2, dateFilter='::')<BR>{<BR>  # Grab historical data for both 
symbols<BR>  one <- getSymbols(sym1, auto.assign=FALSE)<BR>  two 
<- getSymbols(sym2, auto.assign=FALSE)<BR><BR>  # Give columns more 
usable names<BR>  colnames(one) <- c('Open', 'High', 'Low', 'Close', 
'Volume', 'Adjusted')<BR>  colnames(two) <- c('Open', 'High', 'Low', 
'Close', 'Volume', 'Adjusted')<BR><BR>  # Build combined object<BR>  
return(merge(one$Close, two$Close, all=FALSE)[dateFilter])<BR>}<BR><BR>buildLM 
<- function(combined)<BR>{<BR>  return(lm(Close ~ Close.1 + 0, 
combined))<BR>}<BR><BR>getBeta <- function(m)<BR>{<BR>  
return(as.double(coef(m)[1]))<BR>}<BR><BR>buildSpread <- function(combined, 
beta)<BR>{<BR>  return(combined$Close - 
beta*combined$Close.1)<BR>}<BR><BR>testCoint <- function(sprd)<BR>{<BR>  
return(PP.test(sprd, lshort = FALSE))<BR>}<BR><BR>I run it on batches of 
stock-pairs and then have a look at those which are cointegrated.  Assuming 
my code is right (and anyone who thinks there is something wrong with it please 
let me know ;-)<BR><BR>Just wondered if anyone simply goes with the results, or 
if a test of logic is required.  I found, for example, that AGL ( a big gas 
company) was cointegrated with Bunnings Wharehouses (a hardware superstore 
chain).  Can't see the reason for that.  AMP (major insurer) 
cointegrates with AXA (another major insurer).  That makes sense and it 
cointegrates with  Westpac (major bank) still some logic but a bit 
thinner.  It also cointegrates with Fortescue Metals (big iron ore 
operation).  Not much logic there.  Anyway question is: do you get 
better results by using informed judgement on these things or just trust the 
figures?<BR><BR>Any comments most welcome.<BR><BR><BR>
<DIV class=moz-signature>Stephen Choularton Ph.D., FIoD<BR><BR>9999 2226<BR>0413 
545 182<BR><BR><IMG border=0 alt="" src="cid:765244113@19102010-1527" width=300 
height=188><BR>for insurance go to <A 
href="http://www.netinsure.com.au">www.netinsure.com.au</A><BR>for markets go to 
<A 
href="http://www.organicfoodmarkets.com.au">www.organicfoodmarkets.com.au</A><BR></DIV><BR>On 
19/10/2010 12:35 PM, Yihao Lu aeolus_lu wrote: 
<BLOCKQUOTE cite=mid:COL120-W53DD96E290E42F7D4B328C885B0@phx.gbl type="cite"><PRE wrap="">I am doing rolling ADF test on some time series to check mean reversion. When I use short period rolling, I find the residue is not stationary at all. However, when I use horizon longer than 5 years, I find very significant stationary. On the other hand, I find the half life is only around 30 days.
Is there anyone who can give me some possible explanation or guide me to some reference? thanks

Best,
Yihao







________________________________
</PRE>
  <BLOCKQUOTE type="cite"><PRE wrap="">Date: Tue, 19 Oct 2010 09:03:55 +1100
From: <A class=moz-txt-link-abbreviated href="mailto:stephen@organicfoodmarkets.com.au">stephen@organicfoodmarkets.com.au</A>
To: <A class=moz-txt-link-abbreviated href="mailto:r-sig-finance@stat.math.ethz.ch">r-sig-finance@stat.math.ethz.ch</A>
CC: <A class=moz-txt-link-abbreviated href="mailto:bjorn.skogtro@gmail.com">bjorn.skogtro@gmail.com</A>
Subject: Re: [R-SIG-Finance] Ornstein-Uhlenbeck

Hi

I am still trying to sort this one out. Any comments from anyone would
be most welcome.

Stephen Choularton Ph.D., FIoD



On 14/10/2010 7:29 AM, Stephen Choularton wrote:
Thanks for this help.

Trying to make sense of it so I have added some notes to the code. I
have marked them #?#

Delighted if you can tell me if I am write or wrong, add any comments,
answers.


#?# This appears to be the function that is doing the 'Ornstein-Uhlenbeck
#?# process work' particularly via dcOU
#?# I have noted in several places that I am after:
#?# 'the half-life of the decay equals ln(2)/θ'
#?# 'The half-life is given as log(2)/mean-reversion speed.'
#?# and I see theta appearing at a number of points in the code.
#?# Can you tell me why 3 thetas viz theta1, theta2, theta3 and what they do?
#?# eg is one of these the theta I am after?

# ex3.01.R
OU.lik <- function(theta1, theta2, theta3){
n <- length(X)
dt <- deltat(X)
-sum(dcOU(X[2:n], dt, X[1:(n-1)], c(theta1,theta2,theta3), log=TRUE))
}

require(stats4)
require(sde)

#?# random numer generation seed
set.seed(123)

#?# creation of a data set
X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1)
#?# If I Look at X its like this:
#?# Time Series:
#?# Start = 0
#?# End = 1000
#?# Frequency = 1
#?# [1] 1.00000000 etc
#?# What sort of data object is it and how would I coerce an object with one
#?# column from a read.csv into it?


mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit
summary(fit)

#?# This gives:

#?# Maximum likelihood estimation

#?# Call:
#?# mle(minuslogl = OU.lik, start = list(theta1 = 1, theta2 = 0.5,
#?# theta3 = 1), method = "L-BFGS-B", lower = c(-Inf, 0, 0))

#?# Coefficients:
#?# Estimate Std. Error
#?# theta1 3.355322 0.28159504
#?# theta2 1.106107 0.09010627
#?# theta3 2.052815 0.07624441

#?# -2 log L: 3366.389

#?# What's this telling me?

# ex3.01.R (cont.)
prof <- profile(fit)
par(mfrow=c(1,3))
plot(prof)
par(mfrow=c(1,1))
vcov(fit)
confint(fit)

#?# This provides me with this output using 'fit' from before:

#?# > vcov(fit)
#?# theta1 theta2 theta3
#?# theta1 0.07929576 0.024620718 0.016634557
#?# theta2 0.02462072 0.008119141 0.005485549
#?# theta3 0.01663456 0.005485549 0.005813209
#?# > confint(fit)
#?# Profiling...
#?# 2.5 % 97.5 %
#?# theta1 2.8448980 3.960982
#?# theta2 0.9433338 1.300629
#?# theta3 1.9147136 2.216113

#?# and 'fit' is:

#?# Call:
#?# mle(minuslogl = OU.lik, start = list(theta1 = 1, theta2 = 0.5,
#?# theta3 = 1), method = "L-BFGS-B", lower = c(-Inf, 0, 0))

#?# Coefficients:
#?# theta1 theta2 theta3
#?# 3.355322 1.106107 2.052815

#?# plus some graphic output

#?# Again, what's this telling me.

#?# This looks like a further example?
# ex3.01.R (cont.)
set.seed(123)
X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1e-3)
mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit2
summary(fit2)




Please excuse the length of this email (and my lack of understanding)

Hope you can help and thanks.




Stephen Choularton Ph.D., FIoD


On 13/10/2010 2:41 AM, stefano iacus wrote:

just for completeness: OU process is gaussian and transitiion density is known in exact form. So maximum likelihood estimation works fine and I suggest to avoid GMM.

sde package contains exact transition density for this process (e.g. ?dcOU) which you can use to build the likelihood to pass to mle() function.

This example taken from the "inst" directory of the package sde. For the parametrization of the model see ?dcOU


# ex3.01.R
OU.lik <- function(theta1, theta2, theta3){
n <- length(X)
dt <- deltat(X)
-sum(dcOU(X[2:n], dt, X[1:(n-1)], c(theta1,theta2,theta3), log=TRUE))
}

require(stats4)
require(sde)
set.seed(123)
X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1)
mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit
summary(fit)

# ex3.01.R (cont.)
prof <- profile(fit)
par(mfrow=c(1,3))
plot(prof)
par(mfrow=c(1,1))
vcov(fit)
confint(fit)

# ex3.01.R (cont.)
set.seed(123)
X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1e-3)
mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit2
summary(fit2)


I hope this helps out

stefano

On 12 Oct 2010, at 12:33, Bjorn Skogtro wrote:



Hi Stephen,

You could take a look at

<A class=moz-txt-link-freetext href="http://sitmo.com/doc/Calibrating_the_Ornstein-Uhlenbeck_model">http://sitmo.com/doc/Calibrating_the_Ornstein-Uhlenbeck_model</A>

for the linear regression method, or take a look at the package "sde" which
contains some examples using GMM (not for the Ornstein-Uhlenbeck process,
though, only the CIR).

The half-life is given as log(2)/mean-reversion speed.

Do keep an eye on the partition of the time-axis, e.g. what frequency you
are using (daily, yearly) for interpreting the half-life.

BR,
Bjørn








------------------------------

Message: 2
Date: Tue, 12 Oct 2010 05:43:32 -0400
From: Sarbo
To: <A class=moz-txt-link-abbreviated href="mailto:r-sig-finance@stat.math.ethz.ch">r-sig-finance@stat.math.ethz.ch</A>
Subject: Re: [R-SIG-Finance] Ornstein-Uhlenbeck
Message-ID:
Content-Type: text/plain; charset="utf-8"

By half-life, do you mean the speed of mean-reversion?

If so, there's a bit of algebraic tomfoolery that's required to
discretise the equation and then fit the data to it. I don't have the
time right now to go into all the details but it's not hard- you can
parameterise the process using simple linear regression. If you need
help with that I'll try and get back to you tonight about it.

On Tue, 2010-10-12 at 13:47 +1100, Stephen Choularton wrote:



Hi

Wonder if anyone could point me how I use this method to discover the
half life of a mean reverting process.

I am looking into pair trading and the time it takes for a
cointegrated pair to revert to the norm.

--
Stephen Choularton Ph.D., FIoD

9999 2226
0413 545 182


for insurance go to <A class=moz-txt-link-abbreviated href="http://www.netinsure.com.au">www.netinsure.com.au</A>
for markets go to <A class=moz-txt-link-abbreviated href="http://www.organicfoodmarkets.com.au">www.organicfoodmarkets.com.au</A>


_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions


should go.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.html">https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.html</A>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: CoS2010Winner.JPG
Type: image/jpeg
Size: 16091 bytes
Desc: not available
URL: <
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.jpe">https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.jpe</A>


------------------------------

_______________________________________________
R-SIG-Finance mailing list
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A>
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>


End of R-SIG-Finance Digest, Vol 77, Issue 8
********************************************


[[alternative HTML version deleted]]

_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.



-----------------------------------
Stefano M. Iacus
Department of Economics,
Business and Statistics
University of Milan
Via Conservatorio, 7
I-20123 Milan - Italy
Ph.: +39 02 50321 461
Fax: +39 02 50321 505
<A class=moz-txt-link-freetext href="http://www.economia.unimi.it/iacus">http://www.economia.unimi.it/iacus</A>
------------------------------------------------------------------------------------
Please don't send me Word or PowerPoint attachments if not
absolutely necessary. See:
<A class=moz-txt-link-freetext href="http://www.gnu.org/philosophy/no-word-attachments.html">http://www.gnu.org/philosophy/no-word-attachments.html</A>

_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.





No virus found in this incoming message.
Checked by AVG - <A class=moz-txt-link-abbreviated href="http://www.avg.com">www.avg.com</A>







_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.





No virus found in this incoming message.
Checked by AVG - <A class=moz-txt-link-abbreviated href="http://www.avg.com">www.avg.com</A>




_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A> --
Subscriber-posting only. If you want to post, subscribe first. -- Also
note that this is not the r-help list where general R questions should
go.
</PRE></BLOCKQUOTE><PRE wrap="">                                      
_______________________________________________
<A class=moz-txt-link-abbreviated href="mailto:R-SIG-Finance@stat.math.ethz.ch">R-SIG-Finance@stat.math.ethz.ch</A> mailing list
<A class=moz-txt-link-freetext href="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A>
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.</PRE><PRE wrap=""><FIELDSET class=mimeAttachmentHeader></FIELDSET>

No virus found in this incoming message.
Checked by AVG - <A class=moz-txt-link-abbreviated href="http://www.avg.com">www.avg.com</A> 


</PRE></BLOCKQUOTE></BODY></HTML>