Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Momentum Strategy Jegadeesh and Titman

    hello,

    I am currently recreating the Jegadeesh and Titman (1993) strategy in STATA but i have stumbled upon a problem, my output differs too much with the results from the Jegadeesh paper. My returns are way too high to be compared to jegadeesh and titman. Can anyone spot the mistake in my coding file.

    My CRSP file contains the Share code, Exchange code, Sic Code, Share price, RET and the number of shares outstanding.

    Furthermore i am trying to work with a lookback and holding period of 3-12.

    This is my coding file:

    // replace negative share prices with absolute positive values//
    replace prc = abs(prc)

    // drop if share price is below 5//
    drop if prc < 5

    // keep share code if they are ordinary commons secutiries//
    keep if shrcd == 10 | shrcd== 11

    // keep exchange code if it is in NYSE, NASDAQ, Dow Jones//
    keep if exchcd == 1 | exchcd == 2 | exchcd == 3

    // replace the return if it is smaller than minus 1//
    replace ret =. if ret < -1

    // drop sic code if between 6000 and 7000//
    drop if siccd >= 6000 & siccd < 7000

    // Generate new time variable//
    gen mofd = mofd(date)
    format mofd %tm
    xtset permno mofd, monthly

    //generate L returns for past 6 months//
    by permno: gen rp3 = ret[_n-1]+ret[_n-2]+ret[_n-3]
    by permno: gen rp6 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]
    by permno: gen rp9 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]+ret[_n-7]+ret[_n-8]+ret[_n-9]
    by permno: gen rp12 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]+ret[_n-7]+ret[_n-8]+ret[_n-9]+ret[_n-10]+ret[_n-11]+ret[_n-12]

    //generate H returns for next 6 months//
    by permno: gen rf3 = ret[_n+1]+ret[_n+2]+ret[_n+3]
    by permno: gen rf6 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]
    by permno: gen rf9 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]+ret[_n+7]+ret[_n+8]+ret[_n+9]
    by permno: gen rf12 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]+ret[_n+7]+ret[_n+8]+ret[_n+9]+ret[_n+10]+ret[_n+11]+ret[_n+12]

    //divide the past returns in 10 decile portfolios//
    xtile r3r = rp3 , nq(10)
    xtile r6r = rp6 , nq(10)
    xtile r9r = rp9 , nq(10)
    xtile r12r = rp12 , nq(10)

    //divide the future returns in 10 decile portfolios//
    xtile r3h = rf3, nq(10)
    xtile r6h = rf6, nq(10)
    xtile r9h = rf9, nq(10)
    xtile r12h = rf12, nq(10)

    // Make Winner returns for past returns 3 and future 3,6,9 and 12//
    bysort mofd: gen winners33 = rf3 if r3r == 10
    bysort mofd: gen winners36 = rf6 if r3r == 10
    bysort mofd: gen winners39 = rf9 if r3r == 10
    bysort mofd: gen winners312 = rf12 if r3r == 10

    // Make Winner returns for past returns 6 and future 3,6,9 and 12//
    bysort mofd: gen winners63 = rf3 if r6r == 10
    bysort mofd: gen winners66 = rf6 if r6r == 10
    bysort mofd: gen winners69 = rf9 if r6r == 10
    bysort mofd: gen winners612 = rf12 if r6r == 10

    // Make Winner returns for past returns 9 and future 3,6,9 and 12//
    bysort mofd: gen winners93 = rf3 if r9r == 10
    bysort mofd: gen winners96 = rf6 if r9r == 10
    bysort mofd: gen winners99 = rf9 if r9r == 10
    bysort mofd: gen winners912 = rf12 if r9r == 10

    // Make Winner returns for past returns 12 and future 3,6,9 and 12//
    bysort mofd: gen winners123 = rf3 if r12r == 10
    bysort mofd: gen winners126 = rf6 if r12r == 10
    bysort mofd: gen winners129 = rf9 if r12r == 10
    bysort mofd: gen winners1212 = rf12 if r12r == 10

    // make mean winner returns per month for past returns 3 and future returns 3,6,9 and 12//
    bysort mofd: egen meanwinners33 = mean(winners33)
    bysort mofd: egen meanwinners36 = mean(winners36)
    bysort mofd: egen meanwinners39 = mean(winners39)
    bysort mofd: egen meanwinners312 = mean(winners312)

    // make mean winner returns per month for past returns 6 and future returns 3,6,9 and 12//
    bysort mofd: egen meanwinners63 = mean(winners63)
    bysort mofd: egen meanwinners66 = mean(winners66)
    bysort mofd: egen meanwinners69 = mean(winners69)
    bysort mofd: egen meanwinners612 = mean(winners612)

    // make mean winner returns per month for past returns 9 and future returns 3,6,9 and 12//
    bysort mofd: egen meanwinners93 = mean(winners93)
    bysort mofd: egen meanwinners96 = mean(winners96)
    bysort mofd: egen meanwinners99 = mean(winners99)
    bysort mofd: egen meanwinners912 = mean(winners912)

    // make mean winner returns per month for past returns 12 and future returns 3,6,9 and 12//
    bysort mofd: egen meanwinners123 = mean(winners123)
    bysort mofd: egen meanwinners126 = mean(winners126)
    bysort mofd: egen meanwinners129 = mean(winners129)
    bysort mofd: egen meanwinners1212 = mean(winners1212)

    Can anyone see if i made a clear mistake or if i have forgotten anything, thanks in advance for your help.

  • #2
    You didn't get a quick answer. You'll increase your chances of a helpful answer by following the FAQ on asking questions - provide Stata code in code delimiters, readable Stata output, and sample data using dataex. If you refer to a paper, please provide a full citation.

    Without spending a lot of time on the paper, no one can answer your question. I don't know whether many of your "corrections" on negative values etc. were done in the original article.

    One immediate thing is to xtset your data and use lags and leads (L. and F.) instead of [_n-3] etc. Unless you've packed a pile of missing observations between firms, the way you do it, Stata will be lagging across firms for many of the observations.

    Comment


    • #3
      Originally posted by Ben Steijns View Post
      hello,

      I am currently recreating the Jegadeesh and Titman (1993) strategy in STATA but i have stumbled upon a problem, my output differs too much with the results from the Jegadeesh paper. My returns are way too high to be compared to jegadeesh and titman. Can anyone spot the mistake in my coding file.

      My CRSP file contains the Share code, Exchange code, Sic Code, Share price, RET and the number of shares outstanding.

      Furthermore i am trying to work with a lookback and holding period of 3-12.

      This is my coding file:

      // replace negative share prices with absolute positive values//
      replace prc = abs(prc)

      // drop if share price is below 5//
      drop if prc < 5

      // keep share code if they are ordinary commons secutiries//
      keep if shrcd == 10 | shrcd== 11

      // keep exchange code if it is in NYSE, NASDAQ, Dow Jones//
      keep if exchcd == 1 | exchcd == 2 | exchcd == 3

      // replace the return if it is smaller than minus 1//
      replace ret =. if ret < -1

      // drop sic code if between 6000 and 7000//
      drop if siccd >= 6000 & siccd < 7000

      // Generate new time variable//
      gen mofd = mofd(date)
      format mofd %tm
      xtset permno mofd, monthly

      //generate L returns for past 6 months//
      by permno: gen rp3 = ret[_n-1]+ret[_n-2]+ret[_n-3]
      by permno: gen rp6 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]
      by permno: gen rp9 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]+ret[_n-7]+ret[_n-8]+ret[_n-9]
      by permno: gen rp12 = ret[_n-1]+ret[_n-2]+ret[_n-3]+ret[_n-4]+ret[_n-5]+ret[_n-6]+ret[_n-7]+ret[_n-8]+ret[_n-9]+ret[_n-10]+ret[_n-11]+ret[_n-12]

      //generate H returns for next 6 months//
      by permno: gen rf3 = ret[_n+1]+ret[_n+2]+ret[_n+3]
      by permno: gen rf6 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]
      by permno: gen rf9 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]+ret[_n+7]+ret[_n+8]+ret[_n+9]
      by permno: gen rf12 = ret[_n+1]+ret[_n+2]+ret[_n+3]+ret[_n+4]+ret[_n+5]+ret[_n+6]+ret[_n+7]+ret[_n+8]+ret[_n+9]+ret[_n+10]+ret[_n+11]+ret[_n+12]

      //divide the past returns in 10 decile portfolios//
      xtile r3r = rp3 , nq(10)
      xtile r6r = rp6 , nq(10)
      xtile r9r = rp9 , nq(10)
      xtile r12r = rp12 , nq(10)

      //divide the future returns in 10 decile portfolios//
      xtile r3h = rf3, nq(10)
      xtile r6h = rf6, nq(10)
      xtile r9h = rf9, nq(10)
      xtile r12h = rf12, nq(10)

      // Make Winner returns for past returns 3 and future 3,6,9 and 12//
      bysort mofd: gen winners33 = rf3 if r3r == 10
      bysort mofd: gen winners36 = rf6 if r3r == 10
      bysort mofd: gen winners39 = rf9 if r3r == 10
      bysort mofd: gen winners312 = rf12 if r3r == 10

      // Make Winner returns for past returns 6 and future 3,6,9 and 12//
      bysort mofd: gen winners63 = rf3 if r6r == 10
      bysort mofd: gen winners66 = rf6 if r6r == 10
      bysort mofd: gen winners69 = rf9 if r6r == 10
      bysort mofd: gen winners612 = rf12 if r6r == 10

      // Make Winner returns for past returns 9 and future 3,6,9 and 12//
      bysort mofd: gen winners93 = rf3 if r9r == 10
      bysort mofd: gen winners96 = rf6 if r9r == 10
      bysort mofd: gen winners99 = rf9 if r9r == 10
      bysort mofd: gen winners912 = rf12 if r9r == 10

      // Make Winner returns for past returns 12 and future 3,6,9 and 12//
      bysort mofd: gen winners123 = rf3 if r12r == 10
      bysort mofd: gen winners126 = rf6 if r12r == 10
      bysort mofd: gen winners129 = rf9 if r12r == 10
      bysort mofd: gen winners1212 = rf12 if r12r == 10

      // make mean winner returns per month for past returns 3 and future returns 3,6,9 and 12//
      bysort mofd: egen meanwinners33 = mean(winners33)
      bysort mofd: egen meanwinners36 = mean(winners36)
      bysort mofd: egen meanwinners39 = mean(winners39)
      bysort mofd: egen meanwinners312 = mean(winners312)

      // make mean winner returns per month for past returns 6 and future returns 3,6,9 and 12//
      bysort mofd: egen meanwinners63 = mean(winners63)
      bysort mofd: egen meanwinners66 = mean(winners66)
      bysort mofd: egen meanwinners69 = mean(winners69)
      bysort mofd: egen meanwinners612 = mean(winners612)

      // make mean winner returns per month for past returns 9 and future returns 3,6,9 and 12//
      bysort mofd: egen meanwinners93 = mean(winners93)
      bysort mofd: egen meanwinners96 = mean(winners96)
      bysort mofd: egen meanwinners99 = mean(winners99)
      bysort mofd: egen meanwinners912 = mean(winners912)

      // make mean winner returns per month for past returns 12 and future returns 3,6,9 and 12//
      bysort mofd: egen meanwinners123 = mean(winners123)
      bysort mofd: egen meanwinners126 = mean(winners126)
      bysort mofd: egen meanwinners129 = mean(winners129)
      bysort mofd: egen meanwinners1212 = mean(winners1212)

      Can anyone see if i made a clear mistake or if i have forgotten anything, thanks in advance for your help.
      Dear Ben, I am also working on momentum strategies. when I used you codes on my file it produces much closer results to the previous literature. I have one confusion here, JT (1993) says first rank the stock according to the previous 6 months and then sort the stock. after sorting, take 10 winners and 10 losers and hold them for next 6 months (J6K6 strategy) but your code file sorting the stock after ranking and holding period. Am I right? Have you sorted out your problem now? can you help me to understand your code?

      Regards

      Comment

      Working...
      X