Steven Imrich

HomeTrading platforms → Do thinkorswim study alerts fire premarket and after hours?

Do thinkorswim study alerts fire premarket and after hours?

Updated August 27, 2026

Short answer

For equities, a study alert built on bars generally goes quiet outside the regular session, because no new bars are forming for it to evaluate. That's why people think their alerts are broken. Study alerts written against bid or ask do keep updating in extended hours, and so do drawing-based alerts, which is the standard workaround. I could only confirm this from consistent community reports, not from Schwab's documentation, so test it on your own account before you rely on it.

What people actually experience

You set an alert on Friday. Monday premarket the stock gaps twelve percent through your level and your phone stays silent. At 9:30:02 it goes off, telling you about a condition that’s been true for two hours.

That’s been the same complaint for years. It isn’t your notification settings and it isn’t your phone.

Price alerts and study alerts are not the same machine

thinkorswim gives you several alert types and people talk about them as if they’re one feature. They aren’t.

A price alert is created from the Alerts tab by clicking on a value in a quote field, or from a chart by right clicking a price level. It watches a quote field. Which field matters enormously, because Last only changes when a trade prints on the exchanges that feed it, while Bid and Ask keep moving all night.

A study alert is created from MarketWatch > Alerts > Study Alert. It runs a study or a thinkScript expression against a data series at an aggregation period you pick in the dialog. That last part is the whole story.

A drawing alert comes from a line you’ve drawn on the chart. Right click the drawing and create an alert from it.

They behave differently outside regular hours and nobody tells you that.

Why study alerts go quiet, as best anyone can tell

A study alert needs bars. You pick an aggregation period in the Condition Setup section and it evaluates your condition against that series.

For equities outside 9:30 to 16:00 Eastern, the series the alert engine is working from doesn’t appear to be producing new bars. No new bar, no new evaluation, nothing to fire on. When the regular session opens and a bar finally closes, the condition gets evaluated for the first time since yesterday and everything that piled up overnight resolves at once.

I want to be straight with you about the evidence here. Schwab’s own documentation for Study Alerts says nothing about trading sessions at all. What exists is a long trail of users on useThinkScript and r/thinkorswim saying flatly that alerts don’t arrive pre or post market, and, more usefully, a set of workarounds that only make sense if the bar explanation is right. So treat it as well-supported folklore rather than a documented rule, and test it yourself.

The bid/ask workaround, which is the real answer

Schwab’s Study Alerts documentation does confirm one thing that turns out to matter: you can use the bid and ask functions in a study alert.

Bid and ask are quotes, not bars. They update in extended hours. So instead of an alert on price crossing a level, you write the level against the ask:

ask() >= 52.10

Set that as a study alert condition and people report getting notified premarket. Same trick with bid() for a downside level, and you can pair it with the Reverse crossover alerts option so the opposite side gets created automatically when the first one triggers.

The catch is honest and worth saying: you’re now alerting on a quote, not on a trade. In thin premarket a single wide quote can trip it. On liquid names it’s fine. On a $3 biotech at 4:30am it will lie to you.

Drawing alerts also seem to fire

The other workaround people land on is drawing a horizontal price level on the chart, right clicking it, and creating an alert from the drawing. There’s at least one report of three of these firing at 10pm, which is about as clear a demonstration as a forum post gets.

If you only need “tell me when it touches this price”, this is less work than writing a bid/ask expression, and it survives you moving the line later.

The extended-hours checkbox

Here I have to be vague, and I’d rather be vague than wrong. At least one user describes ticking an extended hours box while creating a bid-based study alert, and a couple of third-party guides tell you to check a box to include extended-hours trading. But the current official Alerts article lists the Options section as Submit, Expire, Remind me, and Reverse crossover alerts, with no mention of a session control anywhere.

So: look for it. Scan the Condition Setup area of the alert dialog before you assume it isn’t there. If your build has one, tick it, and you’ve saved yourself the workaround. If it doesn’t, you haven’t gone mad, and neither had the person who told you about it.

Expiry, which quietly kills alerts you forgot about

The Options section is worth two minutes of your attention. Submit decides whether the alert activates now or at a time you set. Expire sets an end date and time, or leaves it open-ended. Remind me notifies you before an alert expires.

The one that bites is Expire. An alert with an expiry you set casually three weeks ago is not going to announce its own death, and Remind me exists precisely because Schwab knows this. If you’re building alerts you intend to leave running for months, leave Expire unspecified and check the alert list occasionally rather than trusting it.

Scan-based alerts are a different animal, and they lag

You can also alert on a scan by saving it to a watchlist and asking to be notified when a symbol is added. This works, and it’s the only way to alert across a whole universe rather than one symbol.

But it’s slow. A useThinkScript administrator put the delay at up to fifteen minutes back when this was discussed most actively, and while I can’t verify a current number, nobody describes it as fast. On daily setups that’s irrelevant. On a one minute breakout it’s useless.

Two limits that stop study alerts existing at all

Two errors come up constantly when you try to move a working chart study into a study alert.

The first is rec usage is not allowed in this context. If your study carries a value forward from bar to bar, the alert dialog refuses it and the OK button stays greyed out. There’s no flag to turn off. You have to rewrite the condition without the self-reference, which sometimes isn’t possible.

The second is that studies used in a study alert must have exactly one plot. A multi-plot study won’t appear as a usable option. Look and Feel inputs (colours, painting strategies) aren’t available either, and constant plots don’t show up in the Plots list at all.

If the script is too heavy rather than too recursive, you’ll get TooComplexException instead, which is a different problem with different fixes.

Test it yourself in one evening

Don’t take my word or the forum’s. Pick a liquid stock after 4pm today. Set two alerts on it, one ordinary price alert at a level a few cents away, and one study alert using ask() >= the same level. Then watch which one goes off.

You’ll know in twenty minutes what’s true on your build, on your account, in this version of the platform, which is more than any page on the internet can tell you.

Related questions