How the analysis works

Methodology

The full statistical methodology behind every TickerEdge Labs module — data sources, sample windows, significance tests, out-of-sample validation, and the boundaries we draw between what we publish as ‘Strong’, ‘Notable’, and ‘Noise’.

This page documents exactly how TickerEdge Labs analyzes data and produces its reports. Every number, weight, threshold, and statistical test is published here. We think you shouldn't trust black boxes — including ours.

If anything below isn't clear, write to research@tickeredgelabs.com. We update this page when methodology changes; the changelog at the bottom tracks every revision with a date.


Our principles

Three commitments shape every analytical choice we make.

Show the work. All factor weights, statistical thresholds, sample windows, and validation procedures are documented here. We use the same parameters in production that this page describes. If we change a parameter, we update this page and note it in the changelog.

Validate out-of-sample. Every pattern we surface gets tested on data we held back from the in-sample analysis. Patterns that fail out-of-sample replication get flagged explicitly in your report — not hidden, not silently filtered out. The Friday 11:00 pattern that failed OOS in our Timing Lab sample report is real; we left it in the sample on purpose, because that's what an honest research tool looks like.

Describe, don't prescribe. TickerEdge Labs reports describe what the screening model observed. They don't recommend specific trades, position sizes, entry prices, exit prices, profit targets, or stop losses. Where a competitor's product says "Buy at $189, target $215," ours says "Score 88, sensitive to MACD turning negative." Different framing reflects different products. We are research and screening, not advisory.


Shared methodology

Both modules apply the same conventions wherever possible. The differences are in what data we ingest and what questions we ask of it.

Data sources

  • Intraday market data: EODHD 5-minute OHLCV bars
  • Daily market data: EODHD adjusted close prices
  • Options chains: EODHD (Unicornbay marketplace) contract-level data with greeks
  • Universe membership: Barchart Top 100 list, refreshed daily
  • Fundamental data: Financial Modeling Prep API (revenue, earnings, growth rates)
  • Index benchmarks: SPY and QQQ for relative-strength calculations

All data is consumed under commercial-use licenses. We do not redistribute raw data — only analytical output derived from it.

Trading session conventions

US regular trading hours only: 09:30 to 16:00 Eastern Time. Pre-market and after-hours activity is excluded from all calculations. Half-day sessions (typically the day before Thanksgiving and the day after Christmas) are included with their actual abbreviated hours; the analysis automatically adapts the bar count rather than forcing a full-day grid.

Holidays and missing data

US market holidays are excluded from sample-day counts. If a ticker delists during a sample window, it is removed from the current run and the customer is notified; no synthetic data is used to fill the gap. If a ticker has insufficient trading history (less than 60 days for Timing Lab or less than 200 days for LEAPS Screen), it is shown in the report with an "Insufficient data" placeholder rather than being analyzed with a partial sample.

Multiple comparisons correction

When testing many hypotheses at once — for example, 65 cells in the Timing Lab heatmap — some will appear "significant" purely by chance. A 5% significance threshold means roughly three of 65 cells would pass at random.

We control for this using the Benjamini-Hochberg procedure at a False Discovery Rate of 0.10. This means: among the cells we flag as significant, we expect no more than 10% to be false positives. The threshold is more permissive than Bonferroni correction (which would make the tool useless on real-world signal strengths) but substantially more conservative than uncorrected p-values.

We publish the corrected p-value in every significance table. Uncorrected p-values are available on request for researchers who want to apply their own correction.

Out-of-sample validation

For every pattern that passes in-sample significance testing, we re-compute the pattern on a held-out window of data that was not used in significance testing. A pattern "replicates" if the OOS direction matches the in-sample direction (UP versus DOWN bias) with a meaningful sample size in the OOS window.

Patterns are classified into four tiers:

  • Strong — Significant in-sample AND replicates out-of-sample
  • Tentative — Significant in-sample, OOS uncertain due to low sample size in held-out window
  • Failed — Significant in-sample but flips direction OOS
  • Noise — Did not pass in-sample significance testing

Failed patterns are shown in reports with strikethrough text and a "Failed OOS" tag, in the same position they would occupy if they had passed. We do not hide failed patterns — surfacing them is core to the brand promise.


Timing Lab methodology

Timing Lab analyzes intraday price-direction patterns by day of week and time of day on each ticker in your watchlist.

Data window

  • Lookback: 90 calendar days from report date
  • Bar interval: 5-minute bars
  • In-sample window: most recent 60 trading days
  • Out-of-sample window: 30 trading days immediately preceding the in-sample window

Note that this is "walk-forward backward" — the in-sample period is the more recent data, and OOS is the held-out historical data. We choose this orientation because pattern detection on the most recent data is what subscribers care about; the OOS check on prior data filters out patterns that don't replicate across regimes.

Direction classification

Every 5-minute bar is classified by comparing its open and close:

UP    if Close > Open
DOWN  if Close < Open
FLAT  if Close = Open

FLAT bars are rare (typically less than 0.5% of bars on liquid names) and are excluded from UP-rate calculations. They are counted in the total sample for any descriptive statistics that report bar counts.

Daily direction (used as a context variable, not a Timing Lab output) is computed using the first bar's open and the last bar's close on each trading day.

Cell-level significance testing

The Timing Lab heatmap is a 5 (weekdays) × 13 (thirty-minute blocks) grid, giving 65 cells. For each cell, we test the null hypothesis that the UP rate equals 50% using a two-sided binomial test.

H0:  P(UP bar in this cell) = 0.50
H1:  P(UP bar in this cell) ≠ 0.50

Raw p-values for each cell are computed using scipy.stats.binomtest(up_count, total_count, p=0.5, alternative='two-sided').pvalue.

After computing 65 p-values, the Benjamini-Hochberg procedure is applied across the full grid (not within day-of-week or time-of-day subsets) to control FDR at 0.10. Cells passing the BH-corrected threshold are classified as "significant in-sample."

Out-of-sample replication

For each significant cell, the OOS window UP rate is computed using the same time and day filter. The cell is classified as:

  • Replicates — OOS UP rate is on the same side of 50% as in-sample AND OOS sample size is at least 10 bars in the cell
  • Uncertain — OOS UP rate is on the same side of 50% but OOS sample is less than 10 bars (tier classification: Tentative)
  • Fails — OOS UP rate is on the opposite side of 50% (tier classification: Failed)

We deliberately do not require a specific OOS p-value threshold for replication, because at small OOS sample sizes (10-20 bars per cell) the statistical test loses power. Directional consistency is a more robust criterion at these sample sizes than p-value matching.

Sensitivity regimes

For each Strong pattern, the in-sample data is re-segmented along three conditioning variables, and the pattern's UP rate is computed within each regime:

  1. Market direction: SPY 20-day return positive vs negative on the day of the bar
  2. Relative volume: ticker's 20-day volume above vs below its trailing 60-day median on the day of the bar
  3. Earnings adjacency: bar falls within ±5 trading days of the ticker's most recent or upcoming earnings date

Regimes where the pattern's UP rate changes by 5 percentage points or more relative to the unconditional rate are flagged in the report as "sensitivity callouts." These are descriptive notes about which conditions are associated with stronger or weaker pattern realization — not exit triggers or trade rules.

Pattern stability tracking

Across consecutive weekly runs, we track each Strong pattern's UP rate. Three classifications:

  • Stable: rolling 3-week UP rate within ±3 percentage points of the 12-week baseline
  • Emerging: pattern crossed the significance threshold in the last 4 weeks, did not before
  • Decaying: 3-week rolling UP rate declined by 5+ percentage points versus the 12-week baseline

Patterns flagged Decaying are not removed from the report — they are shown with the tag so subscribers can see the deterioration in real time.


LEAPS Screen methodology

LEAPS Screen identifies long-dated call options on the Barchart Top 100 universe that pass a multi-factor screening model and have liquid, tradable contracts available.

Universe

The Barchart Top 100 list, refreshed daily. Barchart's list is built from a combination of fundamental, technical, and options-activity criteria and serves as a "high-quality, liquid US equity" filter we use rather than re-deriving. We do not modify the universe — every ticker on Barchart's list is scored, regardless of whether the fundamentals appeal to us.

Tickers in the universe must have at least 200 trading days of price history and active listed options chains. ETFs and ADRs are included if Barchart includes them.

Computed indicators

For each ticker, the following are computed daily:

Moving averages (price) - MA20, MA50, MA100, MA200 — simple moving averages of daily close - Used in trend posture classification

Momentum oscillators - RSI(14) — Relative Strength Index over 14 days - MACD — 12/26/9 standard parameters - Used in momentum and overextension scoring

Volatility - ATR(14) — Average True Range over 14 days - ATR/Close ratio — normalized volatility measure - Used in volatility scoring and risk penalty

Price levels - 52-week high and low - Distance from 52-week high (percentage) - Used in entry quality scoring

Returns - 3-month total return - 6-month total return - Used in momentum and relative strength scoring

Relative strength - 3-month return relative to SPY (in basis points) - 3-month return relative to QQQ (in basis points) - Used in relative strength scoring

Volume - 20-day average daily volume - Used in universe threshold check (excluded if below 1M shares/day)

Fundamentals (where available) - Trailing 12-month revenue growth (year-over-year) - Trailing 12-month earnings growth (year-over-year) - Used in risk penalty (negative growth) and Balanced model scoring

Factor scoring

Two models run in parallel on every ticker: Balanced (conservative, weighted toward fundamentals and entry quality) and Aggressive (momentum-leaning, weighted toward relative strength and trend continuation). Each model uses the same six factors with different weights.

Factor Max points Balanced weight Aggressive weight Direction
Trend 25 25 25 +
Relative Strength 20 18 20 +
Momentum 15 12 15 +
Entry Quality 15 15 10 +
Volatility 10 10 10 +
Risk Penalty -20 -20 -20

Each factor produces a sub-score; the model total is the sum of sub-scores, ranging in practice from approximately -10 to 100.

Trend (25 points max)

Above MA200    +8
Above MA100    +5
Above MA50     +6
Above MA20     +4
MA50 > MA200   +2  (golden-cross condition)

Maximum trend score requires the ticker to be above all four moving averages and have its 50-day above its 200-day. Misses on each condition subtract their respective points.

Relative Strength (20 points max)

3-month return minus the 3-month return of the better-performing index (SPY or QQQ). Scored on a piecewise linear scale:

RS ≥ +1500 bps   →  20 points
RS ≥ +1000 bps   →  16 points
RS ≥  +500 bps   →  12 points
RS ≥    +0 bps   →   8 points
RS ≥  -500 bps   →   4 points
RS <  -500 bps   →   0 points

Momentum (15 points max)

RSI between 50-70    +8  (healthy momentum range)
RSI between 70-72    +4  (overextending, partial credit)
MACD positive        +4
MACD signal cross    +3  (within last 5 trading days)

Negative RSI conditions (below 30 or above 72) are not penalized here — they are handled in the Risk Penalty factor.

Entry Quality (15 points max)

Within 4% of 50-day MA      +10
Between 4-8% of 50-day MA   +5
Within 5% of 52-week high   +5

Entry quality rewards consolidation near key technical levels. Tickers far above their 50-day MA tend to score low here even when they score well on momentum — this is the structural tension between Balanced (which weights entry quality higher) and Aggressive (which weights momentum higher).

Volatility (10 points max)

ATR(14)/Close ratio scored on a piecewise linear scale:

ATR/Close ≤ 1.5%    →  10 points  (low volatility)
ATR/Close ≤ 2.5%    →   8 points
ATR/Close ≤ 3.5%    →   5 points
ATR/Close ≤ 5.0%    →   2 points
ATR/Close > 5.0%    →   0 points  (high volatility)

Low-volatility names score higher here, which combined with the Risk Penalty factor pushes the model away from extreme momentum stocks with unstable price action.

Risk Penalty (up to -20 points)

Subtractive factor — applied when any of the following conditions are true:

RSI > 72                                      -5
Below 200-day MA                              -5
ATR/Close > 5%                                -5
Negative revenue growth (TTM, where avail)   -3
Negative earnings growth (TTM, where avail)  -2

Maximum penalty is -20. Tickers below 200-day MA with overextended RSI and high volatility will accumulate substantial penalties even if their other factors score well.

Composite score

The composite score reported in candidate cards combines the higher of the two model totals with contract-quality adjustments:

Composite = max(Balanced, Aggressive)
          + liquidity_bonus     (0 to 10, based on OI)
          + volume_bonus        (0 to 5,  based on contract volume)
          + spread_bonus        (0 to 10, based on tightness)
          + delta_fit_bonus     (0 to 10, based on proximity to 0.60)

Composite is capped at 100. Composite scores below the underlying model total (rare) can occur when no eligible contract exists.

Action tag assignment

The action tag in each candidate card is assigned by this rule chain, evaluated in order:

1. If RSI > 72:                  "Overextended - Caution"
2. If Aggressive ≥ 70 and contract eligible:  "Candidate - Aggressive"
3. If Balanced ≥ 70 and contract eligible:    "Candidate - Balanced"
4. If max(Balanced, Aggressive) ≥ 60:
       If contract eligible:     "Watchlist - Eligible Contract"
       If not:                   "Watchlist - No Eligible LEAPS Contract"
5. Otherwise:                    "Below Threshold - No Eligible LEAPS Contract"

The action tag is purely descriptive of the screening result. It is not a recommendation to take any action.

Contract eligibility filtering

Among all listed call options on a candidate underlying, we filter to LEAPS contracts that pass:

  • Days to expiration: 305 to 455 days (approximately 10-15 months)
  • Delta: between 0.25 and 0.90
  • Option type: Calls only (puts and synthetic strategies are outside the LEAPS Screen scope)
  • Open interest: at least 100 contracts
  • Bid-ask spread: not greater than 85% of ask price
  • Premium per contract: not greater than $2,500 ($25 per share)

Among contracts that pass the filter, the most liquid contract is selected, with secondary preference for delta near 0.60. This selection is reported as the "eligible contract" in the candidate card. Only one contract per candidate is surfaced in v1; multi-strike surfacing is on the roadmap for v2.

The Balanced model uses a tighter delta band (0.45 to 0.90) than the Aggressive model (0.25 to 0.75) reflecting the different risk tolerance each model encodes.

Score sensitivity

The score sensitivity section of each candidate card describes which factor changes would push the composite score below the candidate threshold. This is generated by simulating each conditioning factor flipping (e.g., "What if MACD turns negative?") and reporting the resulting composite delta. Conditions reported:

  • Price closes below MA50
  • Price closes below MA200
  • MACD turns negative
  • RSI(14) falls below 45
  • ATR(14)/Close exceeds 5%
  • Revenue growth turns negative
  • Earnings growth turns negative

These are descriptive: "if X happens, the score declines by Y points to roughly Z." They are not exit triggers, sell signals, or trade rules. The customer is the decision-maker; we describe how the screen would view the new conditions.


Update cadence

Timing Lab - Weekly report, delivered Sunday evening before the Monday US market open (typically 6-8 PM ET) - Watchlist changes are unrestricted within each module's capacity cap - New subscribers receive their first report within 24 hours of signing up (off-cycle delivery), then resume the regular Sunday cadence

LEAPS Screen - Daily report, delivered before the US market open (typically 6:30- 8:30 AM ET) - Runs every trading day; no report on weekends or US market holidays - New subscribers receive their first report on the next scheduled trading day

Both schedules are best-effort; data-feed delays or rendering errors occasionally push delivery later. If a report is more than 4 hours late, subscribers are notified by email with a status update.


Known limitations

We try to be specific about what these tools can and cannot do.

Pattern detection is descriptive, not predictive. Timing Lab tells you that AAPL has been bullish on Monday mornings in the last 60 days. It does not tell you AAPL will be bullish next Monday. The out-of-sample validation guards against curve-fitting, but does not predict future regime shifts.

Screening is a starting point, not a position recommendation. A ticker scoring 85 on LEAPS Screen meets a six-factor technical and fundamental screen — it has not been evaluated for fit with your portfolio, risk tolerance, tax situation, liquidity needs, or any other factor specific to your circumstances. Position-level decisions require analysis outside our scope.

Statistical significance is not effect size. A pattern can be statistically significant (we can reject the null with high confidence) and have a small absolute effect (the 62% UP rate is only 12 points above coin-flip, which translates to thin per-trade expected value after costs). Significance answers "is this real?"; it does not answer "is this profitable to trade?"

Data limits constrain analysis windows. Available intraday history is more than sufficient for our 90-day window. We use 90 days for Timing Lab to balance sample size against regime stability. Longer windows include more data but also more regime changes; shorter windows include less data but more recent conditions. The 90-day choice is a deliberate compromise, not an optimum.

LEAPS contract availability shifts. A ticker can be Candidate-grade one day and Watchlist-grade the next because its previously eligible contract no longer meets spread or open-interest filters. We do not treat option-chain shifts as deterioration in the underlying business — we just report what's eligible today.

Out-of-sample is held-out historical, not unseen future. Our OOS window is the 30 days prior to the in-sample window. This is a weaker form of validation than canonical walk-forward (where OOS is unseen future data). We chose this form because intraday data availability is limited and waiting weeks for "true" OOS data is not practical for a weekly product. If you want stronger validation, take subsequent weeks of Timing Lab reports and compare the patterns flagged today against what actually happened — that's the only true out-of-sample test, and it's available to every subscriber over time.


Versioning and changelog

The methodology in this document is versioned. Material changes are listed below with the date and rationale.

v1.0 — Launch (2026-06-XX) - Initial methodology for Timing Lab and LEAPS Screen - Factor weights and statistical thresholds as documented above

When we change methodology, we will publish: - The date of the change - The specific parameters affected (old → new) - The rationale for the change - Whether previously delivered reports remain comparable to new reports under the changed methodology

Subscribers will be notified of any material change at least 7 days before it takes effect.


Questions and feedback

Methodology questions: research@tickeredgelabs.com

Subscriber support: support@tickeredgelabs.com

We read every research-related email. If something on this page is unclear, ambiguous, or you think we've gotten something wrong, we genuinely want to hear about it. Methodology transparency is a brand value, not just a marketing line.


TickerEdge Labs is a research and screening publication operated by TickerEdge Labs Series of Elevate Management Solutions LLC, a Texas Series Limited Liability Company. TickerEdge Labs is not a registered investment adviser, broker-dealer, or financial planner. The methodology described on this page produces descriptive statistical analysis; it does not constitute investment, legal, tax, or financial advice. See our Terms of Service for the full disclaimer.