Welcome to {fHMM}, an R package for modeling financial time series data with hidden Markov models (HMMs). This introduction motivates the approach, gives an overview of the package functionality and the included vignettes, and places the approach in the existing literature.
Earning money with stock trading is simple: one only needs to buy and sell stocks at the right moment. In general, stock traders seek to invest at the beginning of upward trends (hereon termed as bullish markets) and repel their stocks just in time before the prices fall again (hereon termed as bearish markets). As stock prices depend on a variety of environmental factors (Humpe and Macmillan 2009; Cohen, Diether, and Malloy 2013), chance certainly plays a fundamental role in hitting those exact moments. However, investigating market behavior can lead to a better understanding of how trends alternate and thereby increases the chance of making profitable investment decisions.
The {fHMM} package aims at contributing to those investigations by applying HMMs to detect bearish and bullish markets in financial time series. It also implemented the hierarchical model extension presented in Oelschläger and Adam (2021), which improves the model’s capability for distinguishing between short- and long-term trends and allows to interpret market dynamics at multiple time scales.
The functionality of the {fHMM} package can be classified into functions for data preparation, model estimation, and model evaluation. The following flowchart visualizes their dependencies:
The tasks data preparation, model estimation, and model evaluation as well as their corresponding functions and classes are explained in detail in separate vignettes:
The vignette Model definition defines the HMM and its hierarchical extension.
The vignette Controls introduces the set_controls()
function which is used for model specifications.
The vignette Data management explains how to prepare or simulate data and introduces the download_data()
function that can download financial data directly from https://finance.yahoo.com.
The vignette Model estimation defines the likelihood function and explains the task of its numerical maximization via the fit_model()
function.
The vignette State decoding and prediction introduces the Viterbi algorithm that is used for decoding the most likely underlying state sequence and forecasting.
The vignette Model checking explains the task of checking a fitted model via computing (pseudo-) residuals, which is implemented in the compute_residuals()
function.
The vignette Model selection discusses the task of selecting the (in some sense) best model among a set of competing models via the compare_models()
function.
Over the last decades, various HMM-type models have emerged as popular tools for modeling financial time series that are subject to state-switching over time (Schaller and Van Norden 1997; Dias, Vermunt, and Ramos 2010; Ang and Timmermann 2012; De Angelis and Viroli 2017). Rydén, Teräsvirta, and Åsbrink (1998), Bulla and Bulla (2006), and Nystrup, Madsen, and Lindström (2015), e.g., used HMMs to derive stylized facts of stock returns, while Hassan and Nath (2005) and Nystrup, Madsen, and Lindström (2017) demonstrated that HMMs can prove useful for economic forecasting. More recently, Lihn (2017) applied HMMs to the Standard and Poor’s 500, where HMMs were used to identify different levels of market volatility, aiming at providing evidence for the conjecture that returns exhibit negative correlation with volatility. Another application to the S&P 500 can be found in Nguyen (2018), where HMMs were used to predict monthly closing prices to derive an optimal trading strategy, which was shown to outperform the conventional buy-and-hold strategy. Further applications, which involve HMM-type models for asset allocation and portfolio optimization, can be found in Bekaert and Ang (2002), Bulla et al. (2011), Nystrup, Madsen, and Lindström (2015) and Nystrup, Madsen, and Lindström (2018), to name but a few examples. All these applications demonstrate that HMMs constitute a versatile class of time series models that naturally accounts for the dynamics typically exhibited by financial time series.