US Market / System Documentation
Quantitative Momentum Screening & Signal Evaluation Pipeline
Quant Radar is a signal-first, statistics-driven pipeline for identifying high-probability swing trading opportunities in the US stock market. The system does not predict market direction — it evaluates historical signal behavior to rank opportunities by edge and reliability, eliminating subjective bias from the decision process entirely.
Built for a 20-trading-day swing horizon, the system runs automatically every market day after close — from universe scan to execution simulation — without requiring manual chart analysis, fundamental research, or macro judgment.
The system operates as a sequential six-stage pipeline. Each stage produces a clean output that feeds directly into the next. No stage is skipped, no manual override exists between stages.
Defines the tradable pool: 738 US-listed stocks and ETFs available on Pluang, chosen as the broadest universe accessible to Indonesian retail investors. Every downstream stage operates exclusively within this universe.
Scans all 738 tickers daily. Computes a composite momentum score (14-day price momentum × volume surge × 325-day range position) for each ticker, then benchmarks it against that ticker's own rolling 3-year 95th percentile threshold. Tickers with a positive distance above threshold — meaning today's signal ranks in the historical top 5% — are forwarded as candidates. The full table of all 738 tickers sorted by distance is output as the Signal Surge Amplifier Grid.
Receives all radar-positive candidates and subjects each to a full event-based backtest over 3 years of signal days. Two independent scores are computed: Edge (profitability — average return weighted by win rate, tanh-normalized) and Quality (reliability — sample size, temporal distribution, return stability). These combine into a Sniper Score (0–100) with an asymmetric penalty for negative-edge tickers. Each ticker receives a characteristic label (COMPOUNDER / BURST / STEADY / ERRATIC) and a conviction verdict (S / A / B / C tier). A per-ticker detail page exposes the full backtest history for manual review.
Presents all radar-positive candidates as interactive cards for position construction. Users select tickers via checkbox; allocation is automatically computed proportional to Sniper Score. A per-card time-frame selector (5D / 10D / 20D) drives the displayed Expected Value. Three layers of sanity check are available: the card itself, a stress test popup, and the full Sniper detail page.
A post-mortem surveillance layer that appends daily and accumulates a running record of all tickers that have appeared in the radar pipeline. Each ticker is tracked for 20 trading days from its last positive signal day, displaying daily radar distance, closing price, and Sniper Score (only on active signal days) in a scrollable matrix organized by calendar month.
A rules-based simulation — not a live bot, not real capital — that answers: what would happen if a trader followed the system strictly every cycle? Starting from equity 100 on January 2, 2026, it mechanically selects the daily top-5 Sniper Score tickers, allocates by score weight, holds 20 trading days, then rebalances into a new top-5 with chained equity. Performance is tracked against a SPY benchmark rebased to the same starting point.
The stocks universe defines the total pool of tickers the system monitors. Every module downstream — Radar, Sniper, Planner, Tracker, and Executor — operates exclusively within this universe. What is not in the universe is invisible to the system.
The universe consists of 738 US-listed stocks and ETFs available on Pluang — an Indonesian retail investment platform. Pluang was selected as the universe source because it offers the broadest selection of US equities accessible to Indonesian retail investors among all available local brokers. Using Pluang's listed universe ensures that every ticker flagged by the system is actually tradable, not just theoretically screened from a raw market database.
The universe spans multiple sectors and asset types including stocks, ETFs, and funds — covering Technology, Financial Services, Healthcare, Energy, Communication Services, Consumer sectors, and more.
Each ticker in the universe is displayed as a card showing the key identity and price data needed to recognize and contextualize a stock at a glance.
Three tools are provided to navigate the full 738-ticker universe without manually scrolling through every card.
A real-time search field filters the displayed cards instantly as the user types. Matches against ticker symbol, company name, sector, and industry simultaneously. Non-matching cards are eliminated from view automatically. Clearing the field restores the full list.
Sorts all ticker cards alphabetically by ticker symbol. Useful for locating a specific ticker quickly when the symbol is known.
Sorts all ticker cards by daily price change percentage, descending. Surfaces the biggest movers of the day at the top — useful for a quick market pulse check across the entire tradable universe.
Radar Scanner scans the entire stock universe daily and computes a composite momentum score for each ticker. Scores are benchmarked against each ticker's own historical distribution to produce a normalized, comparable ranking — eliminating cross-ticker scale distortion.
Only tickers whose radar score exceeds their personal rolling threshold advance to the Sniper engine.
Four raw market data points are pulled daily for every ticker in the universe. These serve as the direct inputs to the radar score calculation.
The three momentum dimensions are multiplied together into a single composite score. The multiplicative structure means all three conditions must be simultaneously active for the score to be meaningfully elevated — a single strong signal is not enough.
Because RADAR_SCORE is not normalized across tickers, each ticker is benchmarked against its own historical score distribution. The system runs a mini-backtest covering the past 3 years of daily scores per ticker, then extracts the 95th percentile value as the threshold — meaning only the top 5% of historical signal days qualify as genuinely exceptional.
The threshold rolls forward daily: every time the screener runs, one new day is added to the 3-year window and the percentile is recalculated. This keeps the bar adaptive to each ticker's evolving volatility and momentum regime.
Once both RADAR_SCORE and THRESHOLD are computed, distance measures how far today's score sits relative to the threshold — expressed as a percentage. This converts ticker-specific raw scores into a universal ranking dimension.
Only tickers with DISTANCE_% above zero pass through as candidates. The table is ranked by DISTANCE_% in descending order — the higher the distance, the stronger the current signal relative to that ticker's own historical bar.
Z-Score is a supplementary context indicator. Unlike the threshold (which is derived from only the top 5% of days), Z-Score is computed against the full 3-year distribution — all trading days, not just signal days. It answers the question: how unusual is today's radar score relative to the ticker's average behavior?
Z-Score does not affect ranking or Sniper candidacy. It is displayed as a manual sanity check: a very high DISTANCE_% with a low Z-Score may indicate the threshold itself has shifted (e.g. due to a volatile historical window), not necessarily that the signal is fundamentally stronger.
The final output is a full table of all tickers in the universe, sorted by DISTANCE_% from highest to lowest. Each row shows the complete radar reading for that ticker on the current day — including those with negative distance, which are still displayed for reference. Only tickers with DISTANCE_% above zero are forwarded as candidates to the Sniper Validator for deeper analysis.
Sniper Validator receives the candidates that passed Radar's distance gate and subjects each one to a full event-based backtest. The goal is to answer two independent questions: does this signal actually make money (edge), and is that performance consistent enough to be trusted (quality)?
Both dimensions are scored independently on a 0–1 scale, then combined into a final Sniper Score (0–100) that drives the ranking table and the per-ticker conviction verdict.
For each candidate ticker, the engine replays the past 3 years of daily data and identifies every day on which the Radar score exceeded that ticker's rolling threshold. Each such day is recorded as a Signal Day — a historical moment where the system would have triggered an entry. From each signal day, forward returns are measured across three horizons to simulate actual trade outcomes.
Across all signal days, six aggregate metrics are computed per ticker — three win rates and three average returns, one for each forward horizon. These six values are the foundational inputs to the entire edge and quality pipeline.
Edge measures the risk-adjusted expected value of the signal across all three time horizons. Each horizon produces its own edge value by weighting average return by win rate, then the three are averaged into a single raw score. A positive edge means the signal has historically produced a net positive outcome; zero or below means it has not.
The tanh normalization compresses extreme outliers without distorting the distribution of typical values. A ticker with an unusually massive average return won't dominate the ranking at the expense of more consistent performers. The normalization is applied only internally for scoring — the table displays the raw pre-tanh value for transparency.
Each ticker is assigned a behavioral label based on the directional pattern of its per-horizon edge values. This describes how the profitability of the signal evolves over time — whether it peaks early, compounds late, or behaves inconsistently.
Edge grows over time: E₂₀ ≥ E₁₀ ≥ E₅ (all positive), or E₂₀ is positive while E₅ is flat or negative. The signal strengthens the longer it is held. Favored for position sizing with longer hold periods.
Edge peaks early and decays: E₅ ≥ E₁₀ ≥ E₂₀ (all positive), or E₅ is positive while E₂₀ is flat or negative. The signal fires fast and fades. Best captured within the first 5 trading days.
All three edges are positive but the pattern is neither strictly accelerating nor strictly decelerating. Consistent performance across all horizons without a dominant direction.
Mixed edge signs across horizons — no consistent profitability pattern. At least one horizon is negative without a clear directional structure. Treat with caution; the signal behavior is unpredictable.
A signal with strong edge metrics but only 2 or 3 historical occurrences is statistically meaningless — the results could be pure luck. Sample Score rewards tickers with more signal days using a square-root scale to reflect diminishing returns: going from 2 to 10 signals matters far more than going from 40 to 50.
A signal that fired 20 times but all within the same 3-week bull run is regime-dependent — it only works in one specific market condition. Cluster Score detects this by grouping consecutive signal days into clusters (gap below 5 trading days = same cluster) and measuring what fraction of signals represent distinct, independent episodes.
A score near 1.0 means almost every signal occurred in a separate market episode — the strategy has worked across many different regimes. A score near 0.0 means nearly all signals were clustered together, suggesting regime dependency.
Even with good average returns and wide cluster distribution, a signal can still be unreliable if its returns are wildly inconsistent — one massive win skewing an otherwise poor record. Stability Score uses two complementary lenses to assess consistency: magnitude stability (via coefficient of variation) and temporal consistency (via win rate decay over time).
Coefficient of variation (σ/μ) measures return spread relative to average return. Unlike raw standard deviation, CV is scale-independent — a $5 stock and a $500 stock can be compared fairly. CV Stability = 1 / (1 + |σ/μ|). A tight return distribution around a positive mean scores near 1.0; high variance or near-zero mean scores near 0.
Splits the backtest into chronological first and second halves, then compares win rates (based on 20-day returns). If performance is equally strong in both halves, the strategy is not decaying. Score = 1 − |WR_first − WR_second| / 100. A strategy with identical win rates in both periods scores 1.0; large divergence scores near 0. Below 4 signals, temporal check defaults to 0.5 (neutral).
The three quality dimensions — sample credibility, temporal distribution, and return consistency — are averaged with equal weight into a single reliability score. Each dimension is independent and tests a different failure mode: too few samples, regime clustering, and return instability. All three must be strong for the quality score to be high.
Sniper Score is the core output that drives ranking. It combines edge and quality into a single 0–100 conviction score, but the formula deliberately applies an asymmetric penalty: tickers with zero or negative edge are not simply ranked lower — they are mathematically suppressed regardless of quality. A perfectly reliable signal with no historical profitability is not a trading opportunity.
When edge is negative, the score becomes a product rather than an average — both factors multiply each other, creating a double-penalty that prevents quality alone from rescuing an unprofitable signal. When edge is positive, edge and quality are weighted equally, rewarding tickers that are both profitable and consistent. Scores below 50 are considered low conviction regardless of other metrics.
Every ticker in the Sniper table receives a verdict label derived directly from its Sniper Score. The verdict is displayed prominently on the per-ticker detail page alongside the Sniper Score and characteristic type.
Strong edge confirmed by strong reliability. The signal is both profitable and consistent across historical regimes. Highest priority for position consideration.
Good combination of profitability and reliability. A reliable candidate with meaningful historical edge. Worth analysis before entry.
Marginal conviction. Either edge or quality is weaker than ideal. Acceptable for consideration but requires additional context before entry.
Insufficient edge, poor reliability, or both. Structurally below the conviction threshold. Not recommended for position consideration under this system.
For Muslim investors, each ticker in the Sniper table is tagged with its sharia compliance status sourced directly from Zoya Finance. The data is scraped on each run and displayed transparently in both the main table and the per-ticker detail page. Possible values are Halal, Not Halal, or Not Covered (no Zoya data available for that ticker).
Each ticker in the Sniper table is clickable and opens a dedicated detail page. The page consolidates all computed metrics into a structured breakdown to support manual review before any position decision.
Displays last price, current Radar Score vs the rolling 95th-percentile threshold, and a confirmation status (Radar Confirmed if DISTANCE_% > 0). Provides immediate context on why this ticker was surfaced today.
Shows the three quality sub-scores — Sample Signals count, Sample Quality score, Cluster Spread score, and Stability score — alongside the composite Quality Score and its tier label. Color coded consistently with the main table.
Presents the 3×4 stress-test grid: for each of the three horizons (5D, 10D, 20D), shows average return, win rate, average winning trade return, and average losing trade return. The last two columns (avg win / avg loss) are additional detail not shown in the main table. Edge Score and its tier label appear alongside.
Lists the 10 most recent signal days in chronological order, with the Radar Score at entry, entry price, and forward returns at all three horizons with W/L outcome. Used to visually assess whether recent signals are performing consistently.
All historical signal days sorted by Radar Score (descending) — showing the strongest signal occurrences across the entire 3-year backtest window. Entry price and all three forward return columns included. Useful for understanding what the ticker looks like during its strongest signal moments.
Displayed top-right on the detail page. Shows Sniper Score prominently, the Characteristic label (COMPOUNDER / BURST / STEADY / ERRATIC), and the full Verdict tier (S / A / B / C). This is the summary conclusion of the entire Sniper analysis for this ticker.
The final output is a ranked table of all candidates that passed the Radar distance gate, sorted by SNIPER_SCORE from highest to lowest. Each row represents a ticker that has been fully processed through the edge and quality pipeline. Clicking any ticker opens its dedicated detail page with the complete per-ticker breakdown.
Portfolio Planner is the execution layer. It takes the same candidate pool as Sniper (all tickers with DISTANCE_% > 0) and presents them as interactive cards designed for position-building decisions — not discovery or analysis, but the final step of constructing an actual basket.
The page is structured around three layers of sanity check before committing to a position: the card itself (Layer 1), the stress test popup (Layer 2), and the full Sniper detail page accessible via the ticker (Layer 3).
Planner reads from the same pipeline output as Sniper. All tickers that passed the Radar distance gate and completed the full backtest pipeline are displayed here, sorted by Sniper Score descending — identical ranking order to the Sniper table.
Each candidate is presented as a card with a checkbox on the left. The card surface shows everything needed for a quick first-pass judgment without opening any popup. The checkbox color reflects selection state: orange when unselected, green when selected.
Ticker symbol displayed prominently. Below it, the signal characteristic (COMPOUNDER / BURST / STEADY / ERRATIC) and sharia status. Clicking the ticker name opens the full Sniper detail page for that ticker (Layer 3).
A per-card time-frame selector (5D / 10D / 20D). Switching TF immediately updates the EV value shown on the card and in the footer basket. The Sniper Score is displayed below the TF selector as the conviction anchor — it does not change with TF.
The right block shows Expected Value for the selected TF and the score-weighted allocation percentage (only populated when the checkbox is selected). Clicking this box opens the Stress Test popup (Layer 2).
EV represents the probability-weighted average outcome of a single trade at the selected time horizon. It accounts for both the frequency of wins and the magnitude of each outcome — a more complete picture than win rate or average return alone.
In practice, EV computed this way is mathematically equivalent to AVG_ret — the simple average return across all signal days at that horizon. AVG_ret is displayed on the card as a directly interpretable number: the average percentage return historically generated by this signal at this hold period. The full EV formula is shown in the Stress Test popup for transparency.
When one or more tickers are selected via checkbox, each selected ticker receives a portfolio allocation proportional to its Sniper Score relative to the total score of the selected basket. Higher conviction tickers automatically receive a larger slice. Allocation recalculates in real-time as tickers are added or removed.
Unselected tickers show a dash in the allocation field. The sticky footer displays the full basket summary: all selected tickers with their allocation chips, a count of selected positions, and the portfolio-level average EV.
Clicking the EV/Alloc box on any card opens a per-ticker stress test popup. This is the second layer of review — it breaks the EV figure down into its underlying components across all three time horizons, so the user can see not just what the expected return is, but how it is constructed and whether it holds across different hold periods.
For the selected horizon tab: Win Rate, Loss Rate (= 1 − WR%), Avg Win, Avg Loss, EV, and Sample (N). Allows direct comparison of signal behavior at short, medium, and long hold periods before committing to a TF choice.
The popup displays the EV formula inline: EV = (WR% × AvgWin) + (LR% × AvgLoss), where LR% = 1 − WR%. Serves as a reminder that EV is not just average return but a probability-weighted outcome accounting for loss magnitude.
The popup also displays the allocation formula: Alloc = Score / Total Score. Reinforces that allocation is driven purely by Sniper Score weight, not by EV magnitude or manual input.
Clicking the ticker name on any card navigates to the full Sniper detail page for that ticker (documented in 3.12). This is the deepest level of review available — the complete backtest history, regime check, quality breakdown, and conviction verdict. Intended for cases where the card and stress test alone are not sufficient to make a confident entry decision.
The Planner's decision output is not a single table but a live basket built interactively by the user. The three main outputs — EV per ticker, allocation per ticker, and portfolio average EV — together form the execution blueprint for the selected positions.
Tracker Matrix is a post-mortem surveillance layer — not a decision tool. While Radar, Sniper, and Planner recalculate fresh each day, Tracker appends daily and accumulates a running record of every ticker that has been active in the signal pipeline.
Its purpose is to provide a historical view of how radar distance, price, and sniper conviction have evolved day by day for each candidate — enabling retrospective analysis of signal behavior over time.
Data is organized by calendar month, starting from January 2026. Each month has its own view accessible from the landing page. Rows are trading days only — weekends and market holidays are excluded. Columns are tickers, each split into three sub-columns. One new row is appended every trading day automatically.
Each row represents one trading day. Dates run in descending order (most recent at top). Only market-open days are included — no gaps for weekends or holidays.
Each ticker occupies three sub-columns: RADAR, PRICE, and SNIPER. The set of tracked tickers expands as new candidates appear, and contracts as tickers exit their 20-day tracking window.
A ticker enters the Tracker the first day its DISTANCE_% exceeds zero — meaning it passed the Radar gate and became a Sniper candidate. From that point, a 20-trading-day window is opened. The ticker remains tracked for the full 20 days regardless of whether it continues to clear the Radar threshold on subsequent days.
If the ticker re-triggers (DISTANCE_% > 0 again) before the window closes, the window resets from that new date. A ticker exits the Tracker only when 20 trading days have elapsed since its last positive distance reading. This ensures the full forward return period referenced by the Sniper backtest is always observable.
Discarding a ticker the moment it exits radar range would eliminate the ability to track its price behavior post-signal — which is precisely the period the backtest is measuring. The 20-day window preserves the full forward horizon for every signal day, making post-mortem analysis meaningful.
Each tracked ticker exposes three daily data points in the matrix. Together they provide a complete picture of signal strength, price movement, and conviction status for every day the ticker is in the tracking window.
Several tools are provided to make the matrix easier to navigate and analyze without leaving the page.
The landing page lists all available months as selectable buttons, most recent first. Each month opens its own full matrix view. Data accumulates from January 2026 onward, with a new month added automatically at the start of each calendar month.
A search field filters the matrix columns in real-time by ticker symbol. Useful when the tracked universe grows wide and horizontal scrolling becomes tedious. Partial matches are supported.
A small calculator at the bottom of the matrix page. Enter any two prices (e.g. closing price on signal day → closing price on a later date) and it instantly computes the percentage change. Useful for quickly measuring actual trade outcomes against signal day entry without manual calculation.
Clicking any ticker column header opens that ticker's Yahoo Finance page in a new tab. Provides direct access to chart, fundamentals, and news without needing to navigate away from the system manually.
A legend is displayed below the matrix for quick reference.
Alpha Executor is a rules-based simulation engine — not a live trading bot and not connected to real capital. It answers a single question: what would have happened if a trader followed the system's recommendations strictly, every cycle, without deviation?
All positions, returns, and equity figures are purely hypothetical projections based on historical closing prices. This module exists to evaluate the system's aggregate signal quality over time — not to issue trade instructions.
The simulation operates under a fixed, unchanging ruleset. No overrides, no manual selections, no characteristic or sharia filtering — the system picks mechanically based on rank alone.
The simulation begins with a normalized equity base of 100 on January 2, 2026. This is a unit value — not a currency amount — chosen to make percentage returns directly readable as equity levels (e.g. equity 117.74 = +17.74% total return).
At the start of each batch, the system selects the 5 tickers with the highest Sniper Score on that day — regardless of characteristic, sharia status, sector, or any other filter. Pure score-rank selection only.
Each of the 5 selected tickers receives a weight proportional to its Sniper Score relative to the total of the 5 scores — identical to the Planner's allocation formula. Higher conviction tickers receive a larger slice of equity.
All 5 positions are held for exactly 20 trading days. There is no early exit, stop-loss, or take-profit mechanism. The system holds through the full window regardless of intraperiod price behavior.
On trading day 21 (the first day after exit), the simulation rebalances into a new top-5 selection. The new equity base is whatever the portfolio is worth at exit — not reset to 100. Returns compound across batches, creating a chained equity curve that reflects cumulative performance.
Each 20-day hold cycle is called a batch. Batches are numbered sequentially from Batch 1. The system runs one batch at a time — there is no overlap between batches and no idle cash between cycles. The equity is always fully deployed.
Performance is benchmarked against SPY — the SPDR S&P 500 ETF, which tracks the S&P 500 index and is the most widely traded US equity benchmark. SPY is chosen because it is directly tradable (unlike the index itself), making the comparison an apples-to-apples evaluation against a real passive alternative.
SPY is rebased to 100 at the same start date (January 2, 2026) and rebalanced on the same cycle dates as the Alpha Executor — though SPY rebalances have no practical effect since the holding is always SPY. This ensures both equity curves share an identical starting point and time scale.
The top section of the dashboard displays five headline figures updated daily after market close.
The equity curve plots the full daily history of both the portfolio and SPY from inception to today. It is the primary visual for assessing strategy behavior over time.
Daily closing equity of the Alpha Executor simulation. Each point represents the portfolio's unit value at that day's close, accounting for all holdings weighted by allocation.
SPY's daily price rebased to 100 at inception. Plotted on the same axis as the portfolio equity for direct visual comparison. Divergence upward means the system is outperforming the passive benchmark.
Vertical dashed lines mark each rebalance day — the start of a new batch. Labeled "R" on the chart. Allow visual assessment of which market periods each batch covered and how each cycle contributed to overall equity.
Hovering or tapping any point on the curve shows the date, portfolio equity, SPY equity, and the portfolio's daily percentage change for that day. Enables inspection of specific days without navigating away.
A set of risk and return statistics computed across the full daily return history of the simulation. Updated daily after close.
Displays the five tickers currently held in the active batch, with their key position details. The table is static within a batch — holdings do not change until the next rebalance day.
A summary of the three most recently completed batches, displayed for quick historical context without needing to inspect the full equity curve.