As we know, volatility in the long run is mean reverting. Given that volatility is mean reverting, when volatility is low, it tends to go up. When it is high and going down, it tends to go down, making it an interesting factor of analysis with broad potential usage.

We will design a volatility forecasting function (VolaProbFunction) in Matlab / C++ / both using a Markov Switching regime or a better model to see if the results are promising.

The model should provide a probability threshold % (going from 0 to 100%) of a volatility spike in the next (Y) days.

Parameters of the VolaProbFunction:

1- [input] Time in hours in the future to get the forecast point (T)

2- [input] volatility jump that we would like to get the probability for(Y)

3- [input] volatility evolution time series (in days or hours) (VOLSERIES)

4- [output] is the probability of having a Y jump in period T from now (PROB).

PROB = VolaProbFunction(VolSeries,T,Y)

0% < PROB < 100%


INPUT for VOLSERRIES is the series: DATE / VIX CLOSE in this file. http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/vixcurrent.csv value for Close of 1-DEC-2017 is 11.43

INPUT for T: 1 day.

INPUT for Y: 1

Function will check the probability of a jump from 11.43 to 12.43 in the next day.

OUTPUT: 45% (45% chance of a 1% jump in VIX at 11.43%)


I thought of using Markov-switching multifractal but I am free to use whatever model I desire to forecast VIX. I was hoping to get some advice on this problem. If anyone has any models that they would recommend or papers I could look up to help code up the model please let me know. I can use whatever language I want i.e., C++, MATLAB, R, or Python.


I am currently trying to use the MS_Regression library on MATLAB. The problem I have is when I simply use the MS_Regression_Fit() function where my dependent variable being the daily close price of VIX and the independent variable as rand(vix_high - vix_low) + vix_low, I get very poor results. I am not sure how to accomplish this task with the library.

Any recommendations on this issue are greatly appreciated.

  • $\begingroup$ Probabllity of a jump of exactly 1.00 is very low, you probably mean probaility of a jump of 1 or more, i.e. the cumulative distribution. $\endgroup$
    – nbbo2
    Dec 5, 2017 at 14:43
  • $\begingroup$ @noob2 yes most likely, do you know of any models or papers I could work from? $\endgroup$
    – Wolfy
    Dec 5, 2017 at 15:39
  • 1
    $\begingroup$ I would use a "model-free" purely data driven approach using the historical daily data from 2004 to present that you have. In your example, find all dates where VIX was close to 11.43 (say 10.43 to 12.43) , then for those dates find the Change in VIX over 1 day, finally find the mean and standard deviation of those changes, giving you an empirical forecast. You could call it a "nearest neighbor" (NN) approach. $\endgroup$
    – nbbo2
    Dec 5, 2017 at 18:21
  • $\begingroup$ But if you want a model I would recommend the 2 factor Bergomi Model, which is based on two OU processes $X_1,X_2$, briefly described here p 29-31 iaqf.org/dev/files/IAQFPresentation_April%2025%20Thalesians.pdf $\endgroup$
    – nbbo2
    Dec 5, 2017 at 18:45
  • $\begingroup$ @noob2 Why do you suggest using a "model-free" approach? $\endgroup$
    – Wolfy
    Dec 5, 2017 at 18:49

1 Answer 1


I am developing MSM model in python feel free to use and ask. all code is in MSM_g2.ipynb (using jupyter).

I can forecast VIX using only the spy data with almost .9 for r-sq, period is 2006-2018.



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.