Google's foundation model for time series forecasting — empirically evaluated across 6 trading use cases. What works, what fails, and how to build a production pipeline around it.
TimesFM (Time Series Foundation Model) is Google Research's pre-trained foundation model for time series forecasting. Released as an open-weight model and available via API, it brings the zero-shot transfer paradigm — so successful in NLP with GPT-class models — to the world of time series data.
The key insight: instead of training a dedicated model for each time series (the classical approach with ARIMA, Prophet, LSTM), TimesFM was pre-trained on a massive corpus of real-world time series data — over 100 billion time points covering finance, weather, energy, retail, and more. It then generalizes to unseen datasets without any fine-tuning.
TimesFM uses a patched decoder-only transformer architecture — an important departure from encoder-decoder models like PatchTST. Here's what that means in practice:
| Component | Design Choice | Why It Matters for Trading |
|---|---|---|
| Input Patching | Time series split into fixed-size patches (e.g., 32 points). Each patch = one token. | Reduces sequence length dramatically. Handles 512+ lookback bars efficiently. |
| Decoder-Only | Autoregressive generation (like GPT). Predicts next patch conditioned on prior patches. | Natural fit for causal time series. No information leakage from the future. |
| Quantile Heads | Outputs multiple quantiles (q10, q50, q90) simultaneously via specialized output heads. | Built-in uncertainty quantification. CI bands = actionable TP/SL zones. |
| Normalization | Per-instance normalization before patching. Denormalization after inference. | Works on any scale: price in dollars, ATR in %, volume in millions. |
| Covariates (v2.5) | Optional exogenous inputs alongside the target series. | Pass sector index alongside individual stock for context enrichment. |
Think of TimesFM as a "pre-trained brain for time series" — exactly like how ChatGPT knows grammar without being trained on your specific documents. You give it 150 bars of ATR history, it gives you the next 10 bars of ATR prediction with uncertainty bounds. No custom training, no hyperparameter tuning. That's the entire value proposition.
| Version | Key Addition | Relevance to Trading |
|---|---|---|
| TimesFM 1.0 | Original model. Point forecasts + basic quantiles. | Baseline zero-shot performance. |
| TimesFM 2.0 | Covariate support. Multi-series batch inference. | Sector rotation enabled. Faster pipeline. |
| TimesFM 2.5 | Improved quantile calibration. Better uncertainty on financial data. | CI bands more reliable. q10-q90 covers ~80% of actual moves. |
We ran an extensive backtest across 120 evaluation points, 15 tickers, and 8 time windows to assess TimesFM's practical utility for trading. Here's the honest scorecard — no vendor marketing, just data.
| Use Case | Score | Verdict | Best Application |
|---|---|---|---|
| UC1 — Price Forecasting | 6/10 | Partial | CI bands as TP/SL zones; mega-caps only for direction |
| UC2 — Volatility (ATR/RVOL) | 8/10 | Strong | Pre-squeeze detection, dynamic position sizing |
| UC3 — Volume Forecasting | 8.5/10 | Very Strong | Breakout filter, false breakout elimination |
| UC4 — Earnings / Events | 2/10 | Fail | N/A — exclude earnings windows entirely |
| UC5 — Multi-Series / Rotation | 7.5/10 | Good | Weekly sector rotation ranking, spread forecasting |
| UC6 — Setup Scoring | 5/10 | Partial | Multi-factor only (CI_width + vol + sector), never direction alone |
TimesFM is not a price prediction machine. It's a volatility and volume regime detector with built-in uncertainty quantification. The moment you stop asking "where will the price go?" and start asking "how predictable is the behavior of this series?" — the tool becomes genuinely useful.
Price forecasting is the obvious first use case — and the most disappointing. Raw directional accuracy across 15 tickers sits at 44% globally, which is worse than a coin flip when you account for transaction costs. However, the story is more nuanced for specific asset types.
| Ticker / Category | Directional Accuracy | Verdict | Notes |
|---|---|---|---|
| SPY | 62% | Use | Most liquid, mean-reverting regime captured well |
| AMZN | 75% | Use | Best performer. Institutional flow = smoother series |
| META | 75% | Use | Same profile as AMZN. High market cap, predictable |
| QQQ, IWM | 54–58% | Caution | Marginal edge. Use CI bands only, not direction |
| Small/mid-cap equities | 38–42% | Avoid | Below random. Erratic institutional flows |
| Crypto (BTC, ETH) | 41–46% | Avoid | High sentiment noise, random walk behavior |
| Global average | 44% | Skip direction | Direction alone is a losing signal at scale |
Where TimesFM genuinely earns its keep in price forecasting is the CI band output. The q10-q90 bands cover approximately 80% of actual price realizations across our test window. This makes them directly usable as calibrated TP/SL zones.
q90 = maximum realistic upside (TP ceiling). A setup that requires price to pierce q90 in 5 days is high-risk by definition — the model says only 10% of outcomes land there.
q10 = stop-loss floor. If price breaks below q10, the move is a genuine outlier — either the thesis is wrong or a catalyst hit.
CI_width = uncertainty proxy. Wide CI (>10% of current price) = reduce position size 50%. Tight CI (<5%) = high-confidence setup, full size.
Do NOT use the point forecast (q50) as a price target. The model's confidence score is always 0.95 — completely non-discriminant, a known limitation. CI_width is your real signal. Do NOT apply direction forecasting to anything other than SPY, AMZN, META — everywhere else is noise.
Volatility is where TimesFM genuinely shines. The reason is structural: volatility is mean-reverting. Periods of high volatility are followed by compression; low-vol squeezes precede expansions. This clustering behavior is exactly what a pattern-recognition model captures well.
Our tests show 67–73% directional accuracy for ATR and RVOL forecasting across all 15 tickers — not just mega-caps. This is consistent, actionable edge.
| Metric | ATR Forecast | RVOL Forecast | Historical Baseline |
|---|---|---|---|
| Directional Accuracy (5d) | 71% | 68% | 52% (rolling avg) |
| MAPE (Mean Absolute % Error) | 12.3% | 14.1% | 18.7% |
| CI Coverage (q10-q90) | 82% | 79% | N/A |
| Squeeze Detection Rate | 73% (RVOL_forecast < 0.80× threshold) | — | |
| Optimal Lookback | 150 bars | 150 bars | — |
RVOL_forecast = ForecastRaw(RVOL[-150:], horizon=10).pred_avg
If RVOL_forecast < RVOL_now × 0.80 → squeeze forming, scout for setup
If RVOL_forecast > RVOL_now × 1.30 → breakout incoming, prepare entry
Price is a random walk with drift — it has no natural "ceiling" or "floor" in the short term. Volatility, by contrast, is bounded by economic reality: stocks cannot stay in sustained high-vol regimes indefinitely (cost of hedging, risk appetite cycles, central bank reaction functions). This mean-reversion property gives the model a structural edge it simply doesn't have for raw price.
Volume is TimesFM's strongest use case in trading. With 69% directional accuracy across all 15 tickers, it outperforms both price and volatility forecasting in consistency. The structural reason is identical to volatility: volume is mean-reverting. High-volume days cluster (institutional accumulation/distribution phases) and are followed by normalization.
The most impactful application is as a false breakout eliminator. A technical breakout without volume confirmation is a textbook trap. TimesFM adds a forward-looking layer:
| Metric | Value | vs Baseline (Rolling Avg) |
|---|---|---|
| Overall directional accuracy (5d) | 69% | +13pp vs 56% baseline |
| High-volume days predicted correctly | 74% | Clusters captured well |
| Low-volume compression detected | 67% | Pre-holiday lulls often correct |
| False breakout filter effectiveness | 61% | Eliminates ~60% of low-vol traps |
| MAPE on volume level | 16.2% | Level forecasts less reliable than direction |
Apply the volume filter after your screener shortlist is generated — not during. Running ForecastRaw for 50+ tickers per session adds latency. For 10 final candidates, the total cost is ~4 seconds and the signal quality improvement is material: expect 10–15% fewer false setups entering your watchlist.
This is the model's clearest failure mode. Around earnings announcements and major macro events, TimesFM performs significantly worse than random — directional accuracy drops by 16 percentage points versus non-event periods. The cause is fundamental: earnings create discontinuous jumps that no historical pattern can predict.
Never run TimesFM forecasts within ±5 trading days of an earnings announcement. The model has no knowledge of the earnings outcome, but its training data contains the price reaction — so it may pattern-match to "stocks usually go up/down before earnings" in ways that are completely unreliable for your specific ticker.
| Period | Price MAPE | Vol MAPE | Directional Acc. | Action |
|---|---|---|---|---|
| Normal (no event) | 8.2% | 11.1% | 52% price / 71% vol | Use model |
| Earnings window (±5d) | 24.7% | 31.4% | 36% price / 44% vol | Exclude entirely |
| Post-earnings (+2d) | 9.8% | 13.2% | 49% / 66% | Resume carefully |
| FOMC week | 14.1% | 18.9% | 44% / 58% | Reduce confidence |
| NFP / CPI day | 18.3% | 22.4% | 41% / 55% | CI bands only |
The principled fix would be to pass earnings date flags as covariates, allowing the model to "know" that a discontinuity is coming and widen its uncertainty bounds accordingly. This is theoretically possible with TimesFM 2.5's covariate support, but not yet implemented in our MCP integration. The current workaround — exclusion — is more conservative but safer.
One of TimesFM's underrated strengths is batch inference across multiple series simultaneously. Instead of forecasting one ticker at a time, you pass 10 sector ETFs in a single call and get back relative rankings. The absolute forecast values matter less than the ranking — which sectors have the best predicted momentum over the next 10 trading days.
Call Forecast({tickers: 10_SECTOR_ETFS, context: 200, horizon: 10}). Total time: 4.3 seconds. Returns predicted_return_pct for each ETF.
Top 3 ETFs → long bias for the week. Bottom 3 → avoid or short-side hedges. Middle 4 → neutral, sector-specific catalyst dependent.
Call ForecastRaw(XLE/SPY[-150:], horizon=10) and ForecastRaw(XLK/SPY[-150:]) to get macro regime signals. Rising XLE/SPY = value/energy rotation.
Tickers in top-ranked sectors get a +5 point score bonus in the screener output. Bottom-ranked sectors get -10 penalty (structural headwind).
| ETF | Sector | Predicted Return (10d) | CI Width | Confidence |
|---|---|---|---|---|
| XLE | Energy | +3.2% | 4.1% | High |
| XLF | Financials | +2.7% | 4.8% | High |
| XLI | Industrials | +1.9% | 5.2% | Medium |
| XLK | Technology | +0.4% | 7.1% | Medium |
| XLU | Utilities | -1.2% | 3.9% | High |
| XLP | Cons. Staples | -1.8% | 4.3% | High |
| XLRE | Real Estate | -2.4% | 5.8% | Medium |
A predicted return of +3.2% for XLE doesn't mean "buy XLE and expect 3.2% gain in 10 days." It means XLE is forecast to outperform XLRE by ~5.6pp over that window. Use it as a relative signal, not an absolute forecast. The model consistently ranks sectors correctly ~75% of weeks even when level forecasts are off.
Using TimesFM direction forecasts alone for trade confirmation is a losing strategy globally (44% accuracy). The score jumps to useful territory when combined with other signals into a multi-factor scoring system. The model's uncertainty output — not its point forecast — is what makes it valuable here.
TimesFM always reports 0.95 confidence regardless of input quality. This is a known model characteristic — do not use it. The real uncertainty signal is CI_width: the distance between q90 and q10 expressed as a percentage of current price. This is what differentiates high-confidence vs uncertain setups.
| Configuration | Win Rate Improvement | Setup Count Impact |
|---|---|---|
| Direction forecast alone | -3pp (worse than no model) | No filter — all setups pass |
| CI_width filter only | +4pp | -20% setups (eliminates uncertain) |
| CI_width + Volume (UC3) | +9pp | -35% setups |
| CI_width + Volume + Sector rank | +13pp | -40% setups |
| Full multi-factor (all 4) | +17pp | -45% setups (quality over quantity) |
TimesFM runs as a Python FastAPI service on our infrastructure (Nomad/Docker, 16 cores, 27GB RAM). It's exposed via MCP tools that the AI pipeline calls directly. Here's the complete integration architecture.
| MCP Tool | Use Case | Key Parameters | When to Call |
|---|---|---|---|
Forecast |
Multi-ticker price + CI bands | tickers[], context, horizon | Sector rotation (UC5), CI-based TP/SL (UC1) |
ForecastRaw |
Single series (vol, volume, spread) | values[], horizon | ATR squeeze detection (UC2), volume filter (UC3) |
ForecastVix |
VIX-specific volatility forecast | horizon, context | Market regime assessment, options positioning |
Backtest |
Historical accuracy evaluation | ticker, window, metric | Calibrating model expectations per ticker class |
The integration runs post-screener — after the algorithmic screener has already filtered the universe down to 10 A+ candidates. TimesFM enriches each setup, not the full universe.
Generates ~30-50 raw candidates from the full universe. Purely technical/quantitative filters.
ForecastRaw(volume[-150:], horizon=10) for each candidate. Drop tickers where pred_avg < avg20 × 0.90. Eliminates ~30% of candidates.
Cross-reference each remaining ticker with earnings calendar. Flag or exclude tickers within ±5 days of earnings.
ForecastRaw(RVOL[-150:], horizon=10). Tickers with RVOL_forecast < 0.80× current get pre-squeeze flag (+7 score bonus).
Forecast({tickers: final_list, horizon: 10}). Generates q10/q50/q90 bands used as TP/SL levels in the scanner output.
Compare each ticker's sector against Monday's rotation ranking. Apply sector bonus/penalty to final score.
Multi-factor score computed. Top 10 A+ setups selected. CI bands displayed as TP targets in scanner HTML output.
The TimesFM service is optional at every integration point. If the FastAPI service is unreachable, each pipeline step has a fallback: volume filter falls back to historical 20d average, CI bands are replaced with ATR-based levels, sector rotation uses last Monday's cached ranking. The scanner publishes regardless — TimesFM is an enrichment layer, not a blocker.
After 120+ evaluation points across 15 tickers and 8 time windows, here is the distilled playbook for TimesFM in trading contexts.
| Parameter | UC1 Price | UC2 Volatility | UC3 Volume | UC5 Rotation |
|---|---|---|---|---|
| Lookback (context) | 20 bars | 150 bars | 150 bars | 200 bars |
| Horizon | 5–10d max | 5–10d | 5–10d | 10d (weekly) |
| CI usage | q10/q90 = SL/TP | q90 = stop distance | q50 (point est.) | CI_width = confidence |
| Action threshold | CI_width < 5% | RVOL < 0.80× | pred > avg20 × 1.10 | Top 3 / Bottom 3 |
Price is theoretically a martingale in efficient markets — no exploitable memory. Volatility and volume, by contrast, exhibit structural mean reversion enforced by economic mechanisms: cost of capital constrains sustained high-vol regimes; institutional program trading creates predictable volume clustering over multi-day windows.
TimesFM's pre-training on diverse time series has implicitly learned these mean-reversion patterns. When you use it on vol and volume, you are exploiting a genuine structural regularity. When you use it on price, you're asking it to predict something closer to a random walk — which no model does well systematically.
Easiest integration, highest accuracy. Add ForecastRaw(volume[-150:], horizon=10) to your post-screener pipeline. Compare pred_avg vs avg20. Drop weak-volume setups. Run this for 2 weeks and measure false breakout rate improvement before adding other factors.
Layer in RVOL forecasting. Flag pre-squeeze setups for priority attention. Use ATR_forecast (q90) to set stop distances instead of historical ATR. The improvement in stop placement alone often covers the service cost.
Run every Monday morning. Takes 4.3 seconds. Integrate sector ranks into your screener scoring. Over time this provides a macro alignment layer that systematically avoids headwind trades.
Beyond individual tickers, TimesFM provides a dedicated ForecastVix tool that forecasts the CBOE Volatility Index (VIX) over a 5–10 day horizon. Because VIX is the market-wide fear gauge, its forecast is one of the most valuable macro inputs available for position sizing and regime classification.
| VIX Level | Regime | Implication for Trading | TimesFM Action |
|---|---|---|---|
| < 15 | Risk-On | Full position sizes, momentum strategies thrive | Use full score, no penalty |
| 15–20 | Neutral | Selective; favor quality setups, watch sector rotation | Apply CI_width filter strictly |
| 20–28 | Early Risk-Off | Reduce sizes 30–50%, prefer defensive sectors | Discount direction forecasts further |
| > 28 | Risk-Off | Cash is king; only high-conviction setups | CI bands only, no direction signal |
If ForecastVix predicts VIX rising above 25 within 5 days, consider delaying any new long entries by 1–2 days until the model's uncertainty resolves. This simple rule reduced drawdown by ~8% in backtests over 2024–2025 by avoiding entries immediately before volatility spikes.
Producing reliable accuracy numbers for a forecasting model requires careful methodology. Standard pitfalls — look-ahead bias, survivorship bias, overfitting to evaluation windows — are especially treacherous with AI models because their pre-training may include data that overlaps with your "out-of-sample" test period.
We define directional accuracy as: the percentage of 5-day windows where the model's q50 forecast correctly predicts whether the closing price at T+5 is higher or lower than the closing price at T. This is the most conservative and practically relevant metric — not whether the magnitude is correct, only the direction.
| Metric | Definition | Why We Use It |
|---|---|---|
| Directional Accuracy | % windows where sign(forecast - T0) = sign(actual - T0) | Directly maps to trade profitability (long/short decisions) |
| MAPE | Mean Absolute Percentage Error on level forecast | Measures absolute magnitude accuracy for CI calibration |
| CI Coverage | % of actual values falling inside q10–q90 band | Validates whether CI bands are reliable as TP/SL zones |
| Baseline comparison | Rolling 20-day mean as naive forecast | Ensures TimesFM actually beats a trivial benchmark |
The Backtest MCP tool lets you run standardized accuracy evaluations against a specific ticker and time window directly from the pipeline. This is useful for calibrating per-ticker confidence before deploying forecasts live.
Before adding any new ticker to your live scanner pipeline, run Backtest for that ticker on the last 6 months of data across all four series types. If directional accuracy for all four series is below 55%, classify the ticker as "TimesFM-incompatible" and use historical averages only. Biotech, small-cap, and high-beta names typically fall into this category.
One of the more surprising findings: model accuracy varies significantly by market regime. The following numbers come from segmenting our 120-point test set by concurrent VIX level:
| VIX at Forecast Time | Price Dir. Acc. | Vol Dir. Acc. | Volume Dir. Acc. | Interpretation |
|---|---|---|---|---|
| VIX < 15 (calm) | 51% | 74% | 72% | Vol/volume predictable, price random walk |
| VIX 15–20 (normal) | 48% | 70% | 68% | Similar profile, slightly lower vol accuracy |
| VIX 20–28 (elevated) | 44% | 67% | 62% | Volume noisier in stressed markets |
| VIX > 28 (crisis) | 38% | 58% | 55% | All signals degrade. Tail-risk dominates. |
The lesson is clear: TimesFM's edge is most pronounced in low-to-normal volatility regimes. When VIX exceeds 28, the model's structural patterns are overwhelmed by discontinuous macro shocks and you should fall back to wider, historically-calibrated CI estimates.
TimesFM at DailyTickers is exposed as a set of MCP tools running against a Python FastAPI service. Here is everything you need to integrate it cleanly into your own pipeline, including error handling, retry logic, and graceful degradation patterns.
The quality of TimesFM output is highly sensitive to the input series preparation. Common mistakes that degrade performance:
| Input Series | Correct Preparation | Common Mistake |
|---|---|---|
| Close Price | Raw adjusted close prices in chronological order. No log transform. | Using unadjusted prices creates artificial jumps at splits/dividends |
| ATR | 14-period true range, raw values (not normalized). 150 bars minimum. | Normalizing before passing — model does its own instance normalization |
| RVOL | Relative volume = today_vol / 20d_avg_vol. Or just raw volume (model handles scaling). | Mixing percentage RVOL with absolute volume across calls |
| Volume | Raw shares/contracts traded. No smoothing, no log transform. 150 bars. | Pre-smoothing with EMA — destroys the clustering signal the model relies on |
| Sector Spread (XLE/SPY) | Daily ratio: XLE_close / SPY_close. 150 bars. Stationary enough for the model. | Using log(ratio) — adds unnecessary complexity |
A common trap: normalizing the input series (z-score, min-max) before passing to TimesFM. The model includes instance-level normalization internally and applies the inverse at output. If you normalize before passing, the model's output will be in your arbitrary normalized scale, not in the original units. This is especially painful for CI bands used as price levels.
Based on real integration experience across the DailyTickers scanner and rotation pipeline, here are the failure modes we've encountered — and how to avoid them.
44% global accuracy is mathematically worse than a coin flip when transaction costs are factored in. Use direction only as a tiebreaker or confirmation for mega-caps (SPY, AMZN, META). Never as a primary entry signal.
TimesFM always outputs 0.95 — it is hard-coded behavior, not a meaningful signal. The real uncertainty measure is CI_width_pct = (q90 - q10) / q50. Build your decision logic around this, not the confidence field.
The model loses ~16pp accuracy within ±5 days of earnings. Without a calendar guard, roughly 20–25% of your scanner setups at any given time will be in earnings proximity — systematically poisoning your signal quality.
20 bars works well for price direction (mega-caps), but is too short for volatility and volume. These series need 150 bars to capture regime cycles. With only 20 bars, you're showing the model a single vol cycle fragment — not enough context.
Beyond 10 days, the q10–q90 CI band typically exceeds 12–15% of current price, making it useless as a TP/SL zone. The model was designed for short-horizon inference; long-horizon requests are technically accepted but economically useless.
At 0.4s/ticker, 50 tickers = 20 seconds of latency. Worse, the signal-to-noise ratio collapses because you're applying the model to many tickers where it has no edge. Run it only on the 10–15 final screener candidates.
In sector rotation, the absolute predicted return percentages are not reliable. A "+3.2% for XLE" forecast should be read as "XLE is forecast to outperform the median sector by X pp", not as "expect a 3.2% gain." Build your trading logic on rank order, not magnitude.
As noted in the API section: the model performs instance normalization internally. If you normalize before input, you double-normalize and the output CI bands will be in your arbitrary scale, not in price/ATR/volume units. This makes them impossible to use directly as trade levels.
FDA approval decisions, clinical trial readouts, and merger announcements create step-function price moves that are fundamentally unpredictable. No amount of historical pattern is predictive here. The model will confidently produce a CI band that the actual price will blow straight through.
TimesFM is an enrichment layer, not a trading system. It has no knowledge of fundamentals, news, earnings expectations, positioning data, or insider activity. A 75% directional accuracy on AMZN means it's right 3 out of 4 times — but the 1 time it's wrong could be a -15% earnings miss. Always cross-reference with catalyst calendars and fundamental context.
Combine UC2 (volatility squeeze) with UC3 (volume expansion forecast) for a high-conviction breakout filter. Both signals need to agree for maximum confidence:
Layer macro context (ForecastVix + sector rotation) with micro setup quality (CI_width + volume) for a four-layer confirmation stack. Only trade when all four layers agree:
| Layer | Signal | Tool | Required Condition (Long) |
|---|---|---|---|
| L1 — Macro | VIX regime | ForecastVix | VIX_forecast < 20 |
| L2 — Sector | Sector rotation rank | Forecast (10 ETFs) | Ticker's sector in top 4 of 10 |
| L3 — Setup | CI_width confidence | Forecast | CI_width_pct < 7% |
| L4 — Catalyst | Volume expansion | ForecastRaw (volume) | pred_avg > avg20 × 1.05 |
In our tests, setups passing all four layers have a win rate ~12pp higher than setups passing only two. The tradeoff: roughly 60% of screener output is filtered out, meaning you trade less frequently but with higher conviction.
Sometimes the q50 forecast is flat, but the CI band is asymmetric — q90 is far above q50 while q10 is close below it (or vice versa). This asymmetry encodes the model's implicit skew estimate and is an underutilized signal:
CI bands widen as the horizon extends. Rather than using the final-day q10/q90 as your levels, use the cumulative minimum and maximum across all 10 forecast steps. This captures the worst-case intraday exposure:
A compact reference for all TimesFM-specific terms and thresholds used throughout this guide.
| Term | Definition | Typical Value / Range |
|---|---|---|
| CI Band | Confidence Interval — the q10 to q90 range of the forecast distribution. Covers ~80% of actual realizations. | q10–q90 spans 4–15% of current price typically |
| CI_width_pct | (q90_final – q10_final) / q50_final × 100. The primary uncertainty metric. | <5% = high confidence | 5–10% = moderate | >10% = high uncertainty |
| q10 / q50 / q90 | 10th, 50th, 90th quantile of the forecast distribution. q50 = point forecast. | q10 = SL zone | q50 = expected path | q90 = TP ceiling |
| ForecastRaw | Single arbitrary series forecast (not ticker-based). Used for ATR, RVOL, volume, spreads. | Input: raw float array (150 bars recommended). Output: q10/q50/q90 arrays. |
| RVOL | Relative Volume = today's volume / 20-day average volume. RVOL = 1.0 means normal volume. | RVOL >2.0 = high | RVOL <0.5 = very low (pre-squeeze candidate) |
| Squeeze Signal | RVOL_forecast < RVOL_now × 0.80. Predicts volatility compression forming over next 10 days. | 73% accuracy in our tests. Most reliable TimesFM signal overall. |
| Volume Favorable | pred_avg_volume > 20d_avg_volume × 1.10. Predicts above-average volume = institutional interest. | Breakout filter with 69% directional accuracy. |
| Directional Accuracy | % of windows where the q50 forecast correctly predicts up vs down at horizon end. | 44% global (price) | 69–74% (vol/volume) | 75% (sector ranking) |
| Earnings Window | The ±5 trading day exclusion zone around earnings announcements. | Always exclude. Accuracy drops to 36–44% across all series types. |
| Patched Decoder | TimesFM's architecture: input series split into patches (tokens), processed by a decoder-only transformer. | 500M parameters, pre-trained on 100B+ time points across diverse domains. |
| Instance Normalization | Per-series normalization applied internally by TimesFM before inference, then reversed on output. | Do NOT pre-normalize your input — model handles this. |
| CI Skew | (q90–q50) – (q50–q10) / CI_width. Measures asymmetry of the forecast distribution. | >+0.2 = upside skew | <–0.2 = downside skew |
| Graceful Degradation | Fallback behavior when TimesFM service is unavailable. Pipeline continues with historical-based CI estimates. | Implemented at each pipeline step. Scanner never blocked. |