How it works

Three layers. Each one testable on its own.

Rules find candidate zones, a trained model scores them, and an AI explains them. The AI never invents a level; it only talks about numbers the first two layers produced. Everything is computed once per symbol and timeframe and served to every client.

Layer 1 · Detection

Rules, no AI.

Deterministic and fast. The same candles always give the same candidates, so this layer can be unit-tested and replayed on history.

  1. 1

    Find swing highs and lows

    A fractal method sized to each timeframe's volatility (ATR), so a swing on M15 and a swing on D1 are judged on their own scale.

  2. 2

    Cluster swings into zones

    Nearby swings merge into a band. Zone width is a fraction of ATR, so zones adapt to quiet and volatile markets instead of using a fixed pip count.

  3. 3

    Add other level sources

    Round numbers (1.1000, 2,400), previous day, week and month highs and lows, session opens, and volume profile nodes on crypto.

  4. 4

    Merge and prune

    Overlapping zones merge; weak candidates drop. What remains goes to the scorer.

Layer 2 · Scoring

A strength from 0 to 100: the estimated chance price reacts.

Gradient boosting (LightGBM or XGBoost) trained on years of history. Labels come from outcomes: did price react at least X ATR within N candles of touching the zone? Retrained monthly as new outcomes and community data arrive.

Model inputs

  • Number of touches and how clean each rejection was
  • Reaction size after each touch, in ATR
  • How recent the touches are
  • Whether the zone appears on higher timeframes (confluence)
  • Role reversal: old resistance now support
  • Round number or previous high/low overlap
  • Volume at the zone (crypto only)
  • Validation by community contributors

Validation before launch: the scores are backtested on at least 3 years of data per symbol. The hit rate by strength band is published only after it has been measured; see the track record.

Layer 3 · Explanation

An AI that explains, and never invents.

After each candle close an LLM receives the zone data and writes the text you read. It only explains numbers produced by layers 1 and 2, which keeps the output consistent and verifiable.

Per symbol

A short summary: “Gold is trading between 2,385 support and 2,415 resistance…”

Per zone

Why it matters, how many touches, alignment with higher timeframes, what a break would mean.

Outlooks (Elite)

A daily and weekly market outlook across the symbols you follow.

Ask the AI (Pro, Elite)

Questions answered against the current zones, with rate limits by plan.

Rule: the LLM never invents levels or prices. Analysis is regenerated only when a zone changes, not on every candle, so cost grows with symbols, not users.

Signal setups

Zones become trades only through fixed rules.

Two setups at launch. Two more ship once each has a measured track record of its own.

SetupTriggerEntryStop lossTake profit
Zone bounceLive
Price enters a zone with strength 60+ and closes a rejection candle (pin bar, engulfing)Close of the rejection candle, or a limit at the zone edgeBeyond the far edge of the zone + buffer (fraction of ATR)TP1 at 1R, TP2 at the next opposite zone
Break and retestLive
Candle closes through a zone, then price returns to retest it from the other sideOn the retest rejection candleBack inside the broken zone + bufferNext zone in the breakout direction
Liquidity sweepLater
Wick through a zone that closes back insideClose of the sweep candleBeyond the wickOpposite zone
Range tradeLater
Price between two strong zones on a higher timeframeAt either edgeOutside the rangeOpposite edge

Filters on every signal

  • Minimum reward-to-risk of 1.5.
  • No signals during high-impact news. The window is yours to set; default is 15 minutes before and after.
  • Spread filter: skipped if the spread is above a set share of the stop size. M1 uses a stricter filter because spread is a large share of a 1-minute stop.
  • Higher-timeframe trend shown as context: with or against the trend.

Outcome model

Every result in the record is computed the same way. 50% of the position closes at TP1 (1R). The stop moves to entry. The rest runs to TP2 at the next opposite zone. A signal that never fills by its expiry is marked expired. Every published result is computed from these rules and from the levels as sent.

Each signal is stored with its outcome: TP hit, SL hit, expired or cancelled. The public track record is built from this table, nothing else.

Signal format

One structure everywhere.

The app, every notification, the outgoing webhooks and the EA all receive the same object. If you build on the webhook, this is the payload.

signal · JSON
{
  "id": "sig_8f2k",
  "symbol": "XAUUSD",
  "timeframe": "H1",
  "setup": "zone_bounce",
  "direction": "buy",
  "zone": { "low": 2384.2, "high": 2386.9, "strength": 82 },
  "entry": 2387.5,
  "stop_loss": 2381.0,
  "take_profit": [2394.0, 2412.5],
  "confidence": 78,
  "expires_at": "2026-10-05T14:30:00Z",
  "analysis": "H1 bounce from a 4-touch support zone that lines up with H4 support..."
}

Execution

The platform publishes. Your settings decide.

Three modes, set per symbol. Mix them: full auto on gold, tap to execute on forex, alert only on crypto.

Alert only

Starter+

Full details by push, Telegram, email and the in-app inbox. You trade manually.

Tap to execute

Pro+

Execute and Skip buttons on the message. The EA takes only the signals you approve. Approvals expire after a set time, 5 minutes by default.

Full auto

Pro+

The EA takes every signal that passes your filters: risk %, sessions, news windows, max trades, daily loss stop. A notification confirms each opened and closed trade.

Leverage is set by your broker account. Position size comes from risk % of balance (0.1 to 5%, hard cap at 5%) or a fixed lot, so leverage never needs configuring in the app. Risk acknowledgement is required before tap to execute or full auto can be switched on.

Architecture

Compute once, serve many.

One backend computes zones, signals and analysis once per symbol and timeframe. The web app, mobile app, MT5 EA and alert channels all read the same API, so plan limits live in one place.

  • Compute once, serve many

    Zones and analysis are cached per symbol and timeframe. Cost grows with symbols, not users.

  • Server-side limits

    The API decides what each user receives, on every request including EA polls. The app and EA only display and act.

  • EA polls, the server never pushes to MT5

    Simpler, works behind any firewall or VPS, and no broker credentials are ever stored.

  • Everything logged

    Every signal, approval, fill and outcome is stored for the track record, the journal and model training.

  • Plan config in the database

    Limits and prices change without a new release.

  • Engine after each candle close

    Python workers run detection, scoring, signal creation and outcome tracking on a schedule; an AI worker adds explanations.

Zonelytix provides educational analysis and software tools, not financial advice. Trading involves a substantial risk of loss. Hypothetical results do not guarantee future results. You decide what to trade and how much to risk. Full disclaimer