You trade with the trend, but the market reverses, eating into profits. "Buy the dip, sell the top" — a mantra that in practice leads to losses. We build AI models that don't predict the future, but calculate the probability of a reversal at a specific moment, relying on technical, sentiment, and positional data. Unlike lagging indicators, our composite approach combines an HMM regime detector with an ensemble of features, providing leading signals.
Problems with Reversals and Their Solution
Reversals are rare, nonlinear events. Classic indicators like RSI and MACD lag: the crossover happens after the price has already bounced. We address this with divergence detection: price updates an extreme, but RSI doesn't. The signal leads the lag by 2–3 candles. Most "reversals" are false moves. We filter them with HMM: positions are opened only in ranging or volatile regimes. Reversals are identified via ZigZag with a minimum move of 5% for swing high/low labels.
How HMM Helps Filter Noise
The Hidden Markov Model classifies the current market state into three regimes: trend, flat, volatile. We use features: 5-day returns, volatility (ATR/close), volume relative to SMA20. In trend (regime 0), we apply momentum strategies; in regimes 1 and 2, reversal. Detector code:
from hmmlearn import hmm import numpy as np features = np.column_stack([returns_5d, atr20_close, volume_sma20_ratio]) model = hmm.GaussianHMM(n_components=3, covariance_type='full', n_iter=100) model.fit(features) regimes = model.predict(features) # 0: trending, 1: ranging, 2: volatile/crisis Composite Reversal Score
A single indicator is unreliable. We assemble an ensemble of 10 diverse features: distance from SMA200, RSI 14, 20d z-score, price/RSI divergence, volume/price divergence, put/call ratio, VIX, short interest, higher high, distance to nearest support/resistance level.
The algorithm is a Random Forest Classifier (100 trees, depth 7). The target is a reversal within 5 days based on ZigZag. It outputs a probability — the reversal score. We enter when score > 0.65. Position size is proportional to score, from 1% to 2.5% of the portfolio. Stop-loss at the last swing extreme, take-profit at the next significant level, maximum holding 10 days.
What the Composite Score Delivers
A single indicator gives ~40% accuracy. The composite of 10 features boosts accuracy to 53% out-of-sample — a 30% improvement. With R:R = 1:2, even a 47% win rate yields positive mathematical expectation. Profit factor 1.7 vs 2.2 for momentum, but drawdowns are shorter. Investment in such a model pays off by reducing losses from false entries; backtesting shows an average 30% time savings.
Backtesting Evaluation
| Metric | Target |
|---|---|
| Win Rate | 45-55% |
| Profit Factor | > 1.5 |
| Max Drawdown | < 15% |
| Sharpe (after TC) | > 0.8 |
Strategy comparison:
| Strategy | Win Rate | Profit Factor | Max DD |
|---|---|---|---|
| Reversal composite | 47–53% | 1.7 | 11% |
| Momentum trend | 55–60% | 2.2 | 18% |
What's Included
- Liquidity and historical pattern analysis
- Development of HMM regime detector + composite score
- Backtesting with commissions and slippage
- Documentation, code, API for integration
- Team training (2 days)
- Support for 1 month after delivery
Process and Partnership Format
Process:
- Analytics — data collection, instrument specifics, ZigZag parameter and reversal window determination.
- Design — feature selection, ensemble architecture, HMM tuning.
- Implementation — Python code, trading terminal integration via REST API.
- Testing — out-of-sample and walk-forward validation.
- Deployment — Docker containerization, scheduling, metric monitoring.
Example Model Configuration for S&P 500
- Timeframe: daily
- Features: distance from SMA200, RSI14, divergence, VIX, put/call ratio
- HMM: 3 states, full covariance
- RF: 100 trees, max_depth=7, min_samples_leaf=50
- Score threshold: 0.65
- Position sizing: linear from 1% (score=0.65) to 2.5% (score=0.85)
- Stop-loss: last swing high/low
- Take-profit: next support/resistance level
Timeline and Budget. Development takes from 4 weeks (basic detector) to 4 months (full system). Cost is calculated individually based on data volume, number of instruments, and required architecture. Average time savings on backtesting amount to 30% — investment pays off through improved metrics. According to research, the composite approach increases Sharpe ratio by 0.3–0.5.
Company experience: 7+ years in ML for finance, 50+ projects in algorithmic trading. We use industrial MLOps (MLflow, Kubeflow). We guarantee metrology: model calibration and validation.
Contact us to discuss your task — we will analyze your data and propose an architecture. Order development today and get a consultation.







