My question comes from this paper, which is a short version of Avellaneda's paper The picture bellow provides a summary of the equations.

Do I understand correctly that in order to trade OU process I need to:

1) Run an OLS on two stocks (presumably cointegrated) with a lookback of 60 days

2) Calculate the auxiliary process X(k). (2.5)

3) Run AR(1) model on (2.5) series. (2.6)

4) Estimate OU parameters, and calculate the s-score which is -m/sigma since last X(k) = 0

5) Now steps 1-4 are in sample, but how do I proceed with the out of sample period? From the Chen's paper I understand that I would hold B0 and B1 constant and estimate next 5 days residuals, for each of those days I would repeat steps 2,3,4,5. Is it correct?

Previously I tried calculating S-score for every day running steps 1-4, but this approach is not profitable and generates random returns. I also tried holding the OLS beta constant for some time and calculate S-scores based on the residuals obtain with those constants, but with this approach beta becomes > 1 and equilibrium standard deviation is a square root of a negative number. All this was using actual prices instead of returns. If I use daily returns, results get random. Could someone please help?

OU model

  • 1
    $\begingroup$ Hi Aterm, some questions: How come beta "become" > 1 if you hold it constant? Did you try to reproduce the results of the paper or did you run the strategy on new data? Did you visually check for mean reversion? $\endgroup$ – Quantuple May 4 '16 at 8:30
  • $\begingroup$ Hey, I'll try to illustrate the beta problem. Suppose we calculate B0, B1 at period (t-1). Then a time (t) I obtain the next residual via e(t) = Y(t) - B1(t-1)*X(t) - B0(t-1), and then I calculate X(t) cumulatively summing 60 latest residuals including e(t). After doing AR(1) on X(t) beta is > 1. I'm not sure why this happens, but this is how it is if I use price data, with daily returns it "works" but s-scores obtained from daily returns are practically useless. I used equity data from Kospi 100 stocks. Chen does not specify his data. All stock pairs that I used for testing are cointegrated. $\endgroup$ – Artem Korol May 4 '16 at 11:21
  • $\begingroup$ I don't understand what you seem to call 'beta' (maybe because I can't see the image you attached to your post). OK but did you try with the data of the original paper? Plus did you really read the original paper carefully? There is a mention of modified s-score taking into account the mean-reversion drift. Did you also try changing the rules? Plus do you test cointegration at price or return level? $\endgroup$ – Quantuple May 4 '16 at 12:11
  • $\begingroup$ Here's a link. Beta is B1 coefficient from AR(1) OLS with y = X(t-1, n) and x = X(t, n-1) where X() is the auxiliary process. In (Chen, 2012) author only mentions that he uses two futures contracts from Chinese market without specifying which ones, so it's not possible to replicate. If you mean the modified s-score from Avellaneda's paper on p.46 or if you refer to p. 20 where k(Theta) is > 252/30, then yes I saw those, but I have not implemented them in the back tests. I test cointegration on price levels. $\endgroup$ – Artem Korol May 4 '16 at 12:39
  • $\begingroup$ I have also tried changing OLS look back periods, trade signal parameters, calculating s-score for each day without holding OLS parameters constant and there were some positive results, i need further testing to see how it will go. I'm not totally sure if i'm implementing the algo correctly. $\endgroup$ – Artem Korol May 4 '16 at 14:19

Your Answer


Browse other questions tagged or ask your own question.