OpenSourceAP / CrossSection

Code to accompany our paper Chen and Zimmermann (2020), "Open source cross-sectional asset pricing"
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3604626
GNU General Public License v2.0
716 stars 215 forks source link

Check details of Accruals and AnnouncementReturn #51

Closed chenandrewy closed 2 years ago

chenandrewy commented 2 years ago

A PhD student who would like to remain anonymous writes:

I am writing to confirm the detailed definition of two signals in the SignalDocumention.csv (AddInfo).

  1. Accruals (Sloan, 1996).

Detailed Definition: Annual change in current total assets (act) minus annual change in cash and short-term investements (che) minus annual change in current liabilities (lct) minus annual change in debt in current liabilities (dlc) minus change in income taxes (txp). All divided by average total assets (at) over this year and last year. Exclude if abs(prc) < 5.

In Sloan(1996), the two ‘minus’ seem to be ‘plus’, Also, Sloan(1996) substracts depreciation and amortization expense.

  1. AnnouncementReturn (Chan, Jegadeesh and Lakonishok, 1996).

Detailed Definition: Get announcement date for quarterly earnings from IBES (fpi = 6). AnnouncementReturn is the sum of (ret - mktrf + rf) from one day before an earnings announcement to 2 days after the announcement.

The definition in Chan, Jegadeesh and Lakonishok (1996) seem to be ‘from two days before an earnings announcement to one day after the announcement.’

chenandrewy commented 2 years ago

For Accruals, this anonymous PhD student is right. The code has the minus signs right (SignalDocumentation.xlsx is wrong here), but is missing the depreciation part. I added dp part to the code and found the correlation with the old accruals is 95%, so shouldn't make too much of a difference. Fixed here f60fa28d836c19fc862f106007687c9b38efa318

chenandrewy commented 2 years ago

For AnnouncementReturn, it turns out the documentation has a typo but the code is right.

Chan, Jegadeesh, and Lakonishok says image

The code has:

gen AnnouncementReturn = ret - (mktrf + rf)
bys permno (time_d): gen time_temp = _n  // To deal with weekends
xtset permno time_temp

gen time_ann_d = time_temp if anndat == 1 
replace time_ann_d = time_temp + 1 if f1.anndat == 1
replace time_ann_d = time_temp + 2 if f2.anndat == 1
replace time_ann_d = time_temp - 1 if l1.anndat == 1

gen AnnTime = time_d if anndat == 1 
drop if mi(time_ann_d)

gcollapse (sum) AnnouncementReturn (firstnm) AnnTime, by(permno time_ann_d) 

So only days within [-2,+1] of the announcement date are used in the gcollapse.

A snapshot of the data before the drop if mi(time_ann_di) line confirms:

image

But we should update SignalDocumentation.xlsx. I started gathering edits to SignalDocumentation.xlsx in a different issue.