Using CRSP stock data, define the universe of monthly returns that can be used in calculating momentum portfolios, as well as their ranking return, following the procedure in Daniel and Moskowitz (2016). Your output should be from 1927-2017.
Part 1
Using CRSP stock data, define the universe of monthly returns that can be used in calculating momentum portfolios, as well as their ranking return, following the procedure in Daniel and Moskowitz (2016). Your output should be from 1927-2017.
We are going to replicate the momentum data following the instructions on Kent Daniel’s website.
Steps:
- Universe of stocks: Following Daniel-Moskowitz and Ken French’s procedure, I restrict the sample to common shares (share codes 10 and 11) and to securities traded in the New York Stock Echange, American Stock Exchange, or the Nasdaq Stock Exchange (exchange codes 1, 2, and 3).
- Missing returns: The sample missing of both RET and DLRET are removed from dataset. And
NA
are labeled for their respective missing code. - Duplicates removal: there are several duplicated data in CRSP, we shall remove them before any calculation.
- Delisting return calculation: We use cum-dividend returns for all the calculation. Delisting return is used when there is no listing return available. When both are avaiable, we use compounded rate of return.
- Market Capitalization calculation: Since the price in the dataset is at the end of the period, we shall use 1-period lag to calculate the market capitalization. The market capitalization is computed as the product of valid share price and outstanding shares from previous month.
- Sample period: Trying to include as much as possible, we can get dataset from Jan 1926 to Dec 2017.
- Ranking return: to calculate the ranking return, we select the most recent month as the formation period. Only when there are no less than eight monthly returns over the past 11 months before the formation period, we take the cumulative log return as the ranking return. Also, it requires a valid share price 13 months before the formation period and valid market capitalization 1 month before the formation period.
Input Dataset
The replication starts from the input data:
Variable Name | Variable Type |
---|---|
PERMNO | integer |
date | Date |
SHRCD | integer |
EXCHCD | integer |
RET | character |
DLRET | character |
PRC | numeric |
SHROUT | integer |
R script
1 |
|
Output Dataset
And it gives the following output:
Variable.Name | Variable.Type | Variable.Description |
---|---|---|
Year | numeric | Year |
Month | numeric | Month |
PERMNO | integer | PERMNO ID issued by CRSP |
EXCHCD | integer | Exchange code |
lag_Mkt_Cap | numeric | Firm’s market value the previous month (in millions) |
Ret | numeric | Firm’s returns |
Ranking_Ret | numeric | Firm’s ranking returns |
Part 2
Define the monthly momentum portfolio decile of each stock as defined by both Daniel and Moskowitz (2016) and Kenneth R. French. Your output should be from 1927-2017.
We are going to determine the breakpoints for decile portfolio following Daniel and Moskowitz’ approach and Kenneth R. French’s approach.
Steps
- First we compute the breakpoints at each formation period so that each portfolio contains same number of stocks. To calculate the breakpoints following Daniel and Moskowitz’ approach, we use all firms to create quantiles. For all the formation periods each quantile contains same number of stocks.
- For Kennetch French’s approach, we create breakpoints based on stocks exhcanged in NYSE only. However, the NYSE breakpoints may not include the all firm return ranges. To deal with this problem, we need to remap the head and tail quantiles of NYSE breakpoints to quantiles of all firm breakpoints.
Input Dataset
Variable.Name | Variable.Type | Variable.Description |
---|---|---|
Year | numeric | Year |
Month | numeric | Month |
PERMNO | integer | PERMNO ID issued by CRSP |
EXCHCD | integer | Exchange code |
lag_Mkt_Cap | numeric | Firm’s market value the previous month (in millions) |
Ret | numeric | Firm’s returns |
Ranking_Ret | numeric | Firm’s ranking returns |
R script
1 |
|
Output Dataset
Variable.Name | Variable.Type | Variable.Description |
---|---|---|
Year | numeric | Year |
Month | numeric | Month |
PERMNO | integer | PERMNO ID issued by CRSP |
lag_Mkt_Cap | numeric | Firm’s market value the previous month (in millions) |
Ret | numeric | Firm’s returns |
DM_decile | integer | Firm’s momentum decile as defined by Daniel & Moskowitz |
KRF_decile | integer | Firm’s momentum decile as defined by Kenneth R. French |
Part 3
Calculate the monthly momentum portfolio decile returns as defined by both Daniel and Moskowitz (2016) and Kenneth R. French. Your output should be from 1927-2017.
From previous question, we have times series of deciles. I compute the decile portfolio returns as follows:
- Sample period: Monthly from Jan 1927 to December 2017.
- Value-weighted portfolio: A decile portfolio weighted by total market capitalization and rebalanced monthly.
- Definition of portfolio weights: For value-weighted portfolio, the weight is computed from the weight of lagged market capitalization of respective stock. All the decile portolio return is calculated as value-weighted return.
Input Dataset
Variable.Name | Variable.Type | Variable.Description |
---|---|---|
Year | numeric | Year |
Month | numeric | Month |
PERMNO | integer | PERMNO ID issued by CRSP |
EXCHCD | integer | Exchange code |
lag_Mkt_Cap | numeric | Firm’s market value the previous month (in millions) |
Ret | numeric | Firm’s returns |
Ranking_Ret | numeric | Firm’s ranking returns |
And
Variable.Name | Variable.Type |
Year | numeric |
Month | numeric |
Market_minus_Rf | numeric |
SMB | numeric |
HML | numeric |
Rf | numeric |
R script
1 |
|
Output Dataset
Variable.Name | Variable.Type | Variable.Description |
Year | numeric | Year |
Month | numeric | Month |
decile | integer | Momentum decile |
DM_Ret | numeric | Decile (as defined by Daniel & Moskowitz (2016)) return |
KRF_Ret | numeric | Decile (as defined by Kenneth R. French) return |
Rf | numeric | Riskless rate |
For illustration purpose, we plot log cumulative returns of the KRF momentum decile portfolio and DM momentum decile portfolios.
- Momentum
Part 4
Replicate Table 1 in Daniel and Moskowitz (2016), except for $\alpha$, $t(\alpha)$, $\beta$, and $sk(d)$ rows, and the Market column. Match the format and methodology to the extent possible.
From previous question, we have a times series of decile portfolio returns for each month. I compute the required statistics as follows:
- Sample period: Monthly from Jan 1927 to December 2017.
- Excess return: Annualized excess return is calcualted as mean monthly excess return times 12.
- Volatility: Volatility is calculated as standard deviation of excess return times square root of 12.
- Annualized Sharpe Ratio: For annualized Sharpe ratio, we divide the excess return by volatility.
- Skewness: for all portfolios except WML, the we calculate the full-period realized skewness of monthly log returns of the decile portfolio. For WML return, we calculate the skewness as $log(1 + r_{WML}+r_f)$.
- WML portfolio: the WML portfolio stands for the winner-minus-loser portfolio which is long the Decile 10 portfolio and short the Decile 1 portfolio.
Output Dataset
The output is a $4 \times 11$ numeric matrix, reproducing part of Table 1 in Daniel & Moskowitz (2016). It matches the format and methodology to the extent possible.
Return statistics | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | WML |
Excess_Ret | -2.623 | 2.530 | 3.065 | 6.378 | 7.331 | 7.054 | 9.082 | 10.283 | 11.47 | 15.37 | 17.99 |
Vol | 36.67 | 30.38 | 26.05 | 23.14 | 21.57 | 20.38 | 19.56 | 19.15 | 20.52 | 23.94 | 29.98 |
SR | -0.07152 | 0.08328 | 0.1176 | 0.2755 | 0.3398 | 0.3460 | 0.4642 | 0.5367 | 0.5590 | 0.64207 | 0.6002 |
skm | 0.07515 | -0.1224 | -0.1662 | 0.1291 | -0.08925 | -0.2373 | -0.6442 | -0.5490 | -0.7583 | -0.8084 | -5.106 |
Part 5
Calculate the correlation of your portfolio returns with the Daniel and Moskowitz (2016) breakpoints (by decile), to the portfolio returns on Daniel’s website. Also calculate the correlation of your portfolio returns with the Kenneth R. French breakpoints (by decile), to the portfolio returns on French’s website. Round to 4 decimal places. Correlations should be calculated from 1927-2017.
Steps
- Data source: Kent Daniel provides data download on his website. We can also download the NYSE breakpoints decile portfolio from Kenneth French’s website.
- Sample range: since Daniel and Moskowitz only provide data from Jan 1927 to Dec 2016, we shall compute the correlation with the maximum available time horizon.
- Correlation: For each decile portfolio, we calculate the full-period correaltion between the monthly return of our replicated data and the data given by Kenneth French and Daniel and Moskowitz.
Output Dataset
The output is a 2 by 11 numeric matrix, with the correlations between your estimated DM momentum portfolio returns and the DM momentum portfolio returns on Daniel’s website, and the correlations between your estimated KRF momentum portfolio returns and the KRF momentum portfolio returns on French’s website.
variable | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | WML |
DM correlation | 0.9973 | 0.9972 | 0.9978 | 0.9977 | 0.9978 | 0.9981 | 0.9986 | 0.9989 | 0.9984 | 0.9981 | 0.9948 |
KRF correlation | 0.9977 | 0.9984 | 0.9977 | 0.9977 | 0.9976 | 0.9968 | 0.9978 | 0.9986 | 0.9983 | 0.9988 | 0.9955 |
The difference between the replicated momentum returns and the outcome from Daniel and Moskowitz (2016) and Kenneth French is not zero because of different ways in data processing and sample selection. Part of the deviation comes from the use of data source. Notice that the correlations at higher deciles have closer values to 1, which indicates the breakpoints choice may differ in the lower deciles.
Part 6
Has the momentum anomaly worked in the past few years? Show some empirical evidence.
To examine the performance of momentum strategy in the recent years, we shall analyse the cumulative gains from investments of most recent 10 years. The data is from the output of part 3.
- Performance
As shown in the plot, compared to market cumulative return, the decile 1 and decile 10 return have no superior performance. And we do observe several severe drawdown following the 2008-2009 financial crisis and 2015-2016 crash down. As for the performance of WML portfolio, it has relatively poor performance over this time period. This mostly comes from the short side (the past losers) as it rebounces much more than long side after crash. Overall, the momentum return has the worst performance in the above asset class over recent years.