📐 Methodology

How the system calculates the opportunity score (0-100) and which technical indicators are used.

Scoring System

Score normalized 0-100 (theoretical max 130 pt)

The final score is the sum of the contributions of 7 technical factors (some correlated: support, discount and Bollinger all measure the price's position within the recent range), reduced to 50% if the price is below the SMA200 and normalized with min(raw_score, 100). The theoretical max is 130 pt. Distances are expressed in ATR units (Average True Range over 14 days), so thresholds adapt to each instrument's volatility: a bond ETF and a leveraged equity ETF are judged by the same yardstick. All historical windows exclude the current session: "close to the support" is never true just because today happens to be the low.

Score Interpretation

70–100 🟢 Strong opportunity Email sent
50–69 🟡 Good opportunity Email sent
30–49 🔵 Moderate opportunity Dashboard only
0–29 🔴 Wait Dashboard only

Indicators Contributing to the Score

7 factors + trend filter — theoretical max 130 pt

Support Proximity

+30 / +20 pt

The support level is the low of the last 20 completed sessions. The current price's distance from support is measured in ATR units, so it's relative to the instrument's volatility.

ATR_distance = (price − low_20d) / ATR14
Very close < 1.0 ATR → +30 pt Close < 2.0 ATR → +20 pt

RSI — Relative Strength Index

+25 / +15 pt

The RSI (period 14) measures the speed and magnitude of price movements on a 0–100 scale. Low values indicate the instrument is oversold, which is often a contrarian signal of a potential rebound.

RSI = 100 − 100 / (1 + RS)  |  RS = avg_gain / avg_loss (14 periods)
Strong oversold RSI < 25 → +25 pt Oversold RSI < 30 → +15 pt

Discount from Recent High

+25 / +15 pt

Measures how much the current price has dropped from the high of the last 20 days. A significant drop from the high can indicate a temporary correction, ideal for DCA entries.

ATR_discount = (high_20d − current_price) / ATR14
High discount ≥ 4.0 ATR → +25 pt Mid discount ≥ 2.0 ATR → +15 pt

Bollinger Bands

+20 pt

Bollinger Bands (period 20, std. dev. ×2) define a volatility channel around the moving average. The position % indicates where the price sits within the channel: 0% = lower band, 100% = upper band.

upper_band = SMA20 + 2σ  |  lower_band = SMA20 − 2σ position% = (price − lower_band) / (upper_band − lower_band) × 100
Near lower band position < 10% → +20 pt

Momentum Exhaustion

+15 pt

Combines MACD (12/26/9, on hourly candles from the last month) with the trend score (1h, 4h changes and vs. previous close). Only evaluated if intraday data is less than 2 hours old. When the MACD histogram starts converging toward zero after a downtrend, this is called momentum exhaustion: the sell-off is losing strength.

MACD_line = EMA12 − EMA26 Signal = EMA9(MACD_line) Histogram = MACD_line − Signal
Downtrend exhausting histogram < 0 and rising → +15 pt

Volume Spike

+10 pt

A volume spike during a decline can signal capitulation — panicked sellers exhausting their supply — often followed by a rebound. Today's volume so far is compared with the volume for the same hours over the previous 5 sessions, so the comparison is fair at any time of day. The bonus also requires buying pressure ≥ 55%.

Spike volume > 1.5× average → +10 pt

Market Fear (VIX)

+15 / +10 pt

The VIX (CBOE) is the 30-day implied volatility on the S&P 500: it rises when the stock market is fearful. High values are historically contrarian moments favorable for buying. It's a global factor, the same for all instruments, updated every 60 minutes.

Extreme fear VIX ≥ 30 → +15 pt Fear VIX ≥ 20 → +10 pt

Trend Filter (SMA200)

× 0.5

A decline within an uptrend is more often a correction; the same decline below the 200-session moving average is more often a continuation. If the price is below the SMA200, the raw score is multiplied by 0.5 before normalization. The reason appears among the analysis' rationale.

Calculated Indicators — Display Only

Calculated and shown on the instrument detail page, but don't influence the score

These indicators are calculated on every analysis and saved to the database for historical reference, but don't contribute to the final score. They're excluded to avoid double counting with indicators already present in the system, or because they have a high false-positive rate in rule-based detection.

Stochastic %K / %D

Display Only

The Stochastic (period 14, signal 3) measures the price's position relative to the High-Low range of the last N periods, on a 0–100 scale.

%K = (close − low_14d) / (high_14d − low_14d) × 100 %D = SMA3(%K)  |  Oversold: < 20

Why not in the score: the Stochastic signal has a high correlation with RSI — both measure oversold conditions in the same range. Adding it would double-count the same condition.

Williams %R

Display Only

Williams %R (period 14) is essentially the inverted Stochastic, on a −100 to 0 scale.

%R = (high_14d − close) / (high_14d − low_14d) × −100 Oversold: < -80

Why not in the score: it shares the same logic and variables as the Stochastic and RSI. Adding all three would create redundancy.

Donchian Channel

Display Only

The Donchian Channel (20 days) shows the high and low of the period. The percentage distance from the lower band indicates how close the price is to the recent low.

lower_band = low_20d  |  upper_band = high_20d distance% = (price − lower_band) / lower_band × 100  |  Threshold: < 2.0%

Why not in the score: the low_20d variable is the same one used to calculate support (Factor 1). Including it would mean counting the same data twice.

ATR — Risk Management

Display Only

ATR (Average True Range, period 14) measures average daily volatility. It's used to calculate Stop Loss, Take Profit and Trailing Stop levels proportional to the instrument's volatility.

Stop Loss = price − ATR × 1.5 Take Profit = price + ATR × 1.5 × 2.0 (R/R 2.0:1) Trailing Stop = price − ATR × 1.2

Why not in the score: ATR measures volatility, not direction. It doesn't provide a direct opportunity signal — it's a position-sizing tool.

Chart Patterns (5 types)

Display Only

The system automatically detects 5 classic chart patterns on daily data: Double Bottom, Ascending Triangle, Bullish Flag, Falling Wedge, Island Reversal. They're shown as purple chips on the detail page.

Why not in the score: automatic rule-based detection has a high false-positive rate. The patterns are indicative and require visual confirmation from the analyst.