The gap exists before the market opens. Every morning, a subset of stocks are already diverged from their prior close — news has arrived overnight, pre-market participants have reacted, and the opening price is in the process of being determined. The question is not whether the gap will exist. The question is whether you can predict its direction and, more importantly, whether the gap will extend or reverse once regular trading begins.

Most gap strategies answer that question with price data alone: gap size, pre-market volume, historical gap behavior on the ticker. These inputs are real and useful. But they are downstream of the actual cause. The cause is the news. And if you can score the news before the market opens, you have a signal that is upstream of price — causation, not correlation.

The Overnight News Window

The window that matters for gap trading runs from approximately 4:00pm the prior day through 9:30am on the trading day. This is when the information that drives opening gaps is published and processed. Earnings releases land in the after-hours window. Analyst upgrades and downgrades arrive in the pre-market. Regulatory filings, macro announcements, and geopolitical developments can arrive at any point overnight.

The pre-market is structurally thin. Volume is a fraction of regular-hours volume, and institutional participation is selective. This thinness amplifies sentiment impact: a publication that would move a stock 0.5% during regular hours can produce a 2% pre-market move because fewer counterparties exist to absorb the order flow. The gap that results from this amplification can be larger than the information warrants — and that overshoot is part of what the gap-fill pattern exploits on the other side.

The overnight window is also asymmetric by news type. Earnings announcements drive the largest and most consistent gaps because they carry high-quality, quantified information with a direct relationship to expected value. Analyst commentary produces smaller, less reliable gaps. Macro announcements can produce large gaps but with more cross-ticker contamination that makes single-stock prediction difficult. Weighting by news type is part of building a signal that translates across different overnight windows.

Building the Overnight Sentiment Score

The base sentiment score for a gap trade is not a single article's score. It is a weighted aggregate across all articles published about the ticker within the overnight window, adjusted for two dimensions: how recent the article is, and how credible the source has historically been.

Recency matters because the information environment evolves overnight. An article published at 9:00am on the trading day reflects the market's understanding seven minutes before open. An article published at 6:00pm the prior evening reflects the information state fifteen hours earlier, before additional coverage and analysis had accumulated. Information published closer to the open deserves more weight in the signal — not because older articles are wrong, but because more recent articles have access to more information.

Source credibility matters because not all publishers have equal signal quality. A Bloomberg terminal story carries more market-moving weight than an aggregated newswire repost of the same story. A tier-one analyst report from a bulge-bracket firm historically moves prices differently than a retail-facing commentary piece. Credibility scoring is typically estimated from historical source-to-price correlation: sources whose articles have historically preceded accurate price moves in their stated direction receive higher credibility weights.

The baseline normalization step matters as much as the score itself. A ticker that consistently has positive sentiment — because it is in a favored sector, because its coverage is structurally promotional, because it has been in an extended run-up — needs its overnight score evaluated against its own baseline, not against a universal sentiment threshold. A score of 0.6 on a ticker whose 30-day baseline is 0.55 is a weak signal. The same score on a ticker whose baseline is 0.1 is a strong one.

The Gap Prediction Signal

The prediction signal combines three elements: the normalized overnight sentiment score, the pre-market volume ratio relative to the 30-day average, and the urgency classification of the primary news driver.

When all three align — high normalized sentiment, elevated pre-market volume, and an urgency flag on the primary article — the gap-and-go probability is high. The logic is structural: high sentiment means the information is directionally clear and strong; high pre-market volume means institutional participants are already positioned in the direction of the gap; high urgency means the news is time-sensitive and actionable rather than background analysis. Traders who arrive at 9:30 will continue to push in the direction of the pre-existing move rather than fade it.

When sentiment is elevated but pre-market volume is low, the classification shifts. Low volume in the presence of positive sentiment can indicate that the news has not yet been widely processed — a potential gap-and-go candidate that could accelerate at the open — but it can equally indicate that informed participants have already decided the news is insufficient to sustain a move. The pre-market volume signal resolves the ambiguity.

When pre-market volume is elevated but sentiment is neutral or mixed, the gap is more likely to be driven by a mechanical catalyst — index rebalancing, an options expiry, a technical level break — rather than an information event. These gaps have less predictable post-open behavior because there is no coherent narrative driving the move.

The gap-fade candidate classification requires its own logic. A gap-and-go candidate that fails its first set of qualifying criteria does not automatically become a gap-fade. Gap fades have their own pattern: moderate sentiment in an ambiguous direction, low pre-market volume, and a gap size that is large relative to the stock's average true range. The gap has overshot the news, participation is thin, and mean-reversion is the expected behavior once retail order flow arrives at open.

The Filters That Matter Most

Urgency is the single most important filter in separating gap-and-go from gap-and-fill. An urgency flag indicates that the news requires an immediate market response — the event is current, material, and time-sensitive. Breaking earnings releases, FDA approval or rejection decisions, and M&A announcements carry high urgency because the information is new and the market has had little time to price it. Analysis pieces, opinion commentary, and retrospective summaries carry low urgency because the information has likely already been priced by the time the article is published.

High-urgency news with positive sentiment and elevated pre-market volume produces gap-and-go outcomes at a substantially higher rate than analysis-driven sentiment with the same score. The difference is not the sentiment score itself — both may score 0.6. The difference is whether the information is still being processed by the market, or whether the market has already absorbed it.

Pre-market volume ratio is the second critical filter. Volume ratio above 1.5x the 30-day average (trading day average, not overnight average) indicates institutional participation at scale. This filter catches the cases where sentiment is high but participation is sparse — situations where a single large order can produce a misleading pre-market price move that reverses immediately at the open.

A secondary filter worth adding in live systems is the concentration of the sentiment signal. A strong positive score derived from a single high-credibility article is a more fragile signal than the same score derived from eight articles across multiple source types. A single article can be misscored, misinterpreted, or represent a minority view. Broad coverage consensus is more durable.

Python Implementation

import pandas as pd

def overnight_sentiment_score(
    articles: pd.DataFrame,   # columns: ticker, score, urgency, timestamp, source_credibility
    ticker: str,
    window_start: str = "16:00",
    window_end: str = "09:30",
    recency_halflife: float = 2.0  # hours
) -> float:
    now = pd.Timestamp.now()
    df = articles[(articles['ticker'] == ticker)].copy()
    df['age_hours'] = (now - pd.to_datetime(df['timestamp'])).dt.total_seconds() / 3600
    df['weight'] = df['source_credibility'] * (0.5 ** (df['age_hours'] / recency_halflife))
    if df['weight'].sum() == 0:
        return 0.0
    return (df['score'] * df['weight']).sum() / df['weight'].sum()

def classify_gap_with_sentiment(
    gap_pct: float,
    sentiment_score: float,
    volume_ratio: float,
    urgency: str,
    gap_min: float = 0.02,
    sentiment_min: float = 0.4
) -> str:
    if abs(gap_pct) < gap_min:
        return 'no_gap'
    if abs(sentiment_score) >= sentiment_min and urgency == 'high' and volume_ratio > 1.5:
        return 'gap_go' if gap_pct > 0 else 'gap_go_short'
    return 'gap_fade_candidate'

The overnight_sentiment_score function implements the recency-weighted, credibility-weighted average described above. The recency_halflife parameter controls how steeply older articles are discounted — a halflife of 2 hours means an article published 2 hours ago receives half the weight of an article published now, and an article published 4 hours ago receives one quarter the weight. Calibrating this parameter against historical gap data for your target universe will improve signal precision.

The classify_gap_with_sentiment function is an entry-point classifier, not a strategy. In a live system, you would add a baseline normalization step before comparing sentiment_score against sentiment_min, and you would log the classification alongside the raw inputs for review and recalibration.

The gap trading strategy framework covers gap detection and classification without the sentiment layer. The implementation above adds the sentiment dimension on top of that base framework.

The Oyamori Approach

Newsvibe scores news events as they arrive overnight, with timestamps that preserve the temporal relationship between publication time and gap formation. A gap strategy querying Newsvibe can request scores only for articles published within the relevant overnight window — filtering out prior-session coverage that the market has already priced.

The urgency flag in the Newsvibe payload is derived from the structure of the news itself: the publication channel, the type of announcement, and the time elapsed since the underlying event. This flag is available as a filter at query time, which means a gap strategy can express its entry condition directly: high urgency AND score above threshold AND pre-market volume ratio above threshold.

Oyamori's gap tracking layer monitors gap frequency and classification accuracy over time by ticker universe. When the platform's pre-market scan runs, it surfaces tickers meeting gap conditions alongside their Newsvibe scores and volume ratios in a single view — removing the need to manually reconcile data sources before the open.

Algorithmic trading carries substantial risk. This article is educational, not investment advice.

Next: Regime Detection with Sentiment →