Why Dolvol and Beta?

As I have shown you already in Let's open the black box and A few simple rows, I currently use the two asset factors past trading volume (dolvol) and market beta (beta) to find the optimal asset allocation in my investment strategy. However, a natural question following this is, of course, “Why am I using these two factors in particular?”. 


One of the reasons to start with is that I only turn to asset factors that can be constructed using completely available financial data. My source of such data consists mainly of the sorts that are available via the yfinance python package and the Kenneth R. French data library. The different types of data that I do have access to are, in short, different kinds of stock prices (open, close, adjusted close, high, and low), trading volumes, and some types of factor portfolio returns (market returns, small-minus-big returns, value-minus-growth returns, etc.). And this makes the universe of available asset factors somewhat restricted. 


Nevertheless, before deciding on the dolvol + beta combination that I use today, I did in fact consider a couple of other combinations. For which I will show you the construction of and performance evaluation below. 


I first consider three different single factors, using only dolvol, beta, and momentum (mom) alone. In doing so, I begin with loading the necessary data needed for the analysis. And I also calculate the one-year momentum as the compounded return from t -13 to t – 1


I use these variables to obtain three separate standardized x matrixes for each of the single asset factors dolvol, beta, and mom. Like The Static, the Expanding, and the Moving, I split my data into two parts to consider the out-of-sample performance. 

I can then build a function that works similar to the theta function in A few simple rows, but it uses only one assets factor to find the optimal asset allocation. Here follows the code for this function when using dolvol as a single factor.


To estimate the optimal values of theta when using beta or mom as single asset factors, you just need to change onefactor1 to onefactor1 = betz1 or onefactor1 = momz1.
 
From using the estimated thetas, I can then obtain the proportions or weights of each stock given a certain investment budget. I redefine onefactor to onefactor2 = dolz2 since I want to get the out-of-sample weights with respect to dolvol.


The steps for estimating optimal values of theta and stock weights when using the following combinations of asset factors: dolvol + beta, dolvol + mom, beta + mom, and dolvol + beta + mom, are quite similar.
 
I start with obtaining the standardized x matrixes for each combination. Note that xhata to xhatc uses a combination of only two factors meanwhile xhatd uses all three.

 

I define two different functions for finding the optimal thetas when using a combination of two vs. all three factors. The asset weights following these functions are also obtained in a similar way as before.


And now to the one-billion-dollar question: “How did it actually go for each combination?”.

I use the functions and code as displayed above to obtain the weights and the corresponding excess portfolio returns for, in total, seven different combinations (that is, three single-, three double-, and one triple-factor combination).


With these portfolio returns in hand; this is what the cumulative return of each combination looks like.


Combinations using dolvol seem to do consistently well. The same pattern is also observed when looking at Sharpe Ratio.


Or, when looking at abnormal returns.


This graphical representation of abnormal returns especially shows that the three combinations dolvol, dolvol + beta, and dolvol + beta + mom perform similarly and that they are quite competitive compared to the other combinations. 


It is also remarkable to see how well dolvol performs even on its own, meanwhile how including momentum (which I initially had strong faith in) doesn’t really alter the performance.






Comments