Financial Simulator, Current Version

This is statistical description for the Financial Simulator built using Python Anywhere.

Idea: We divide large and small stock returns by volatility, which makes them closer to normal and independent identically distributed (IID). This is Chicago Board of Exchange Volatility Index (VIX), available from 1986. After division by VIX, large stock returns become IID normal. See the code and data at a GitHub repository.

Data: Try January 1986 – May 2024,  T = 461 time points, except for volatility, which has  T + 1 data points. It is taken from Federal Reserve Economic Data (FRED) web site from time series VXOCLS (monthly average data:
Jan 1986 – Feb 1990) and VIXCLS (monthly average data: Mar 1990 – Jun 2024):  V(t),\, t = 1, \ldots, T.

Large and small stock returns are from Kenneth French Data Library (Portfolios Formed on Size):  Q_0(t),\, t = 1, \ldots, T for large stocks (measured by top 30%); and  Q_1(t),\, t = 1, \ldots, T for small stocks (measured by middle 40%). These are nominal (not inflation adjusted). To adjust them for inflation, we need to subtract monthly inflation rate, computed from the (not seasonally adjusted) Consumer Price Index taken from FRED. We get then real (inflation-adjusted) versions of returns. We also use short (3-month) and long (10-year) Treasury rates from FRED: end-of-month data Dec 1985 – Jun 2024. We are interested in long-short spread:  S(t), t = 0, \ldots, T.

Modeling volatility: We model VIX as autoregression of order 1 in the logarithmic scale:

 \ln V(t) = (1 - 0.1181)\ln V(t-1) + 0.3456 + W_0(t),

where  W_0 are independent identically distributed innovations with mean zero.
This is a mean-reverting process, stable in the long run. e model residuals  W_0(t) as follows: Remove 12 outliers from the 461 in the right tail and model the rest as normal with mean and standard deviation  -0.01593 and  0.121. Thus innovations are modeled as a mixture with weights  p = 12/461, 1-p of the uniform distribution upon these 12 outliers, and the above normal distribution. We use kernel density estimation to simulate innovations, with Gaussian kernel and bandwidth derived from the Silverman rule of thumb. In this case the bandwidth is 0.03619. This follows the old blog post.

Modeling long-short bond spread: We model spread as autoregression of order 1 but with additional volatility factor, with residuals normalized by volatility:

 S(t) = - 0.069653 - 0.017407S(t-1) + 0.004575V(t) + V(t)W_1(t)

This is similar to Ian Anderson’s work but for monthly instead of annual data, and from 1986 instead of 1928.

Modeling stock returns: For nominal returns, we model large and small returns as

 Q_0(t) = 3.583548 - 0.176190 S(t-1) - 0.115088 V(t) + V(t)Z_0(t)

 Q_1(t) = 3.753727 - 0.038589 S(t-1) - 0.131591 V(t) + V(t)Z_1(t)

For real returns, we model large and small returns as

 Q_0(t) = 3.581447 - 0.176068 S(t-1) - 0.115111 V(t) + V(t)Z_0(t)

 Q_1(t) = 3.751626 - 0.038467 S(t-1) - 0.131614 V(t) + V(t)Z_1(t)

Here  Z_0, Z_1, W_1 are independent identically distributed trivariate Gaussian innovations,
independent from  W_0 with mean zero and known covariance matrix. This follows the old blog post, and is similar to Angel Piotrowski’s research. See also large vs small stocks.

Published by


Response

  1. Financial Simulator, Annual Version – My Finance

    […] discuss a version of this financial simulator for annual data. In the last post, we discussed its currently published monthly version. This is a simplified version based on work by Angel Piotrowski. Here we do not have any bond rates […]

    Like

Leave a reply to Financial Simulator, Annual Version – My Finance Cancel reply