As a consequence of optimal investment choices, firms' assets and growth options change in predictable ways. Using a dynamic model, we show that this imparts predictability to changes in a firm's systematic risk, and its expected return. Simulations show that the model simultaneously reproduces: (i) the time series relation between the book-to-market ratio and asset returns, (ii) the cross-sectional relation between book to market, market value and return, (iii) contrarian effects at short horizons, (iv) momentum effects at longer horizons and (v) the inverse relation between interest rates and the market risk premium.
If you are having trouble reading the file you are probably
not using Version 3.0 or later of the reader.
You can solve this problem by downloading the latest verion of the reader
from Adobe.)
If you were at any of the following presentations and want
a copy of the slides, click on the appropriate link:
Windows Machine
All of the code used in the paper has been implemented as matlab function calls and is freely avialable as executable Matlab calls. This implementation was only undertaken recently. The numbers in the paper were generated using a c program that is also available (see below). There are three different Matlab calls:
|
Matlab Function Call |
Description |
Files |
|
getonej
|
This function generates the value of J* and Je* as defined in the paper for a given current interest rate and other parameter values |
getonej.dll |
|
getj
|
This function generates as grid to approximate J* and Je* as defined in the paper. | getj.dll getj.m (help file) |
|
gendata
|
This function takes the grid generated by getj and uses it to generate a data set. | gendata.dll gendata.m (help file) |
To download this, click on one of the following links:
To use these files you will need to have a windows (32 bit) based machine (if you are an academic user and are not using a windows based machine, see below). Then simply copy each file into a convenient directory. Then run Matlab from within that directory. All three function come with help files which should be put in the same directory as the other files. To read the help file, just type "help X" in Matlab, where x is one of the above function names.
For your convenience, see file "hl.m" for some some sample Matlab code that uses the bottom two functions. The file "testonej.m" contains sample code that uses getonej. The file "testall.m" contains sample code that runs all three functions, together with the output (file: testallout.txt) that I produced on my machine. This code takes about 1 minute to run on my Pentium II. Bear in mind that if you are running on Unix, since the random number generator is not identical, not all the output of gendata will be identical to what I got.
Non-Windows Machine
If you are not using a Windows machine, or you would like to alter the code, you can still use these matlab calls so long as you are not using the code for any commercial purpose. The source code can only be freely used for academic purposes. It is expressly forbidden to use (or even download) the source code for any commercial purpose, including research at a commercial organization, without permission. If you satisfy this requirement, then you can compile the function calls yourself from within Matlab on your machine. I suggest taking a look at the online matlab manual that describes how to do this. You should also look at the comments at the begining of each source file.
To download this, click on one of the following links:
To compile each of the calls you need to execute the following command in matlab
mex X Y bgnfunctions.c win.c
where X and Y are filenames that depend on which call you are compiling (see
below). You will probably not need win.c on unix, depending on your
compiler, --- see the notes in the relevant source files. You will need
the following header (header.h). Just put this file in the same directory
as the other files. The values of X and Y for each call is given below:
|
Matlab Call |
X |
Y |
|
getonej |
getonej.c |
gateway_getonej.c |
|
getj |
getj.c |
gateway.c |
|
gendata |
gendata.c |
gateway_gend.c |
If this all works you will be able to call any of these function in matlab by just typing the name. Put the above help files into the directory to get help on how to use the functions. One suggestion, once you are done, run "testall.m". This Matlab file should produce the output as shown in "testallout.txt". This code takes about 1 minute to run on my Pentium II. Bear in mind that if you are running this on Unix, since the random number generator is not identical, not all the output of gendata will be identical to what I got.
Section 6 in the paper contains the results of a simulation exercise. The process involved programming the model in the paper, and then running this program to generate simulated data. This program is publically available. It comes in three forms:
Executable Code (for Windows NT/95 --- optimized to run on a Pentium Pro)
This is available to anyone who wants to run the code and may be used for any purposes. ("bgnold.exe" contains the the original code run in the paper --- see note below.)
To download this, click on one of the following links:
executables.exe
(Self extracting archive)
executables.zip (Zip file)
Source Code
The source consists of two files, "bgn.c" and "win.c". The first file is the main file. You may need to link in the second file depending on what c compiler you use to compile the code. You will be able to tell by looking at the code (or trying to compile without win.c). The source code can only be freely used for academic purposes. It is expressly forbidden to use (or even download) the source code for any commercial purpose, including research at a commercial organization, without permission. (The original code used was "bgnold.c" -- see note below.) If you are thinking about making changes to the code, you should consider using the matlab calls, since this code is more readable.
To download this, click on one of the following links:
source.exe
(Self extracting archive)
source.zip (Zip file)
Matlab Calls
The functions can be called from within Matlab as matlab functions. See below for more details.
In the original code an approximation was used to speed up execution. It has since become apparant that this approximation was not as accurate as earlier anticipated and so, since publication, the above code has been changed to incorporate a more accurate approximation (at some cost to speed). For more details consult the documentation at the beginning of bgn.c.
Once you have downloaded the code, you need an input file to run the code:
To download this, click on one of the following links:
input_tex.exe (Self extracting archive)
input_tex.zip (Zip file)
As you can see from the input file it is also TeXable (if you do
not know what this means ignore it). By TeXing the file you are able
read the inputs to the program easier. Here
is an example of the TeXed input file used in the paper. There
are a few things to note about the input file. It takes approximately
24 hours to run one simulation in the paper on a Pentium Pro 200.
However, by reducing the tolerance to 0.01, you can cut this to 1.5
hours. You can further reduce the execution time to a matter of minutes
if you change any parameter that does not affect the value of the
growth options (and have already run the program). In this case change
TOG from 0 to 1 and the value of growth will be read from the
file GRID5.DAT (saved from the previous run). You will
notice that the program also saves other intermediate files, like
econ.dat. This file contains the innovations in the kernal
and interest rate processes and so allows two separate runs with the
same pricing and interest rate processes. To read in this file change
dep_run from 0 to 1. The type of output is determined by the
variable math. The output can either be in regular space separated
columns (formatted for matlab) or in a form that can be read directly
into mathematica (formatted for mathematica). The program can potentially
produce a large amount of output. When the output gets very large
it automatically just produces only the files required to generate
the statistics in the paper. If you want only market information set
math=2. The file market.out
is always space seperated regardless of what math is set to.
The output of the program itself contains a detailed description of
the output files.
The above program is used to generate the Fama-French histograms (Figures 2-5) in the paper. The actual process of compiling the output of each run (i.e., doing the FF regressions and saving the output) and then producing the histogram is quite intensive. Although the histogram itself is generated by Mathematica, the data compilation was done using Matlab. On a windows machine the (only) way to do this is to repeatedly call the c program from Matlab. This Matlab program should be easy to customize for other machines/applications and is available to anybody who wants to use it.
To download this, click on one of the following links:
ffbeta.exe (Self extracting archive)
ffbeta.zip (Zip file)
The momentum/contrarian plot (Figure 6) was generated by
also repeatedly running the c program. This code calls, "hret.m",
another piece of Matlab code, this code is included as well. Both of
these Matlab programs should be easy to customize for other machines/application
and is available to anybody who wants to use it.
To download this, click on one of the following links:
hl_hret.exe (Self extracting archive)
hl_hret.zip (Zip file)