This repository is an article-derived reference project based on the original MQL5 article. It does not claim to reproduce the full original source code unless files are explicitly attached.
## Overview
Reference repository for an MQL5 implementation of a categorical Hidden Markov Model (HMM) as a discrete-state, discrete-observation state space model. The article describes a `CCategoricalHMM` class and example scripts covering posterior inference, Baum-Welch training, synthetic sampling, model selection via AIC/BIC, and online filtering.
## Original Article
- Article ID: 22745
- Author: Evgeniy Chernish
- Publication date: 2026.06.01 00:41
- Category: Library
- URL: https://www.mql5.com/ru/articles/22745
## Repository Purpose
This repository is intended as a technical reference/reconstruction of the article’s MQL5 material on categorical HMMs.
Its purpose is to preserve the described class interface, workflow, and example scenarios:
- hidden state inference with Forward-Backward
- parameter estimation with EM / Baum-Welch
- synthetic sequence generation
- hidden-state-count selection using AIC/BIC
- real-time recursive filtering
## Key Concepts
- State Space Models (SSM)
- Hidden Markov Models (HMM)
- Discrete latent states
- Categorical emissions
- Transition matrix `TR`
- Emission matrix `E`
- Forward-Backward inference
- Filtering vs smoothing
- EM / Baum-Welch training
- Dirichlet-based random initialization
- Bayesian regularization with pseudo-counts
- AIC / BIC model selection
- Online Bayesian filtering
## Algorithm / Architecture Summary
The article presents a class `CCategoricalHMM` with the following documented members and methods:
- Core parameters:
-`m_numStates`
-`m_numEmissions`
-`m_TR`
-`m_E`
- Priors / regularization:
-`m_pTR`
-`m_pE`
- Training history:
-`m_logliks`
Main methods described in the article:
-`Fit(...)`
- Trains transition and emission matrices with the Baum-Welch EM algorithm.
- Uses scaled inference internally.
- Supports tolerance-based convergence checks.
- Can use pseudo-count priors to avoid zero-probability degeneration.
-`Inference(...)`
- Implements scaled Forward-Backward inference.
- Produces:
- smoothing distribution
- filtering distribution
- backward conditional likelihood terms
- log-likelihood
- scaling coefficients
-`Sample(...)`
- Generates hidden-state and observation sequences from supplied `TR` and `E`.
- Uses cumulative distributions for categorical sampling.
-`Filter(...)`
- Performs one-step online Bayesian update from previous state probabilities and a new observation.
-`AIC(...)`, `BIC(...)`, `GetParams()`
- Support model selection by balancing fit quality and model complexity.
The article also discusses random row initialization with Dirichlet distributions through helper methods:
-`RandomDirichlet(...)`
-`RandomizeMatrix(...)`
## Mentioned or Attached Files
### Explicitly attached files
No attached source files were available in the processed input.
### Files mentioned in the article text
-`CategoricalHMM.mqh` — class declaration and implementation outline for `CCategoricalHMM`
-`Inference.mq5` — inference and synthetic sampling example
-`Learning.mq5` — Baum-Welch training example
-`ModelSelection.mq5` — hidden-state-count selection with AIC/BIC
-`Filter.mq5` — online filtering example
-`MQL5.zip` — archive said to contain the article files
## Statistics
- Language: MQL5
- Main model type: categorical Hidden Markov Model
- The full original repository content was not attached in the processed input.
- Article metadata is incomplete: article ID, publication date, category, and URL were not provided.
- This README is based on the article text and code excerpts only.
- Some implementation details may remain unavailable outside the quoted snippets.
- No claim is made that this repository exactly matches the author’s original archive unless the referenced files are explicitly added.
## Reference
Based on the original MQL5 article by Evgeniy Chernish describing the `CCategoricalHMM` class, its mathematical background, and example scripts for inference, training, model selection, and online filtering.