SBF Intelligence methodology
Every number in the brief and on the terminal is computed by code from price data. A language model writes only the headline and three context points for an already computed brief — it adds and changes no numbers. code: analyze/llm_context.py
Below is what exactly is measured, from which data and with which thresholds. Each item links to the code that computes it.
Data
- Prices: intraday and daily bars from the MT5 trading terminal (history since July 2021). The quote line refreshes every 15 seconds. code: quotes_loop.py
- Macro: Federal Reserve Bank of St. Louis (FRED) series — CPI inflation, unemployment, Fed funds rate, 10y–2y spread, breakeven inflation, WTI oil, trade-weighted dollar. code: core/fred.py
- Economic calendar: official sources, ForexFactory and TradingView; one release seen in several sources is counted once. code: event_reactions_job.py
- News flow: RSS feeds, X and the SBF Economics Telegram channel. code: news_burst_job.py
Market reaction to an event
For each event type (for example, a rate decision) and each related instrument we take past releases. The 30-minute move is the absolute difference between the open and close of the 30-minute bar starting at the release time.
We take the median over all past cases and divide it by the instrument’s daily ATR(14), so moves are comparable across instruments. The move is also compared with the typical move of the same hour of day: 38 points at 15:30 UTC and at 03:00 UTC are different events. code: event_reactions_job.py
The brief shows the number only if there are at least five past releases; otherwise it says “too few past releases yet”. code: analyze/build_brief_v2.py
Who moved wider than usual
For each instrument the move of the last closed day is divided by its own norm — Wilder’s 14-day average true range (ATR14). A ratio above one means a wider-than-usual move. Data older than three days is not used: that is a data gap, not “yesterday”. code: core/movers.py code: core/focus.py
Pattern statistics
Patterns are searched over the full available history on the H1, H4 and D1 timeframes. For each case we check whether price moved in the pattern’s direction after 3, 5 and 10 candles. Cases closer than six candles to each other count as one. Recomputed weekly. code: pattern_stats_job.py
The brief shows a pattern only with statistics of at least 15 cases. code: analyze/build_brief_v2.py
What our measurements showed: agreement of classic candlestick and chart patterns with the direction of the next five bars is 46.8–51.3% across instruments, statistically indistinguishable from 50%. We show this in the course rather than hide it. code: tools/edu_build/pattern_reality.py
News bursts
A burst is when at least five news items about an instrument appeared in the last hour, and at least three times the average hourly count over the last seven days. Checked every 15 minutes. This is attention, not price. code: news_burst_job.py
How far to trust an item in the brief
Each context item in the brief is labelled with its source: “from quotes” — visible in prices; “from media” — with a link to the outlet; “from social media, unverified” — shown because the market reacts to it, but not confirmed. code: analyze/prompt.md
Limitations
- Historical statistics describe the past and do not guarantee future results.
- Small samples give a wide spread, so every number has a minimum-cases threshold.
- Gaps in price data are possible; stale data is never presented as yesterday’s.
- None of this is investment advice: the trading decision is yours.