1.

Very briefly state the definition of the variables permno, ret_excess and mktcap.

PERMNO is a unique permanent security identification number assigned by CRSP to each security. Thus, PERMNO is a unique company identifier.

Excess return for a stock is the difference between the stock return and the return on the risk-free security over the same period. For such risk-free securities, it is common to use a government bond such as a 10-year US Treasury bond. 

The variable ‘mktcap’ is defined as the market capitalization, which refers to the total dollar market value of a company’s shares outstanding. Market capitalization is commonly referred to as “market cap,” and is calculated by multiplying the total number of a company’s outstanding shares by the current share market price.

Provide suitable summary statistics of the cross-section of monthly excess returns and market capitalization in the CRSP sample.

Table 1: Summary statistics for monthly excess returns (%) and market capitalization (Million USD)
Variable Mean SD Min q25 Median q75 max
ret_excess 0.83 15.23 -69.06 -6.36 -0.23 6.36 267.75
mktcap 1814.65 8770.21 0.71 43.77 179.04 766.80 242415.02

Summary statistics for monthly excess returns and market capitalization shows that the mean excess return per month is 0.8%, although the median excess return is -0.2%. Returns ranges from -69% to +268%. Market capitalization ranges from $710 thousand to $242 billion. An important distinction between the variables is that ret_excess is in relative numbers while mktcap is absolute, since the return is a relative change and market cap is a true number.

2.

Briefly state why crsp_monthly %>% group_by(permno) %>% mutate(ret_excess_lag = lag(ret_excess)) does not provide the correct result if crsp_monthly contains implicitly missing values.

If crsp_monthly contains implicitly missing values, this will cause ret_excess_lag to not necessarily represent the value of the previous month, but the previous value in the dataset. An implicitly missing value then makes a ret_excess_lag value represent the second lagged value. Even without implicitly missing values, the given code returns a variable with missing values for the first cell of every permno.

Report suitable summary statistics or visualizations that show if returns rt and rt−1 exhibit autocorrelation that is significantly different from zero. What do your results imply? Is there short-term momentum?

The figure above shows that there is no immediate autocorrelation between \(r_t\) and \(r_{t-1}\) in the regular return series (plot A and B). There seems to be more or less random fluctuations in the series and the ACF plot indicates no significant autocorrelation in the first lag. With that said, when utilizing the absolute returns it’s clear that there are more obvious signs of volatility clustering in plot C, which is an indication that high volatility is followed by high volatility. Furthermore, the ACF plot shows that there is significant correlation up until and around 10-15 lags (months).
These plots have been created by grouping on the ‘month’ variable and calculating a weighted mean by market capitalization, to get a presentable presentation of the return data. This aggregation means that we might loose some predictability power in the single stock, but will get a nice total overview of the return series.

Moreover, to provide a more concrete answer to the question, we’ll estimate AR(1) models for a random sample of 10% of the dataset and test the significance of the coefficients. One needs to collect a random sample of ‘permno’ identifiers (that is 2.489 firms) and filter these specific firms from the data, then create the regression and collect the coefficient while only filtering for significant p-values. This leaves us with 277 firms, where there is a significant relationship between \(r_t\) and \(r_{t-1}\), which means that 11.1% are significant.

3.

Generate a new column mktcap_lag_12 which contains the firms’ market capitalization 12-month prior to the measurement date.

Lagging a variable can be a frustrating task, since the days of a month will differ. The below function will always return a date in the nth month after Date. This allows for 1) not exceeding the end of month and 2) handles NA’s really well.

First we create a variable by lagging the month column without touching the others. Next, we merge our sorting variable with the return data. We use the 12-month lagged marketcap as a sorting variable to ensure that the sorts rely only on information available when we create the portfolios.

\[Mom_{i,t} = 100\frac{(mc_{i,t-1} −mc_{i,t-12})}{mc_{i,t-12}}\]

Briefly discuss the difference between computing momentum as the relative change in prices or as the relative change in market capitalization. Since market cap is basically the stock price times volume, there is rarely a large distinction between the two. But the change in market cap will always reflect a change in the public value of a company whereas a change in stock price might be due to stock split or buybacks, which would have significant implications for the stock price but not the actual market capitalization (unless prices are given in adjusted form, e.g. as per yahoo! finance).

Report the time-series means for each cross-sectional value.

Table 2: Summary statistics for momentum
Mean SD Min Q25 Median Q75 Max
18.99 95.41 -89.13 -16.28 5.58 32.99 3168.6

The momentum-indicator in the average month is 18.99% and the cross-sectional standard deviation is 95.41%. In other words, overall momentum has a high and very fluctuating mean value. The median value is less extreme at 5.5, indicating that there are some outliers pulling the mean substantially upwards.

Does momentum exhibit a positive correlation with log\((mc_{i,t})\)?

Table 3: Correlation matrix, momentum and log market capitalization
momentum log_mktcap
momentum 1.000 0.067
log_mktcap 0.067 1.000

Yes, there is a positive correlation coefficient of 0.067 between the momentum value and log of market capitalization.

4.

Perform univariate portfolio sorts in the following way: Compute monthly portfolio breakpoints.

We need to create a function that is able to sort stocks into a number of portfolios. We use quantile() to compute breakpoints for n_portfolios. Then, we assign portfolios to stocks using the findInterval() function. The output of the following function is a new column that contains the number of the portfolio to which a stock belongs.\

First, we create a function that is able to sort stocks into a number of portfolios based on their momentum score. The output one gets when running the function with a dataframe is a new column that contains the number of the portfolio in which the stock belongs. We transform the portfolio column to a factor variable because it provides more convenience for the figure construction below.

To help understand the characteristics of the stocks comprising each of the \(Mom_{i,t}\) sorted portfolios, present the equal-weighted average values of \(Mom_{i,t}\) and \(mc_{i,t}\) for each of the 10 portfolios.

The plot below shows the new portfolios sorts that have been created. Portfolio 1 has the lowest momentum and 10 has the highest.

Table 4: Mean momentum and market capitalization for sorted portfolios
portfolio mom_mean mc_mean
1 -53.840 287.77
2 -30.398 898.60
3 -17.587 1578.18
4 -7.688 2092.48
5 1.188 2479.43
6 10.216 2744.86
7 20.673 2813.27
8 34.744 2727.05
9 58.957 2225.83
10 184.386 1212.70

This summary shows that the lowest portfolio sorts on momentum has the lowest market capitalization as well. Momentum is small for the largest companies. Momentum portfolios ranging from 6 to 8 has the highest market cap. The fact that the highest momentum companies are not the largest makes sense, since the largest companies might not be able to grow their business as much as smaller.

Compute value-weighted monthly excess returns for the decile portfolios. Report the average excess return, the CAPM alpha and the market beta for the 10 momentum sorted portfolios.

The plot indicates that the higher the momentum of a portfolio, the higher is the realized alpha. Alpha becomes negative in the bottom four portfolio sorts. The beta of the momentum portfolio is highest in the lowest decile, which might come from the fact that this is also the portfolio with the lowest market capitalization, as visible in the above table presenting mean market capitalization for the different portfolios.

Finally, analyse the momentum strategy: a portfolio that goes long past winners and short past losers.

Table 5: Performance of the portfolio that goes long past winners and short past losers
term estimate std.error statistic p.value
(Intercept) 0.010 0.003 3.207 0.001
mkt_excess -0.448 0.069 -6.537 0.000

What do you conclude about the performance of the momentum strategy?

The test statistics shows that is it possible to generate 1% alpha by having a short position in the lowest decile momentum stocks and a long position in highest decile. The alpha can be implied by the graph above, which shows that alpha is highest within the highest momentum stocks. The strategy is not market neutral as the beta is -0.45. The values are statistically significant.

5.

For which time-horizon does the momentum deliver the highest risk-adjusted performance?

The momentum strategy delivers the highest risk-adjusted excess return with a 1-month ahead horizon. The 0-month ahead is included as a verification of the method, as this is the same number as earlier reported.

Table 6: Porfolio performace with different time-horizons
k ahead alpha
0 0.010
1 0.107
3 0.105
6 0.106
12 0.011

6.

Based on your findings in 1. and 3., briefly explain why you think a momentum strategy could be costlier to trade than, say, a strategy based on size sorts.

When a given portfolio selection is based on i.e., past year market cap momentum, then the composition of the portfolio would change frequently as this is based purely on the performance of the stock value. Basically, since the analysis is made purely on activity from the past 12 months the momentum-portfolio composition will change often, since the market value of public companies tend to change frequently. Compared to a beta selection strategy where the analysis is made from i.e., 20 or 30 year historic stock price data, then the estimate would change much less frequently. This dramatically increases the need for trading activity and thus transaction costs of the momentum strategy. For the momentum strategy to be efficient, there will have to be frequent turnover, otherwise the strategy might not be able to catch it if a stock loses momentum after it’s traded.

Propose an alternative strategy that may be able to effectively capture the momentum premium but which at the same time delivers lower trading costs. Describe the strategy and implement it within the CRSP sample.

A portfolio that would capture a momentum effect but at the same time deliver lower trading costs, compared to the portfolio in assigment 4, can be a portfolio with a strict no-short selling condition. Instead of buying the upper 10th quantile of momentum and selling the 1st quantile, we strictly go long in the upper 10th quantile. The idea is that this will result in a lower turnover, as assets enter and exit the portfolio less frequently. \

We calculate turnover per month as: \[\frac{Minimum\ of \ assets \ bought\ or\ sold}{Average \ net\ assets }\]. This requires to first calculate the number of firms per month in the 1st and 10th decile (only 10th for the long-only portfolio) and the amount of companies bought or sold per month. Then follow the formula and one gets the turnover per month. To make things simple, we take the average turnover of each month, as the turnover ration.

Report the resulting Sharpe-ratio and average turnover and compare to the baseline momentum strategy from exercise 4.

The table below shows that the portfolio, which doesn’t short the lowest decile ends up with the highest sharpe ratio of 0.15 with the lowest turnover at 24.7%. The portfolio, which takes a short position in the lowest decile ends up with a sharpe ratio of 0.08 and a turnover ratio of 25%. To sum up, the best strategy seems to be without a short-selling strategy.

Table 7: Sharpe ratio and turnover of portfolios
Sharpe Ratio Turnover ratio
Original portfolio 0.087 0.250
No short-portfolio 0.149 0.248