Complete trading intelligence platform - pattern detection, backtesting, SIL enrichment, and real-time signals
Market Pattern Recognition is one single app that covers your entire technical analysis workflow:
8-component VWAP analysis, institutional activity monitor, A+ to F grade system. Detects breakout, reversal, volume, and momentum patterns in real time.
Volatility term-structure analysis. Detects Risk-On / Risk-Off regime transitions with TQQQ overlay and signal-anchored VWAP.
Batch backtest any strategy against your entire watchlist. Return/Bar metric, date controls, Active/Crash Warning detection, CSV export.
Load exported CSVs in-browser. Last Day Buy/Sell badges, filters, sort on any column including Entry Date. Auto-enriched with SIL columns.
Enriches backtest results with institutional data: Sector, Inst., QoQ, Fund., MCS, SIS. Helps you identify the best buy candidates from large watchlist backtests.
Single-symbol backtester with CSV export. Real-time scanner that scans watchlists for live strategy signals.
Navigate to Market Pattern Recognition from the main TradePro navigation. The app is a single page - all modules are sections you scroll to.
Sort the CSV Viewer by SIS โ. The top rows combine strong backtest performance with institutional conviction - these are your best candidates.
The Market Pattern Recognition system provides real-time detection of technical trading patterns, integrated with Swan Score and Fundamental Analysis components.
Automatically identifies classic technical patterns - triangles, flags, head & shoulders, and more - using advanced algorithms.
Each pattern receives a confidence score based on volume, price action, and historical reliability.
Component bars matching Swan Score design show overall confidence, volume confirmation, technical strength, and pattern diversity.
Comprehensive grading provides quick assessment of pattern recognition quality and reliability. A+ = โฅ90% confidence, F = <35%.
Triangles, Flags, Pennants
Head & Shoulders, Hammers, Dojis
Volume Spikes, Accumulation
RSI Divergence, MACD Signals
VWAP is available in four anchoring modes: Cumulative, 1D (Session), 1W, and 1M. Harmonized across Charts and Strategy Builder.
Calculates the relationship between Close price and the High/Low range, weighted by Volume. Reveals if volume is flowing IN (Buying) or OUT (Selling).
Accumulation. High buying pressure often precedes a breakout.
Distribution. High selling pressure warns of a potential reversal.
Automatically ranks your watchlist: Top 3 Accumulation and Top 3 Distribution candidates.
Experience the pattern recognition system with realistic sample data:
A sophisticated volatility term structure analysis tool designed for institutional-grade regime detection.
Analyzes the relationship between short-term volatility (VIX) and medium-term volatility (VIX3M) to detect market stress.
Green Zone (Risk On): Ratio > 1.0. Safe for leverage (TQQQ).
Red Zone (Risk Off): Ratio < 1.0. Cash protection mode.
Directly overlays TQQQ price action with regime background stripes to visualize strategy performance.
Robust data fetching with automatic failover from Financial Modeling Prep (Primary) to Yahoo Finance (Backup).
Institutional Average: Calculates VWAP starting from the exact moment the Risk Regime flips.
Trend Confirmation: Price > VWAP confirms a strong trend.
CBOE Volatility Index (30-Day). The "Fear Gauge". Spikes correlate with market drops.
CBOE 3-Month Volatility Index. In a stable bull market, VIX3M is typically higher than VIX (Contango).
Smoothed Term Structure Ratio = 10-day SMA of (VIX3M / VIX).
> 1.0: Healthy (Risk On) < 1.0: Dangerous (Risk Off)
Price vs. Anchored VWAP. If Price is above the orange VWAP line, the trend is bullish.
Risk On: 100% TQQQ.
Risk Off: 100% Cash/SHV.
Strong Risk On (Ratio > 1.10). Deep Contango. Full Allocation to TQQQ.
Weak Risk On (Ratio 1.0-1.10). Hold, but do not add size.
"Yellow Flag" Warning. Sudden volatility spike (>5%) within an uptrend. Hedge (Covered Calls) or Tighten Stops.
Risk Off (Ratio < 1.0). Backwardation. 100% Cash.
TrendPredictor (%) appears as a histogram in the bottom pane.
Green Bars: Positive Trend (Risk On)
Red Bars: Negative Trend (Risk Off)
Enable via Chart Settings โ Indicators โ TrendPredictor (%)
Use "TrendPredictor (%)" as a first-class indicator. Example condition: "TrendPredictor (%) > 0" combined with "RSI < 30".
TrendBuy (Bottom): Trend stops falling โ turns up (Concave).
TrendSell (Top): Trend stops rising โ turns down (Convex).
Use "TrendBuy > 5.0" to catch strong reversals only.
Sloping Up: Indicator rising over X periods.
Sloping Down: Indicator falling.
"SMA20 Sloping Up" confirms an uptrend better than "Price > SMA20".
Run any saved strategy against all symbols in your watchlist simultaneously and compare aggregate performance. Designed for both strategy development and real-world trade planning.
Open Market Pattern Recognition โ scroll down to Strategy Performance Dashboard. You'll see a strategy selector, timeframe picker, date controls, and a Run on Watchlist button.
Choose a saved strategy from the dropdown. Build strategies in the Strategy Builder section above.
| Option | Description |
|---|---|
3M Daily | Last 3 months, daily candles - fast, good for short-term tactics |
6M Daily | 6 months, daily candles - balanced |
1Y Daily โญ | 1 year, daily candles - recommended for most strategies |
2Y Daily | 2 years, daily - larger sample, slower |
1Y Weekly | 1 year, weekly candles - for swing/position strategies |
5Y Weekly | 5 years, weekly - long-term strategy validation |
Leave Latest data checked to run the backtest right up to today. This is the normal mode.
Uncheck Latest data to reveal a date picker. Choose a past date to simulate how the strategy would have performed as of that date.
Uncheck Full range to reveal a start date picker. The strategy will only generate buy signals from that date onwards - but SMA/VWAP indicators are still calculated on the full warmup period, so signals are accurate from day one.
Example: You started using TradePro on 2025-10-15. Set start date = 2025-10-15 to see only trades you could have bought since you began.
Click Run on Watchlist. Each symbol is backtested independently. Results appear in the table below with aggregate metrics.
Return/Bar = Avg Return % / Avg Duration (bars)| Column | Meaning |
|---|---|
| Strategy | Name + timeframe + date range badge |
| Symbols | Number of symbols tested |
| Total Trades | All buy+sell cycles across all symbols |
| Win Rate % | Percentage of trades that closed in profit |
| Avg Return % | Average return per trade (all symbols) |
| Avg Duration | Average hold time in bars (days for daily timeframe) |
| Return/Bar | Avg Return % รท Avg Duration - capital efficiency metric |
Click CSV on any result row to export full data. Click Details to expand Top 5 / Bottom 5 performers and Last Day Buys/Sells.
The exported CSV contains six sections:
| Section | Contents |
|---|---|
--- SUMMARY --- | Single-row aggregate metrics for the entire run |
--- LAST DAY BUYS --- | Symbols the strategy bought on the final day |
--- LAST DAY SELLS --- | Symbols the strategy sold on the final day |
--- TOP PERFORMERS --- | Top 5 symbols by total return |
--- BOTTOM PERFORMERS --- | Bottom 5 symbols by total return |
--- ALL SYMBOLS --- | Every symbol with full metrics |
| Column | Description |
|---|---|
| Symbol | Ticker |
| Total Return % | Cumulative return for this symbol over the test period |
| Win Rate % | % of trades that closed profitably |
| Trades | Number of buy/sell cycles |
| Active | 1 = open position at end of backtest, 0 = closed |
| Entry Date | ISO date (YYYY-MM-DD) when the active position was entered. Empty if Active=0. See CSV Viewer for sorting details. |
| Entry Price | Price at strategy entry (Active=1 only) - visible in CSV, hidden in viewer to save space |
| Last Price | Price on the last candle (Active=1 only) - visible in CSV, hidden in viewer |
| Unrealized % | Current unrealized gain/loss from entry to last price (Active=1 only) |
| Crash Warning | 1 if position has dropped >15% from entry despite trailing stop not triggering |
Active=1 + Crash Warning=0 + Unrealized % > 0. Open, healthy positions are strong candidates to consider if you agree with the setup.
Active=1 means the strategy had an open position at the end of the backtest period. Crash Warning=1 means that position has dropped more than 15% from entry - treat with caution and check fundamentals before acting.
Load any exported SPD CSV directly into the built-in viewer - no Excel needed. Filter, sort, and act on Last Day signals without leaving the app.
The viewer shows these columns from the CSV: Symbol, Total Return %, Win Rate %, Trades, Active, Entry Date, Unrealized %, Crash Warning - plus the six SIL columns appended automatically: Sector, Inst., QoQ, MCS, Fund., SIS.
Entry Price and Last Price are intentionally hidden in the viewer to save horizontal space - they are always present in the downloaded CSV file and available for later analysis.
The date when the active position was entered, in ISO format (YYYY-MM-DD). Examples: 2026-04-17, 2026-03-02.
Each CSV export contains a Last Day Buys and Last Day Sells section.
| Badge | Meaning |
|---|---|
| B | Symbol had a buy signal on the last trading day |
| S | Symbol had a sell signal on the last trading day |
Badges appear next to the symbol name. Only symbols with signals get a badge.
| Filter | Effect |
|---|---|
| All symbols | Show everything |
| Active only | Show symbols with an open position (Active=1) |
| Inactive only | Show closed positions only |
| ๐ Last Day Buys | Show only symbols with a buy signal on the last trading day |
| ๐ Last Day Sells | Show only symbols with a sell signal on the last trading day |
| ๐ All Last Day Signals | Show all symbols with either a buy or sell signal |
| โ Crash Warning toggle | Show only symbols with Crash Warning = 1 |
| Search box | Live filter by symbol name |
Click any column header to sort. Click again to reverse. Current sort column shows โฒ or โผ. Empty cells always sort last (applies to Entry Date, Fund., Unrealized %, Inst., etc.).
| Color | Meaning |
|---|---|
| Green | Positive return or unrealized gain |
| Red | Negative return or unrealized loss |
| โ (dot) | Active open position (Active=1) |
| โ (orange row) | Crash Warning - position down >15% from entry |
SIL automatically enriches your SPD CSV results with institutional, fundamental, and market-regime data - helping you identify the best stocks to act on from a large backtest.
Sector, Inst., QoQ, MCS, Fund., SIS.Sort by SIS โ to see the symbols where backtest edge and institutional conviction align.
| Column | Range | What it means |
|---|---|---|
| Sector | Text | Industry sector from sector cache (Technology, Healthcare, Financials, etc.) |
| Inst. | 0-5 | How many of the 5 tracked institutions (BlackRock, Vanguard, State Street, Berkshire, Fidelity) own this stock |
| QoQ | % | Quarter-over-quarter change in institutional position size. NEW โฒ = fresh position. EXIT โผ = fully closed (warning signal) |
| MCS | 0-100 | Munksvan Confidence Score - Technical (20) + Smart Money (0-30) + VIX Sentiment (0-30) |
| Fund. | 0-25 | Fundamentals Score - gradient-scored from static FMP data (P/E, ROE, Revenue Growth, Debt/Equity). Updated manually when a new stock analysis export is imported. See below. |
| SIS | 0-100 | Strategy Intelligence Score - combines backtest performance with institutional strength and fundamentals |
The Fund. column (0-25 pts) is a gradient-scored fundamentals score sourced from static FMP export data. Unlike a binary pass/fail, it uses partial credit across four metrics:
min(1.5, 25 / pe) ร 6min(1.5, roe / 15) ร 6min(1.5, (rev + 20) / 20) ร 4min(1.0, 1 / max(0.1, de)) ร 4The score is normalized to 0-25. A company that scores well on all four criteria outranks one that passes a single metric perfectly while weak on everything else.
Data source: FMP stock analysis export (stock_analysis_YYYY-MM-DD.xlsx) โ final/data/sil-sector-cache.json. Updated manually - no live API calls required. Refresh quarterly or when the symbol list changes significantly.
Color gradient: ๐ข โฅ18 ยท ๐ 10-17 ยท ๐ด <10 ยท โช no data.
| Component | Weight | Based on |
|---|---|---|
| Backtest Score | up to 40 pts | Return/Bar ร confidence weight (penalizes <20 trades) + Win Rate bonus |
| Fundamentals Score | up to 25 pts | Gradient P/E, ROE, Revenue Growth, Debt/Equity scoring from FMP export data |
| Smart Money Score | 0-30 pts | Institution count (5 inst = 18p) + SMU rank (top-5 = 12p bonus) |
| QoQ Bonus/Malus | ยฑ10 pts | NEW = +10, โฒ>10% = +5, EXIT = -10 |
SMU data (Inst., QoQ, MCS) is stored in your browser's localStorage (24-hour TTL). If you're on a different device or have cleared your browser data, open Institutional Intelligence again before loading a CSV - otherwise those columns will show "-".
Fund. and Sector are served from the static file data/sil-sector-cache.json - no localStorage required. They are always available as long as the page can load its assets.
generate-sector-cache.js --deploy with a fresh FMP export.
Single-symbol backtesting. Define entry and exit rules using the visual builder (no coding required). Runs against historical data to verify win rates and profitability for a chosen symbol.
The Strategy Tester and Strategy Performance Dashboard use identical backtesting logic - same VWAP calculation, same position sizing, same settings from backtestSettings. Results for the same symbol and strategy match to two decimal places.
Run a single-symbol backtest and export the result to CSV - great for sharing or comparing across symbols.
ST_SYMBOL_StrategyName_YYYYMMDD.csv| Section | Contents |
|---|---|
| SUMMARY | Symbol, strategy, range, Total Return %, Win Rate %, Trades, Max Drawdown %, Sharpe ratio |
| STRATEGY RULES | Entry and exit conditions from the loaded strategy |
| TRADES | Full trade-by-trade list - entry/exit date, price, exit reason, PnL % |
Find Opportunities Instantly. Apply your custom strategies to the entire market. The scanner filters stocks to find only those matching your exact criteria in real-time.
Centralized dashboard for all active market monitors. Stateful - tracks if you are "In a Trade" or "Waiting for Entry". Live Status Monitoring, One-Click Enable/Disable, Visual "Triggered" History.
Create complex trading strategies with multiple conditions using AND/OR logic. Backtest your strategies against historical data. No coding required.
Sloping Up / Down checks if an indicator is rising or falling over X periods. "SMA20 Sloping Up" confirms a trend better than "Price > SMA20".
Strategy Builder settings (Position Size, Stop Loss, etc.) are respected by both the Strategy Tester and Strategy Performance Dashboard, ensuring batch results match individual backtests.
Open Positions at the end of data are visualized on the chart but excluded from performance metrics to ensure accuracy.
Total Return grows automatically the more symbols you test - 30 symbols each returning 30% = 900%, which says nothing about the strategy itself. Return/Bar measures how much the strategy earns per bar capital is in the market, making it comparable across different watchlist sizes and timeframes.
Not necessarily. Active=1 means the strategy opened a position before the end of the backtest that wasn't closed. Always check Unrealized % and Entry Date. A position that's down significantly or entered months ago is risky to enter fresh. Use Crash Warning=0 and Unrealized % > 0 as a minimum filter.
This happens when the start date is set after the end date, or when the selected range is shorter than the gap. Make sure start date is earlier than end date and within the selected timeframe range.
Avg Return % = average profit per trade. Return/Bar = Avg Return % รท Avg Duration - penalizes strategies that tie up capital for a long time. 5% over 50 bars (0.10 %/bar) is less capital-efficient than 3% over 5 bars (0.60 %/bar).
The SMU cache hasn't been loaded in this browser session. Open Institutional Intelligence, wait for the table to load, then reload your CSV in SPD Viewer. Cache TTL = 24 hours.
They are intentionally hidden in the viewer to keep the table readable. Both columns are always present in the downloaded CSV file.
data/sil-sector-cache.json) may be missing or outdated. Run node scripts/generate-sector-cache.js <xlsx> --deploy to regenerate it from a fresh FMP export.The Multi-Strategy Confirmation Dashboard answers one question: which symbols do multiple strategies agree on? When two or more independent strategies all flag the same symbol as active, the probability of a false signal drops significantly. Backtests showed that symbols confirmed by all three source strategies delivered +16.5% higher average return and +3.1% higher win rate compared to single-strategy signals.
Each symbol receives a Conviction Score - the fraction of loaded strategies that are currently active on that symbol. A score of 3/3 (100%) means all strategies agree. A score of 1/4 (25%) is a weak, unconfirmed signal.
Each strategy is an independent hypothesis. When N independent strategies all point to the same symbol, the probability of a false signal decreases exponentially:
You don't need to use specific strategies - load your own exports.
You no longer need to export and re-import CSV files. After running a strategy in the Strategy Performance Dashboard, a blue โ MSCD button appears next to each result row. Click it and the strategy is sent directly to the Multi-Strategy Confirmation card - enriched automatically with SIS, Inst., Fund. and sector data. No files, no steps in between.
You can still load raw SPD CSV files by clicking Add Strategy or dragging files onto the card - they are enriched automatically on load.
The Kelly column shows the mathematically optimal fraction of capital to allocate to each symbol, calculated from each strategy's historical win rate and average win/loss ratio:
Kelly% = (b ร p - q) / b where: p = win rate q = 1 - p b = Avg Win% / Avg Loss% (reward/risk ratio)
The table shows Avg Kelly% - averaged across all active strategies for that symbol. The detail card breaks it down per strategy with the individual b-ratio.
Full Kelly is mathematically optimal but leads to high volatility and large drawdowns in real trading. The detail card shows Half-Kelly as the recommended starting point - it captures ~75% of the theoretical growth rate at roughly half the risk. A Kelly of 30% means consider sizing at 15% of available capital.
Kelly% is blank (-)? The strategy's CSV was exported before the Avg Win/Loss columns were added. Re-run the strategy in SPD and send it again via โ MSCD - the updated export includes the data needed for Kelly.
Conviction Score tells you how many strategies are active on a symbol right now. Signal Confluence adds a time dimension: how recently did those strategies trigger? A symbol where 5 strategies all entered within the last 3 days is a fundamentally different — and stronger — signal than one where 5 strategies entered over the past 6 months.
Enable confluence via the ⚡ Confluence dropdown in the filter row. Choose mode and window:
Filters symbols where N or more strategies triggered a buy signal (active position opened) within the configured window.
Filters symbols where N or more strategies closed a position within the window. Useful for spotting coordinated exits.
The window input (default: 7 days, range: 1–365) controls how far back the filter looks for signals. Useful presets:
When confluence is active, a new ⚡ Confl. column appears in the table showing the count for each symbol (e.g. ⚡ 5/8 = 5 of 8 strategies triggered within the window). The column is sortable — click the header to rank by confluence strength. Color codes: green = all or most agree, orange = partial, red = sell mode.
A symbol can have 8/8 conviction and still be a poor trade if Avg Ret% is negative across all strategies — the strategies are unanimous, unanimously losing. Always check Avg Ret%, SIS and Win Rate before acting. Filter out any symbol with Avg Ret% < 0 regardless of how many strategies agree.
This happens when loaded SPD files were exported before Exit Date was added (before 2026-05-05). Re-run your strategies in Strategy Performance Lab and export fresh files. A warning banner appears automatically in the filter row when Exit Date data is missing.
Instead of searching for symbols one by one, the Portfolio Batch Scan lets you paste an entire list of ticker symbols and instantly filter the Conviction table to show only those holdings. This is the fastest way to answer: “Which of my current positions have active sell signals?” — or any other conviction question about a specific set of symbols.
Click the 📋 Portfolio button in the filter row (to the left of the search field). A scan panel opens above the filters. Click the button again to close it and return to normal mode.
Shown as a normal conviction row with colored bar, strategy dots and all metrics. Sort by Conviction% descending to see your most-confirmed holdings at the top.
Shown as a normal row with an empty conviction bar (0/N). The symbol exists in the strategy data but has no currently active position — no signal right now.
Shown as a dimmed italic row at the bottom of the table. The symbol was not found in any loaded strategy export — it was never backtested by the loaded strategies, or the ticker format doesn’t match (e.g. SEB-A.ST vs SEBA).
The parser handles all common separator styles automatically:
AAPL, NVDA, MSFT, AMDAAPL
NVDA
MSFTAAPL NVDA, MSFT; AMDSEB-A.ST, ERIC-B.ST, ASML.ASShift+Enter adds a new line in the textarea without triggering the scan.All standard filters — Conviction threshold, Sector, Inst., Active Only, and Signal Confluence — remain active in portfolio mode. Use this to quickly check: “Which of my holdings have a sell confluence signal in the last 7 days?” Set Confluence to 🔻 Sell: 1+ agree, paste your portfolio, hit Scan.
The symbol search field is automatically disabled while portfolio scan is active — the two modes are mutually exclusive. It re-enables automatically when you press Clear, Escape, or close the panel.
The card accepts any SPD CSV export - both standard and enriched formats. Raw files are enriched automatically on load:
You can mix files from different export types in the same session - the card handles both automatically.
Based on backtesting across hundreds of symbols and multiple strategies, the following filter combination has consistently delivered the strongest results:
In backtests, this combination produced Kelly +12.3%, W/L 1.88x, average return +35.4% across the filtered symbol set.
Make sure the files are SPD exports (from the Strategy Performance Dashboard). The parser looks for a Symbol column header and Active column. If loading standard (non-enriched) CSVs, the section structure (--- ALL SYMBOLS ---) must be present.
Win rate in the table is an average across active strategies. A symbol can have high conviction (all strategies active) but moderate individual win rates. Look at the trend: if all strategies show improving win rates over time, that's a stronger signal than one with a single high-win strategy.
That means your strategies are nearly identical in what symbols they pick - adding more of the same type doesn't improve conviction quality. Try adding a strategy with a fundamentally different entry logic (e.g. a volume-only strategy alongside a trend-following one) to make conviction scores more meaningful.