Replicating the Momentum Strategies of Jegadeesh and Titman (JF, 1993)

This research application, including relevant SAS code, replicates the methodology of Jegadeesh and Titman (JF, 1993). The program is designed to create momentum portfolios based on past 3 to 12 month returns.

Background

The momentum effect is a widely-documented phenomenon in finance. One of the first studies to document this effect was written by Jegadeesh and Titman (JF, 1993) who show that stocks experiencing a price run-up in the past three to twelve months continue to experience positive returns in the subsequent three to twelve months. A similar pattern was documented for stocks that experienced negative returns in the past three to twelve months. Understanding how momentum effect interacts with assets prices and how investors respond to this effect has been at the center of a growing literature which is becoming increasingly popular among many disciplines in the field of financial economic theory.

For a Python version of the code, please refer to the page here.

Top of Section

Momentum Strategies

Momentum of stock returns has received a growing attention in the finance literature. While Jegadeesh and Titman (2001) algorithm is more recent and controls for return reversals, the program below replicates the methodology of the original Jegadeesh and Titman (JF, 1993), which is the first study to provide a throrough investigation of the momentum effect. The program first creates momentum portfolios based on past 3 to 12 month returns. The portfolios are then held for 3 to 12 months and their performance evaluated to provide comparisons between high momentum versus low momentum stocks.

This program follows the same procedure for calculating momentum portfolios as Jegadeesh and Titman's (2003) Table 1, with only one difference: Monthly returns are extracted directly from CRSP Monthly Stock File (MSF) instead of compounding daily returns into monthly figures. The code can be easily modified to compute Momentum Portfolios with monthly returns compounded from CRSP Daily Stock File. The program creates equally weighted portfolios for all NYSE and AMEX common stock securities in CRSP based on deciles created on previous three to 12 month returns. Portfolios are rebalanced every month and are held for 3 to 12 months. Average monthly returns for the momentum portfolios are computed.

This code does a good job replicating the results included in Table 1 of Jegadessh and Titman (1993). For example, for the case of momentum portfolios that were created using the last 6 months of returns and held by 6 months (J=6 and K=6), our code produces winner's monthly average return of 1.71% (T=4.22), losers' monthly average return of 0.80% (T=1.59) and long-short monthly average return of 0.91 (T=3.01). These results are very close than the ones presented by Jegadessh and Titman's Table 1: winner's monthly average return of 1.74% (T=4.33), losers' monthly average return of 0.79% (T=1.56) and long-short monthly average return of 0.95 (T=3.07).

/* ********************************************************************************* */
/* ************** W R D S   R E S E A R C H   A P P L I C A T I O N S ************** */
/* ********************************************************************************* */
/* Summary   : Replicates Jegadeesh and Titman (JF, 1993) Momentum Portfolios        */
/* Date      : November 2004. Modified January, 2011                                 */
/* Author    : Gjergji Cici and Rabih Moussawi, WRDS                                 */
/* Variables : - J: # of Months in Formation Period to Create Momentum Portfolios    */
/*             - K: # of Months in Holding   Period to Buy and Hold Mom. Ports.      */
/*             - BEGDATE: Sample Start Date                                          */
/*             - ENDDATE: Sample End Date                                            */
/* ********************************************************************************* */
 
/* Step 1. Specifying Options */
%let J=6; /* Formation Period Length: J can be between 3 to 12 months */
%let K=6; /* Holding   Period Length: K can be between 3 to 12 months */
 
/* Jegadeesh and Titman's Footnote 4 page 69: 1965-1989 are holding period dates */
/* Need 2 years of return history to form mometum portfolios that start in 1965  */
%let begdate=01JAN1963;
%let enddate=31DEC1989;
 
/* Step 2. Extract CRSP Data for NYSE and AMEX Common Stocks */
/* Merge historical codes with CRSP Monthly Stock File       */
/* Restriction on Share Code: common shares only             */
/*      and Exchange Code: NYSE and AMEX securities only     */
%let filtr = (shrcd in (10,11) and exchcd in (1,2));
/*  Selected variables from the CRSP Monthly Stock File      */
%let fvars =  prc ret shrout cfacpr cfacshr;
/*  Selected variables from the CRSP Monthly Event File      */
%let evars =  shrcd exchcd siccd;
/* Invoke CRSPMERGE WRDS Research Macro. Data Output: CRSP_M */
%crspmerge(s=m,start=&begdate,end=&enddate,sfvars=&fvars,sevars=&evars,filters=&filtr);
 
/* Step 3. Create Momentum Port. Measures Based on Past (J) Month Compounded Returns */
/* Make sure to keep stocks with available return info in the formation period */
proc printto log=junk;
proc expand data=crsp_m (keep=permno date ret) out=umd method=none;
by permno;
id date;
convert ret = cum_return / transformin=(+1) transformout=(MOVPROD &J -1 trimleft &J);
quit;
proc printto; run;
 
/* Formation of 10 Momentum Portfolios Every Month */
proc sort data=umd; by date; run;
proc rank data=umd out=umd group=10;
  by date;
    var cum_return;
    ranks momr;
run;
 
/* Step 4. Assign Ranks to the Next 6 (K) Months After Portfolio Formation */
/* MOMR is the portfolio rank variable taking values between 1 and 10: */
/*          1 - the lowest  momentum group: Losers   */
/*         10 - the highest momentum group: Winners  */
data umd;
set umd (drop=cum_return);
where momr>=0;
momr=momr+1;
HDATE1 = intnx("MONTH",date, 1,"B");
HDATE2 = intnx("MONTH",date,&K,"E");
label momr = "Momentum Portfolio";
label date = "Formation Date";
label HDATE1= "First Holding Date";
label HDATE2= "Last Holding Date";
rename date=form_date;
run;
 
proc sort data=umd nodupkey; by permno form_date; run;
 
/* Portfolio returns are average monthly returns rebalanced monthly */
proc sql;
    create table umd2
    as select distinct a.momr, a.form_date, a.permno, b.date, b.ret
    from umd as a, crsp_m as b
    where a.permno=b.permno
    and a.HDATE1<=b.date<=a.HDATE2;
quit;
 
/* Step 5. Calculate Equally-Weighted Average Monthly Returns */
proc sort data=umd2 nodupkey; by date momr form_date permno; run;
 
/* Calculate Equally-Weighted returns across portfolio stocks */
/* Every date, each MOM group has J portfolios identified by formation date */
proc means data = umd2 noprint;
  by date momr form_date;
    var ret;
    output out = umd3 mean=ret;
run;
 
/* Portfolio average monthly returns */
proc sort data=umd3; by date momr;
    where year(date) >= year("&begdate"d)+2;
run;
 
/* Create one return series per MOM group every month */
proc means data = umd3 noprint;
  by date momr;
    var ret;
    output out = ewretdat mean= ewret std = ewretstd;
run;
 
proc sort data=ewretdat; by momr ; run;
 
Title "Jegadeesh and Titman (1993) Table 1: Returns of Relative Strength Portfolios";
Title2 "Portfolios based on &J month lagged return and held for &K months";
 
proc means data=ewretdat n mean t probt;
  class momr;
    var ewret;
run;
 
/* Step 6. Calculate Long-Short Portfolio Returns */
proc sort data=ewretdat; by date momr; run;
proc transpose data=ewretdat out=ewretdat2
     (rename = (_1=LOSERS _2=PORT2 _3=PORT3 _4=PORT4 _5=PORT5
                     _6=PORT6 _7=PORT7 _8=PORT8 _9=PORT9 _10=WINNERS)
       drop=_NAME_ _LABEL_);
  by date;
  id momr;
   var ewret;
run;
 
/* Compute Long-Short Portfolio Cumulative Returns */
data ewretdat3;
set ewretdat2;
by DATE;
LONG_SHORT=WINNERS-LOSERS;
retain CUMRET_WINNERS CUMRET_LOSERS CUMRET_LONG_SHORT 0;
CUMRET_WINNERS     = (CUMRET_WINNERS+1)*(WINNERS+1)-1;
CUMRET_LOSERS      = (CUMRET_LOSERS +1)*(LOSERS +1)-1;
CUMRET_LONG_SHORT  = (CUMRET_LONG_SHORT+1)*(LONG_SHORT+1)-1;
format WINNERS LOSERS LONG_SHORT PORT: CUMRET_: percentn12.1;
run;
 
proc means data=ewretdat3 n mean t probt;
var WINNERS LOSERS LONG_SHORT;
run;
 
/* Step 7. Plot Time Series of Portfolio Returns */
axis1 label=none;
symbol interpol =join w = 4;
proc gplot data = ewretdat3;
   Title 'Time Series of Cumulative Momentum Portfolio Returns' ;
   Title2 "Based on Jegadeesh and Titman (1993) Momentum Portfolios " ;
   plot (CUMRET_WINNERS CUMRET_LOSERS)*date
        / overlay legend vaxis=axis1;
   format date year.;
run; quit;
 
proc gplot data = ewretdat3;
   Title 'Performance of Long/Short Momentum Strategy' ;
   Title2 "Based on Jegadeesh and Titman (1993) Momentum Portfolios";
   plot (CUMRET_LONG_SHORT)*date
        / overlay legend vaxis=axis1;
   format date year.;
run; quit;
 
/* ********************************************************************************* */
/* *************  Material Copyright Wharton Research Data Services  *************** */
/* ****************************** All Rights Reserved ****************************** */
/* ********************************************************************************* */

View Output

When running the program for the same time period as Jegadeesh and Titman (1993), the winner portfolio exhibit a strong return in excess of the losers portfolio, as the graph below of cumulative portfolio returns shows.

ports 1989

The long/short portfolio return results in the graph below shows the cumulative return of a long/short momentum trading strategy that follows Jegadeesh and Titman (1993). The pattern documents strong momentum profits by the end of the 1980's.

ls 1989

However, when extending the time period beyond December 1989, the pattern of momentum profits becomes very volatility with sharp losses of the Long/Short strategy coinciding with business cycles. Jegadeesh and Titman (2001) provide relevant discussion on strong reversal and incorporate additional filters on included securities after adding Nasdaq stocks.

ls 2010

Top of Section

References

Brennan, Michael J., Narasimhan Jegadeesh, and Bhaskaran Swaminathan, 1993, "Investment Analysis and the Adjustment of Stock Prices to Common Information," Review of Financial Studies 6, pp. 799-824.

Chan, K., A. Hameed, and W. Tong, 2000, "Profitability of momentum strategies in international equity markets," Journal of Financial and Quantitative Analysis 35, pp 153- 172

Chan, Louis K. C., Narasimhan Jegadeesh, and Josef Lakonishok, 1996, "Momentum strategies," Journal of Finance 51, pp 1681-1713.

Chui, Andy, Sheridan Titman and K.C. John Wei, 2000, Momentum, ownership structure, and financial crises: An analysis of Asian stock markets, working paper, University of Texas at Austin.

Daniel , Kent , David Hirshleifer, and Avanidhar Subrahmanyam, 1998, "Investor Psychology and Security Market Under-and Overreactions," Journal of Finance 53, pp 1839-1886.

DeLong, J. Bradford, Andrei Shleifer, Lawrence H. Summers, and Robert J. Waldmann, 1990, "Positive feedback investment strategies and destabilizing rational speculation," Journal of Finance 45, pp 379-395.

Fama, Eugene, and Kenneth French, 1996, "Multifactor Explanations of Asset Pricing Anomalies," Journal of Financial Economics pp 51, pp 55-84.

Grundy, Bruce D. and Spencer J. Martin, 2001, "Understanding the Nature of Risks and the Sources of Rewards to Momentum Investing," Review of Financial Studies 14, pp 29- 78.

Gutierrez, R., M. Cooper, and A. Hameed, 2004, Market states and Momentum, Journal of Finance (forthcoming)

Hong, H., and J. Stein, 1999, "A Unified Theory of Underreaction, Momentum Trading and Overreaction in Asset Markets," Journal of Finance 54, pp 2143-2184.

Hong, Harrison, Terence Lim and Jeremy C. Stein, 2000, Bad news travels slowly: Size, analyst coverage, and the profitability of momentum strategies, Journal of Finance 55, 265-295.

Jegadeesh, Narasimhan, 1990, "Evidence of Predictable Behavior of Security Returns," Journal of Finance 45, pp 881-898.

Jegadeesh, Narasimhan, and Sheridan Titman, 1995, "Overreaction, Delayed Reaction and Contrarian Profits," Review of Financial Studies 8, pp 973-993.

Jegadeesh, Narasimhan, and Sheridan Titman, 2001, "Profitability of momentum strategies: An evaluation of alternative explanations," Journal of Finance 56, pp 699-720.

Jegadeesh, Narasimhan, and Sheridan Titman, 2002, "Cross-Sectional and Time-Series Determinants of Momentum Returns," Review of Financial Studies 15, 143-157.

Korajczyk, R., and R. Sadka, 2004, Are Momentum Profits robust to trading costs?, Journal of Finance 59, 1039-1082.

Rouwenhorst, K. Geert, 1998, "International momentum strategies," Journal of Finance 53, pp 267-284.

Lee, Charles and Bhaskaran Swaminathan, 2000, "Price Momentum and Trading Volume," Journal of Finance 55, pp 1217-1269

Lesmond, D., M. Schill, and C. Zhou, 2003, The illusory nature of Momentum profits, Journal of Financial Economics 71, 349-380.

Lo, Andrew, and A. Craig MacKinlay, 1990, "When are Contrarian Profits Due to Stock Market Overreaction?" Review of Financial Studies 3, pp 175-208.

Moskowitz, Tobias J. and Grinblatt, Mark, 1999, "Does Industry Explain Momentum?" Journal of Finance 54, pp 1249-1290.

Top of Section

Top