Under the Hood

How Tickerbot Works

Tickerbot turns a plain-English description of a market setup into an alert that runs continuously and only fires when the setup is actually live. This page walks through how the pieces fit together: the data we collect, the precomputed alert flags we maintain, and how those flags combine with on-demand queries to handle anything you want to ask.

The data we keep

Tickerbot maintains a market database of 12,793 tickers updated every five minutes during US market hours. For each ticker we store about 340 fields — prices, OHLCV bars (252 days of history), 50+ technical indicators (RSI, MACD, ATR, moving averages, Bollinger bands), fundamentals (balance sheet, income, cash flow with quarterly history), Benzinga analyst ratings (consensus, individual upgrades and downgrades, price targets), earnings calendar data, and SEC Form 4 insider transactions.

Alongside the equities, we keep live data on 20 forex pairs, 100 cryptocurrencies, gold, silver, oil, natural gas, and 10 economic indicators including the Fed funds rate and treasury yields across the curve. All of it is queryable from the same place.

Precomputed alert flags

On top of the raw data, Tickerbot computes 50 boolean "alert flags" on every ticker, every five minutes. Each flag is a named condition the system has already evaluated. When you write an alert that references one of these flags, Tickerbot doesn't have to interpret your sentence at runtime — the value is already there in the database.

A few of the flags we maintain:

That's a partial list. The full set covers technical setups, market cap and float classifications, beta, fundamentals, earnings calendar position, and analyst ratings activity.

What flags give you

Most useful alerts can be written by combining flags directly. "Stocks breaking out on volume that also have a recent analyst upgrade" is a two-flag combination: breakout AND recent_upgrade. The query takes milliseconds to run because both fields are already on every row.

Stacking two or three flags is also where the most reliable signals come from. A breakout in isolation is a noisy signal — many fail. A breakout combined with confirming volume, a recent upgrade, and an EPS revision is a much rarer event, and the rarity is what makes it worth alerting on.

Multi-flag alert
Any small-cap stock with a breakout, a recent upgrade, and EPS estimates revised up in the last 30 days
IOT matches all four conditions — first time in 14 days.

Custom queries when flags aren't enough

Not every alert is expressible as a combination of flags. Sometimes you want something more specific: a particular percentage move, a custom moving-average period, a cross-asset comparison, a watchlist scoping. For those, Tickerbot uses an AI translation step.

When you write an alert in plain English, the system first checks whether the conditions can be expressed using the existing flags. If they can, it stops there. If they can't, it generates a custom SQL query against the same underlying database — once. The query is saved with the alert and reused on every evaluation. The AI step happens at create time, not at run time.

Custom query
Stocks where the 100-day moving average just crossed above the 50-day, with relative volume above 1.8 and price within 5% of the 52-week high
Tickerbot generates the SQL once and saves it with the alert. Runs every five minutes from then on.

Evaluation and dedup

Every active alert is evaluated against the live market database every five minutes during market hours (4 AM to 8 PM ET, weekdays). Each evaluation returns a set of tickers that currently match. The matching set is compared to the previous evaluation's set, and a notification is sent only for new additions — not for tickers that were already matching.

This is what we call state-change dedup. It's the reason a Tickerbot alert that matches a stock at 10:00 AM doesn't fire again at 10:05, 10:10, 10:15. You get one notification per event, not one per evaluation. We wrote a longer explanation of why this matters in a separate blog post.

One notification per event, not one per evaluation.

Cross-asset and macro

Because all the asset classes share the same database, you can write alerts that span them. A condition involving the 10-year treasury yield, the price of gold, and a watchlist of stocks all sits in one query. The same evaluator that handles equity-only alerts handles cross-asset alerts.

Example
Notify me when the 10-year treasury yield crosses above 4.5% and any large-cap bank in my watchlist is up more than 2% on the day
Cross-asset alert active. The 10Y yield and bank prices are pulled from the same query.

What you don't see

You don't write SQL. You don't pick conditions from a dropdown. You don't configure an evaluation schedule. You write a sentence describing what you want, and Tickerbot does the translation, saves the alert, and runs it every five minutes from then on. Notifications arrive on your phone when something matches.

The reason most stock alert tools don't feel like this is that the underlying engineering is non-trivial: you need precomputed flags to make most queries fast, you need an AI step for the queries that flags can't cover, you need a continuous evaluator, and you need state-change dedup so the alerts stay useful over time. Building any one of those pieces is doable. Building all of them at consumer prices is the work.

Try it

Write your first alert in plain English. Tickerbot handles the rest.