Combining any model with GARCH(1,1) for probabilistic stock forecasting
[This article was first published on T. Moudiki's Webpage - R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Any-mean-model + GARCH(1, 1) for probabilistic stock forecasting
In this blog post, we will explore the combination of any model with GARCH(1,1) for probabilistic stock forecasting. This approach allows us to capture both the conditional mean and conditional variance of stock returns. We will demonstrate the implementation using Python and the ahead
package.
Ref: https://en.wikipedia.org/wiki/Autoregressive_conditional_heteroskedasticity
See also:
- https://thierrymoudiki.github.io/blog/2025/06/21/r/python/beyond-garch-statistical
- https://thierrymoudiki.github.io/blog/2025/06/03/python/beyond-garch-python
- https://thierrymoudiki.github.io/blog/2025/06/02/r/beyond-garch
install.packages("pak") pak::pak("fpp2") devtools::install_github("Techtonique/ahead") pak::pak("fGarch") (res <- ahead::agnosticgarchf(fpp2::goog200, FUN=forecast::auto.arima, h=20)) Point Forecast Lo 95 Hi 95 201 532.1750 518.1879 546.1621 202 532.8717 518.8757 546.8678 203 533.5684 519.5635 547.5734 204 534.2652 520.2513 548.2790 205 534.9619 520.9391 548.9847 206 535.6586 521.6269 549.6903 207 536.3553 522.3148 550.3959 208 537.0521 523.0026 551.1015 209 537.7488 523.6905 551.8071 210 538.4455 524.3783 552.5127 211 539.1422 525.0662 553.2183 212 539.8390 525.7540 553.9239 213 540.5357 526.4419 554.6295 214 541.2324 527.1298 555.3351 215 541.9291 527.8176 556.0407 216 542.6259 528.5055 556.7462 217 543.3226 529.1934 557.4518 218 544.0193 529.8813 558.1573 219 544.7160 530.5692 558.8629 220 545.4128 531.2571 559.5684 ggplot2::autoplot(res)
(res <- ahead::agnosticgarchf(fpp2::goog200, FUN=forecast::thetaf, h=20)) Point Forecast Lo 95 Hi 95 201 531.4982 518.2318 544.7646 202 531.7610 516.1991 547.3230 203 532.0238 514.1041 549.9436 204 532.2867 511.9078 552.6655 205 532.5495 509.5788 555.5201 206 532.8123 507.0890 558.5356 207 533.0751 504.4117 561.7384 208 533.3379 501.5205 565.1553 209 533.6007 498.3883 568.8131 210 533.8635 494.9868 572.7402 211 534.1263 491.2863 576.9663 212 534.3891 487.2548 581.5234 213 534.6519 482.8584 586.4454 214 534.9147 478.0601 591.7693 215 535.1775 472.8202 597.5348 216 535.4403 467.0955 603.7851 217 535.7031 460.8392 610.5670 218 535.9659 454.0004 617.9315 219 536.2288 446.5235 625.9340 220 536.4916 438.3483 634.6349 ggplot2::autoplot(res)
(res <- ahead::agnosticgarchf(fpp2::goog200, FUN=ahead::ridge2f, h=20)) Point Forecast Lo 95 Hi 95 201 532.1740 519.4742 544.8737 202 532.9003 517.9900 547.8106 203 533.6547 516.8217 550.4877 204 534.4346 515.8770 552.9921 205 535.2377 515.1028 555.3726 206 536.0622 514.4648 557.6596 207 536.9062 513.9392 559.8731 208 537.7679 513.5087 562.0272 209 538.6460 513.1598 564.1321 210 539.5390 512.8824 566.1956 211 540.4458 512.6679 568.2236 212 541.3651 512.5096 570.2207 213 542.2961 512.4018 572.1905 214 543.2378 512.3395 574.1361 215 544.1894 512.3188 576.0601 216 545.1501 512.3359 577.9643 217 546.1193 512.3879 579.8506 218 547.0963 512.4721 581.7205 219 548.0805 512.5859 583.5751 220 549.0716 512.7274 585.4158 ggplot2::autoplot(res)
(res <- ahead::agnosticgarchf(fpp2::goog200, FUN=ahead::loessf, h=20)) Point Forecast Lo 95 Hi 95 201 544.3276 520.1558 568.4994 202 548.2888 523.7199 572.8578 203 552.0027 527.0698 576.9356 204 554.1810 528.9140 579.4481 205 556.8539 531.2797 582.4282 206 560.3601 534.5032 586.2171 207 561.5067 535.3893 587.6240 208 565.6928 539.3353 592.0502 209 567.2796 540.7006 593.8586 210 570.1362 543.3525 596.9198 211 574.0123 547.0395 600.9850 212 578.5510 551.4034 605.6986 213 580.8285 553.5191 608.1379 214 584.2104 556.7512 611.6695 215 587.9165 560.3187 615.5144 216 591.1329 563.4066 618.8593 217 594.0383 566.1929 621.8837 218 595.6430 567.6872 623.5988 219 602.2172 574.1590 630.2754 220 604.7474 576.5943 632.9006 ggplot2::autoplot(res)
As we can see from the plots, combining any model with GARCH(1,1) provides a comprehensive view of both the expected stock prices and the associated uncertainty. This method is particularly useful for financial forecasting, where volatility plays a significant role.
To leave a comment for the author, please follow the link and comment on their blog: T. Moudiki's Webpage - R.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.