Use case · Finance
Tag financial news for trading signals
Turn each headline or news item into structured fields: is it about this ticker, what kind of event, which direction, and how material, ready for a screener or a model.
The problem
Markets react to news in seconds, but raw headlines aren't usable by a screener, a backtest or a risk system. LLM summaries are too slow and too expensive to run over every item of a news firehose. Typed answers per headline (event type, direction, materiality) turn the stream into features you can filter, alert on and backtest.
How to frame it
Put the ticker and company name in the state together with the headline (and the first paragraph if you have it). Start with a yes/no gate: is this item really about the company, or just mentions it? Then classify the event type with a choice over your taxonomy, the likely direction for the stock, and a materiality score.
Because every answer is a probability, you can keep the full distribution as features (for example P(earnings), P(bearish)) instead of a single label; models trained on those features usually beat hard labels. One request per headline returns everything.
The questions
about_companyyes_no Is this news primarily about the company named in the state, rather than a passing mention?event_typechoice What kind of event is this news about?directionchoice How is this news likely to affect the company's stock price?materialityscore How material is this news for the company's valuation?
Example request
{
"model": "ora1",
"state": {
"ticker": "NVDA",
"company": "NVIDIA Corporation",
"headline": "NVIDIA raises full-year revenue outlook as data center demand beats expectations",
"body": "NVIDIA said quarterly data center revenue rose 41% and lifted its full-year guidance above analyst estimates, citing strong demand for its latest AI accelerators."
},
"questions": {
"about_company": {
"type": "yes_no",
"instructions": "Is this news primarily about the company named in the state, rather than a passing mention?"
},
"event_type": {
"type": "choice",
"instructions": "What kind of event is this news about?",
"criteria": {
"earnings": "Quarterly or annual results",
"guidance": "Raised, cut or reaffirmed outlook or forecast",
"m_and_a": "Mergers, acquisitions, divestitures",
"product": "Product launches or recalls",
"regulatory_legal": "Regulators, lawsuits, investigations, approvals",
"management": "Executive or board changes",
"analyst": "Analyst upgrades, downgrades, price targets",
"macro": "Economy, rates, sector-wide news",
"other": "Anything else"
}
},
"direction": {
"type": "choice",
"instructions": "How is this news likely to affect the company's stock price?",
"criteria": {
"bullish": "Positive for the stock",
"bearish": "Negative for the stock",
"neutral": "Little or no expected effect"
}
},
"materiality": {
"type": "score",
"instructions": "How material is this news for the company's valuation?",
"criteria": [
"Immaterial",
"Minor",
"Significant",
"Major, likely to move the stock sharply"
]
}
}
}Turn answers into actions
a = response["answers"]
if a["about_company"]["yes_no"] < 0.6:
skip() # passing mention, not news about this ticker
direction = a["direction"]["probabilities"] # keep the distribution as features
features = {
"p_bullish": direction["bullish"], "p_bearish": direction["bearish"],
"materiality": a["materiality"]["score"], # 0..3, can fall between levels
"event": a["event_type"]["choice"], "event_conf": a["event_type"]["confidence"],
}
if a["materiality"]["score"] >= 2 and a["event_type"]["confidence"] >= 0.6:
alert(ticker, features)
Tips
- Include the ticker and company name in the state; it removes most "which company?" confusion.
- Keep your event taxonomy stable over time so features stay comparable in backtests.
- Store probabilities, not just labels; they make far better model inputs.