May 20, 2026
Multi-Ticker AI Comparison, Verified Next-Earnings Dates & Pro Subscription Hardening
Feature
Enhancement
Bug Fix
The AI assistant now handles multi-ticker comparison requests by fanning out a full per-ticker data fetch (price, touch-based S/R with touch counts, analyst targets, growth metrics, news) in parallel for up to 20 tickers per request, replacing the previous "deep-dive on one, stub the rest" pattern that led to single-ticker analyses or hallucinated tickers in summary tables. Same drop: every stock's next-earnings date in AI responses now comes from a new MarketBeat scrape that's been more reliable than the prior calendar-events feed, with the AI's "🗓 Watch For" line opening on the verified upcoming date instead of generic filler. Six Pro-subscription landmines that affected paying users were fixed in parallel, plus a stale-JWT detector that force-refreshes on page load when claims are older than Firestore's.
- Multi-ticker AI comparison (new). Asking the AI for a summary across 4+ tickers ("give me a buy/sell summary table for EOG, WMB, EXE, TKO, VTR, LNT, WTS, AMP, LTC, PDD, UBER, TGT, AEE, SO, NTES, XEL, MU") used to either pivot the entire response onto the first ticker or hallucinate stocks that weren't in your list to fill the table. Root cause: the data layer deep-fetched only the first ticker (price, OHLC, touch-based S/R, analyst targets, news, financials) and gave the next seven a thin price-only payload, then dropped everything beyond eight tickers entirely. The AI did its best with what it had — which for most rows was either nothing or the model's own training data. The new path detects multi-ticker mode (4+ tickers in the prompt) and fans out a compact-but-comprehensive fetch for up to 20 tickers in parallel: each gets price + change + 52w range + market cap + P/E + touch-based S/R (top 3 each side with touch counts and days-since-last-touch) + 50/200 DMA + analyst target with upside % + growth/profitability + news headlines for catalyst inference. The prompt now wraps this section in a "use these values verbatim; NEVER invent tickers not listed below or guess data not provided" instruction so the AI doesn't fall back to training-data fabrication for any row.
- Verified next-earnings dates — MarketBeat-sourced. The prior calendar-events field that fed AI responses frequently reflected the LAST earnings date rather than the upcoming one for days or weeks after a quarter reported (e.g. on April 30 after a stock's April 29 print, the AI would tell you "next earnings is April 29" with a straight face). The prior mitigation was to omit the date entirely and let the AI's web search fill it in — but search results also surfaced past dates from aggregator caches, and the AI kept reporting them as "next." A new
?type=next-earnings endpoint on the ticker-info worker scrapes MarketBeat's "Upcoming Q[N] Earnings Date" section per ticker, maps the Yahoo exchange code (NYQ→NYSE, NMS→NASDAQ, etc.) to the right URL path with NYSE / NASDAQ fallback on 404, parses the upcoming date via three regex strategies (natural-language "next earnings date is estimated for...", structured "Upcoming Q[N] Earnings Date ... Month DD, YYYY", and short-form "Upcoming ... Mon. DD" with current-year inference), explicitly REJECTS any past-dated result, and caches the underlying HTML at the Cloudflare edge for 12 hours so repeat lookups don't hammer MarketBeat. The verified date is wired into three prompt paths (chart-symbol financial metrics, mentioned-ticker deep-dive, and the multi-ticker compact block above), the system prompt's "Watch For" template now explicitly requires "Next earnings: YYYY-MM-DD" using the verified value, and a deterministic post-process on the AI response replaces any wrong date (ISO, long-form "August 5, 2026", or slash format) with the verified one regardless of what the model decides to write.
- Pro subscription tier — six landmines fixed. (1) The admin "Manage Sub" panel's tier
<select> had Premium and Free but no Pro option, so opening it on a Pro subscriber silently fell back to Premium — saving on a Pro user downgraded them. The dropdown now has all three, the success toast displays the actual tier, and the local-cache update preserves the chosen tier so the row badge reflects the new state without a refresh. (2) The day-30 streak reward worker's "is this a real paid subscriber?" gate (isActivePaidSubscriber) returned true only for tier === 'premium', so when a Pro account hit day 30 the worker overwrote their Firestore subscription doc with tier:'premium', status:'streak_trial', currentPeriodEnd: now+7d, leaving the Stripe subscriptionId pointing at the still-active Pro sub but the rest of the platform thinking they were a 7-day trial. Now accepts both Premium and Pro. (3) The grandfather-to-Pro backfill migration (backfillPremiumClaims in Cloud Functions) didn't pre-check whether the user already had a Pro claim, so re-running it on a partially-migrated user where Firestore still showed tier:'premium' but Auth claims had been advanced to tier:'pro' would set claims back to tier:'premium'. Now skips users whose existing claim is already 'pro'. (4) The landing page's pricing-section hide check accepted only tier === 'premium', so logged-in Pro subscribers loading chartinglens.com still saw the full pricing section, "Recent Wins" upsell, and nav-pricing link — clicking the upgrade CTA hit the 409 already-subscribed path. Now accepts Premium, Pro, and the trialing Stripe status. (5) The symbol-switch handler in the SPA called removePineTSResults + removeAllAIIndicators from a synchronous !isPremium() branch with no hasLoaded() guard, so Premium and Pro users on a fresh refresh who changed symbols before the subscription state finished loading silently lost every AI-generated indicator and backtest on the chart. Now fails open during the load window. (6) updateAlertRegistry in FirestoreManager ran the same sync isPremium() check before writing the server-side alert registry — if the user saved or edited an alert before subscription loaded, they were deleted from the registry and the cron-driven email-alert worker stopped checking their alerts until the next save. Now waits for load and bails rather than evict on uncertainty.
- Stale-JWT detection on page load. Firebase's
getIdTokenResult() returns the cached JWT from IndexedDB if it hasn't expired (~1 hour), which means a tier upgrade landing while the tab was closed (admin grant, cross-device upgrade, async webhook completion) would NOT be reflected in claims until the cached token naturally expired — up to an hour of the SPA treating a paying user as their old tier (sometimes free), feeding the wrong limits to canUseFeature, and capping AI chat / alerts / signals incorrectly. The Firestore tokenVersion watcher was supposed to catch this, but on the INITIAL snapshot it just recorded the current value and exited without reconciling against the cached JWT — so the bump that happened before page load never triggered a refresh. The watcher now compares the cached JWT's claimsUpdatedAt against the Firestore doc's claimsUpdatedAt on the very first snapshot and force-refreshes the token on mismatch, so post-upgrade UX lands within seconds instead of waiting for natural token expiry.
May 18, 2026
Strategy Simulator — Backtest Any Entry/Exit Combo, Compact Timeframe Dropdown, Top Bar Layout & STX Routing Fix
Launch
Feature
Enhancement
Bug Fix
A new Strategy Simulator page lets you backtest any entry strategy + exit rules + regime filter across the full ~2,000-symbol stock universe in seconds, with a compare panel for A/B'ing runs side-by-side. Same drop: every chart timeframe now loads the maximum available history at its granularity, the floating timeframe selector was replaced with a compact text dropdown attached to the top bar, the multi-chart layout + load/save buttons moved to the right side next to refresh, and a bare-symbol crypto auto-mapping table that was hijacking stock tickers like STX (Seagate) was removed.
- Strategy Simulator (new). Live at simulator.html. Pick from four entry strategies: RSI Oversold (30) — fire when 14-period RSI crosses below 30; 20-Day Breakout High — fire when close breaks above the highest high of the prior 20 bars; 50/200 SMA Golden Cross — fire when the 50-SMA crosses up through the 200-SMA; or a random-entry control group for measuring whether any of the above actually beat a coin flip. Pick your exit rules: take-profit %, stop-loss %, and max-hold days — whichever triggers first closes the trade. Pick an optional regime filter (SPY above its 50-SMA, SPY above its 200-SMA, QQQ above its 50-SMA, or no filter) so entries only fire when the broader market is in your chosen state. The simulator runs the backtest worker-pool-pipelined across all 1,876 symbols at concurrency 8, caches bar history at the edge (Cloudflare cache, 2,000-day wide window with volume, 7-day TTL) so subsequent runs from any user are near-instant, and returns total return, profit factor (gross wins / gross losses, capped at 5), max drawdown, win rate, average winner %, average loser %, total closed trades, and a per-trade table you can drill into for entry/exit/reason details. A compare panel accumulates every run side-by-side — entry strategy, regime filter, TP/SL/MH parameters, all stats columns — so it's easy to see whether 20-day breakout with TP=20% / SL=8% / MH=14d actually beats random with the same exit rules, which is the only honest test of whether the entry signal carries information. Sign in with your ChartingLens account to run it.
- Chart history extension — every timeframe pulls maximum available range. Until now, every timeframe loaded a relatively short window (~6 months for daily, ~60 days for hourly). When users ran the AI's confidence markers backtest, the backtest worker was happily computing markers over 5+ years of cached bars, but the chart only showed the most recent 2 — markers older than the chart's start date got clamped to the leftmost visible bar and stacked on day 1. The per-timeframe range table is now: 1m → 7 days, 5m / 15m / 30m → 1 month, 1H / 4H → 2 years, 1d / 1wk / 1mo → 10 years. (A naive
max parameter doesn't work — the upstream API silently collapses every interval to monthly bars when max is passed, so the table sets the right range per interval explicitly.) Side effect: confidence markers, replay history, drawing snap points, and the AI's "show me how X performed historically" all now span the full backtested window the worker can see.
- Compact timeframe dropdown. The floating timeframe selector and its three-mode system (docked / undocked / hidden) is gone — the hidden mode in particular was a frequent "where did my timeframe go" support hit. In its place: a single text trigger at the top of the chart toolbar that shows the active timeframe ("D" for daily, "1H", "5m", "1W", etc.), and opens a vertical dropdown of every timeframe + Custom on click. Click the trigger again to close (or click outside, or pick a timeframe). Always attached to the top bar, never floating, no positioning state stored. The trigger is placed directly after the chart-type icon for a left-to-right flow of chart type → timeframe → indicators → replay. Removed ~370 lines of code that backed the old floating modes (drag-positioning, three localStorage keys for mode/position, context-menu, position-clamping on resize) and the per-chart timeframe-header-icon that was redundant once the trigger is always visible.
- Top bar reorganization. The multi-chart layout selector (1, 1+1, 1+2, 2×2, etc.) and the "save layout" / "load layout" buttons moved from the left side of the top bar to the right side, immediately left of the refresh button. Final left-to-right order: Profile → Symbol → Watchlist → Chart type → Timeframe → Indicators → Replay → (spacer) → Upgrade → Multi-chart layout → Save layout → Load layout → Refresh → Multi-window. The motivation: the controls fall into two groups — per-chart (which symbol, which timeframe, which indicators) and workspace-wide (which layout, refresh all, open a new window). Mixing them on the same side meant users would hunt for a "global" control among the per-chart ones. Workspace controls now cluster on the right; per-chart controls cluster on the left.
- STX routing fix — bare-symbol crypto mapping removed. Searching
STX in the symbol bar and clicking the suggested stock result was redirecting to STXUSDT (Stacks crypto) because normalizeCryptoSymbol had a bareCryptoMapping table with ~58 entries (BTC→BTCUSDT, ETH→ETHUSDT, SOL→SOLUSDT, STX→STXUSDT, etc.) that fired on any bare ticker matching a key — with no regard for whether the user had explicitly picked a stock named STX from the search dropdown. Every legitimate crypto symbol in the search index already carries an explicit -USD or USDT suffix (BTC-USD, BTCUSDT, ETHUSDT, etc.), so the bare-symbol rewrite was pure collateral damage on stock tickers that happen to overlap crypto names. The entire bareCryptoMapping block is gone; stock tickers like STX (Seagate) now resolve to the actual stock when the user picks the stock result. Cryptos still resolve correctly because they always come in with their suffix.
May 14, 2026
Smart RSI Crash Fix — 8-Indicator Divergence Repair, AI Signals Disclaimer & Legend Parity
Bug Fix
Enhancement
A user-reported "Smart RSI has no legend" turned out to be a silent setData crash in the divergence-line builder — and the same latent bug existed in seven other indicators. Fixed at the root by consolidating eight near-identical buggy copies of the function into one corrected shared helper. Same drop: a clear "do not blindly follow these signals" disclaimer added to the AI Buy Signals screener (in-app and on the /signals page), Volume Profile's missing settings gear icon was added (it was the only indicator legend without one), FVG Pro and Smart SL/TP gained meaningful displayed values in their legends, and a defensive legend-attach helper now surfaces errors instead of silently dropping them.
- Smart RSI silent crash — root cause. When Smart RSI was added,
addSmartRSIToChart called setData on each of its nine series (RSI line, BB basis/upper/lower/fill, four divergence lines). One of those calls threw Assertion failed: data must be asc ordered by time, the surrounding try/catch logged it and returned null, and the legend creation (which ran in a setTimeout(100) after the failed call) never executed — so the symptom was "no legend at all," but the real bug was that the indicator never finished mounting. The crash was specific to the divergence-line builder buildDivLineData, which pushed three points per pair: { time1, val1 }, { time2, val2 }, and a whitespace gap at data[idx2 + 1].time to break the line between segments. When two consecutive divergence pairs share a pivot (the "to" of pair N becomes the "from" of pair N+1 — very common at DIV_MIN=5 when oscillator pivots come back-to-back), the output sequence became ..., T_idx2, T_idx2+1, T_idx2, ... — a backwards jump that violates lightweight-charts' strictly-ascending-time invariant.
- Eight indicators carried the same buggy copy. Smart RSI just happened to be the one whose data triggered it for the user; the others were latent landmines waiting for the right pivot pattern to fire. The full list: Smart RSI, Smart MACD, Sniper MACD, MACD Pro, MACD Plus, Awesome Oscillator Plus, Aroon Plus, Ultra Stoch. Rather than fix the same logic eight times, the corrected algorithm now lives in one shared
_buildDivergenceLineSegments(pairs, data, N, precision) helper on the chart class — all 8 call sites are now one-line delegations. The corrected logic: skip the duplicate time1 push when the previous pair ended on the same pivot (prev.idx2 === pair.idx1), and skip the whitespace gap when the next pair would start on or before it (next.idx1 ≤ pair.idx2). Result: output is always strictly ascending; consecutive pairs visually flow through the shared pivot with no break (which is the correct rendering anyway — they really are connected at that point).
- Defensive legend-attach helper. The 100 ms
setTimeout wrapping addIndicatorToLegend was hiding the crash, because exceptions thrown inside setTimeout callbacks aren't propagated — the browser silently swallows them. New helper _scheduleIndicatorLegend wraps the attach in a try/catch, surfaces any failure to the console as "× <name> legend attach failed (attempt N)", verifies the legend DOM element actually rendered, and retries with 200 ms / 400 ms / 600 ms backoff if the pane DOM wasn't ready yet. Also falls back to the chart's last pane index if the original paneIndex came back null (which happens when the chart-model probe in _addOscillatorPane fails). Smart RSI now routes its legend through this helper; the other oscillators that share the pattern can opt in incrementally.
- AI Buy Signals "do not blindly follow" disclaimer. A user emailed in saying they lost money following the AI Buy signals and cancelled. The screener's intent has always been to surface tickers that may fit your strategy and deserve a closer chart review — a "second look" tool — but that framing wasn't visible enough. The disclaimer block now reads, in both the in-app screener and on the public /signals page: "Do not blindly follow these signals. This screener is a second look — a way to surface tickers that may fit your own strategy and deserve a closer chart review. It is not a system to copy trades from, and following signals blindly in the hope of making money is a fast way to lose it. Every name here still requires your own judgement, confirmation on the chart, and proper risk management." Rendered with a red-tinted background and a red accent border so it reads as a warning, not buried small print.
- Volume Profile gear icon. Indicator-legend audit across all ~70 indicators found that Volume Profile's custom
_addVRVPLegend rendered only eye + trash — the settings gear was missing, so VRVP users had no way to change row count, value-area percent, or bar width once the indicator was on the chart. Added the gear with the same hover state (blue tint) and click handler as every other legend; it opens the existing Volume Profile settings modal that was already registered but unreachable.
- FVG Pro & Smart SL/TP legend values. Both indicators had legends with all three icons but an empty
getValue callback, so the live value slot was blank. FVG Pro's legend now reads "N gaps" from the active rectangle count (updates as gaps fill / mitigate / scroll out of the lookback window). Smart SL/TP's legend now reads "Long @ 123.45" or "Short @ 123.45" from the entry price + direction so the trade setup is visible at a glance without opening settings.
- Save/restore parity audit — verified clean. Spot-checked all ~70 indicators against the layout serialize path (
src/main.js lines 3500–4400) and the _restoreIndicators hydration path (lines 4497–5264). Every indicator has a matching case in both halves; no indicator is being silently dropped on refresh. RSI, MACD, Bollinger Bands, ADX, Stochastic, ATR, Moving Averages, VWAP, OBV, Volume Profile, Keltner, Donchian, Historical Volatility, Chaikin Volatility, Ichimoku, Parabolic SAR, Pivot Points, CCI, Williams %R, MFI, A/D, CMF, Awesome Oscillator, Aroon, Vortex, Fisher Transform, Chandelier Exit, Linear Regression, Alligator Pro, Liquidity Sweep Pro, Master A/D, Master Ichimoku, Premium Momentum, Risk Management Pro, FVG Pro, Smart Fibonacci Zones, Premium Volume, Premium Divergence, Trendline Pro, Master Elliott Waves, Master Harmonic Patterns, Master Chart Patterns, Smart Pitchfork Zones, Smart RSI, Smart SL/TP, Smart Trend & Pullback, Fractal Zones Pro, Candlestick Pro, Master S/R, Market Structure Pro, plus all the Plus / Pro / Smart / Master / Ultra variants — all confirmed round-tripping correctly on refresh.
May 12, 2026
Master Pattern Suite — 10 New Indicators & AI Single-Letter Ticker Fix
Launch
Feature
Bug Fix
Ten new indicators ship in one drop — covering pattern detection, S/R analysis, divergence scanning, and trend following — plus a fix for an AI ticker-detection bug that caused hallucinations on any single-letter ticker (F, T, V, C, M, O, etc.) when it wasn't the active chart symbol.
- Smart Trend & Pullback. Fast + Slow EMA overlay with ATR-zone envelopes around each EMA and bull/bear cross markers — a classic dual-EMA trend filter with explicit pullback zones. Fully configurable EMA lengths, ATR multiplier, fill opacity, and per-direction marker colors.
- Fractal Zones Pro. Detects fractal pivot highs/lows and renders them as ATR-scaled support/resistance zones. The most recent pivot becomes the "near" zone; the prior pivot becomes the "swing" zone — when the two land within zone-width of each other they merge into one wider zone. Zone color flips dynamically by current close position. Optional glow halos, midline reference, buffer-threshold lines, and arrow markers on confirmed breakouts.
- Candlestick Pro. Detects 9 classic reversal patterns with strict priority filtering — one bullish, one bearish, and one neutral pattern per bar at most. Bullish set: Engulfing > Morning Star > Hammer > Dragonfly Doji. Bearish set: Engulfing > Evening Star > Shooting Star > Gravestone Doji. Neutral Doji only fires when no directional pattern claims the bar. Optional 200-EMA trend gate restricts bullish patterns to above-EMA bars and bearish to below-EMA bars; the 200 EMA renders as two whitespace-gapped LineSeries (green when above and rising, red otherwise) for an at-a-glance trend read.
- Master S/R Zones. Two-mode S/R zone system. Pivot mode uses asymmetric Left/Right pivot bars (Balanced L20/R15, Swing L25/R20, or custom) with strength-weighted "top-K" selection and cross-side merge by ATR separation — shows up to 2/4/6 zones at once. Fractal mode matches the symmetric Fractal Zones Pro logic. Dynamic role flip lets a zone switch between support and resistance based on current close; per-zone breakout signals fire once and use a global price-level dedup to prevent re-fires after a zone is recreated.
- Market Structure Pro. Premium swing-structure engine. Classifies each confirmed pivot as Higher High / Higher Low / Lower Low / Lower High and draws labels. Fires BOS (Break of Structure — continuation) when close crosses the prior swing extreme in the trend direction, or CHoCH (Change of Character — potential reversal) when it breaks against trend. Detects Equal Highs / Equal Lows when two consecutive pivots land within
eqThreshold × ATR of each other, drawing a dotted connector + EQH/EQL label. Optional zigzag legs connecting all confirmed pivots with neon-glow halos.
- Premium Divergence. Multi-oscillator divergence engine. For each pivot, runs the standard Pine divergence test (compare yesterday's value to value at the pivot, with a linear-interpolation guard that all intermediate bars stay above/below the line) across 9 oscillators — RSI, MACD line, MACD histogram, Stoch (smoothed %K), CCI, Momentum, OBV, CMF, MFI. The number of oscillators that agree becomes a confidence score (1/9, 2/9 ... 9/9, color-coded NORMAL / HIGH / EXCELLENT). Filters: 200-EMA directional gate, ADX chop tag, volume confirmation tag, minimum agreement score, per-direction cooldown, optional "show only last" mode.
- Trendline Pro. Auto-detects support and resistance trendlines from asymmetric pivot pairs (Fast L5/R1, Balanced L7/R2, Swing L10/R3, or custom). Each candidate is validated by touch count (≥2), slope sanity (within 0.25×ATR per bar), interior zone-crossing penalty, and price-respect ratio over recent bars. Candidates score on touches × proximity to current price × span length × pivot prominence; the top N (configurable 1–4) survive. Broken trendlines optionally remain visible for retest opportunities — if price fails to respect the broken level within a grace period, the line is removed automatically.
- Master Elliott Waves. Detects 5 Elliott Wave structures by scanning the most recent alternating pivot sequence for Fibonacci-validated patterns: Impulse (W2 retraces W1, W3 extends past W1, W4 no overlap, W3 not shortest), Diagonal (5 waves with W4 overlapping W1, converging), Triangle (5 legs, descending highs + ascending lows), Zigzag (ABC: B/A < 0.786), and Flat (ABC: B/A ≥ 0.786). Each pattern scores by how close its internal ratios sit to ideal fib levels; overlapping patterns reconcile so the highest score wins. The final pivot (W5 or C) is wrapped in a small PRZ rectangle marking the potential reversal zone, and wave letters (0/1/2/3/4/5 or 0/A/B/C/D/E) are labeled at each pivot.
- Master Harmonic Patterns. Detects 10 classic XABCD harmonic patterns by walking recent alternating pivot sequences and validating Fibonacci ratio bands on each leg: Gartley (AB/XA ≈ 0.618, AD/XA ≈ 0.786), Butterfly (AB/XA ≈ 0.786, AD/XA ≈ 1.272–1.618), Bat (AD/XA ≈ 0.886), Alt Bat (AD/XA ≈ 1.13), Crab (AD/XA ≈ 1.618), Deep Crab (AD/XA ≈ 1.618 with AB/XA ≈ 0.886), Shark (BC/AB ≈ 1.13–1.618), Cypher (CD/XC ≈ 0.786), 5-0 (AB/XA ≈ 1.13–1.618, CD/BC ≈ 0.5), plus standalone ABCD. Each candidate quintet picks the highest-scoring match across all enabled patterns; overlaps reconcile by score. X/A/B/C/D point labels render at each pivot.
- Master Chart Patterns. Detects 6 families of classic chart patterns from recent pivot sequences: Triangles (Ascending, Descending, Symmetric — via slope sign + flat/converging tests), Wedges (Rising, Falling — both slopes same direction, converging), Channels (Ascending, Descending, Parallel — via parallel-slope tolerance), Flag / Pennant (small consolidation following a strong move), Double Top / Double Bottom (two outer pivots at similar level with intervening valley/peak + neckline), and Head & Shoulders / Inverse H&S (peak-shoulder-peak structure with shoulders within tolerance). Each match scores by symmetry, neckline quality, and span; overlapping patterns reconcile so the highest score wins. Neckline rendering, pattern label rectangle, and optional breakout signal on close-cross are all configurable.
- AI Chat single-letter ticker fix. The AI's ticker detector (
detectMentionedTickers) had three filters — bare-pattern regex, context-pattern regex ("of X", "thoughts on X"), and a question-pattern fallback — all of which gated single-letter candidates on isKnownTicker(). But isKnownTicker itself was broken: it did allSymbols.includes(ticker) against an array of { symbol, name } objects, so the membership check always returned false — including for length-2+ tickers (those were getting rescued by the question-pattern fallback which didn't previously gate on isKnownTicker). Single-letter NYSE tickers (F, T, V, C, M, O, U, X, Z, A, B, D, E, J, K, L, R, S, W, plus crypto-style 1-char symbols) all silently failed every detection branch. Now isKnownTicker maps each DB entry to its .symbol string before the includes check, with a fallback for any bare-string entries; the bare-pattern and question-pattern regexes were also widened from {2,5} to {1,5} so single-letter matches reach the gate at all. I and A stay blocked via commonWords. Asking "What's the high and low of F in the past year?" from any chart now fetches F's ticker info, surfaces the actual 52-week range to the model, and reports those exact numbers instead of hallucinating from training data.
May 11, 2026
Light Mode — Full-App Theme, Chart-Library Theme API & Crosshair Performance
Launch
Feature
Enhancement
Light mode lands across every surface of the app, the chart library exposes a first-class theme API, and two targeted performance changes make crosshair scrubbing feel noticeably tighter — especially with Alligator Pro on the chart.
- Light mode end-to-end. A new
data-theme attribute on <html> drives the entire app via CSS variables (--bg-page, --bg-primary, --bg-secondary, --bg-tertiary, --bg-elevated, --bg-input, --text-primary, --text-secondary, --text-muted, --text-inverse, --border, --border-light, --border-strong, --accent, --accent-soft, --up, --down, plus chart-specific --chart-bg, --chart-grid, --chart-text, --chart-border, --chart-axis-label-bg). A synchronous init script reads the saved preference from localStorage and sets the attribute before first paint, so there's no dark-mode flash on light-mode reloads
- Theme toggle in the profile dropdown. One click flips the entire app. The toggle exposes
window.getChartingLensTheme(), setChartingLensTheme(theme), and toggleChartingLensTheme(), and dispatches a theme-changed window event so chart instances can re-apply their canvas-side colors (which the chart reads at construction time, not from CSS)
- New chart-library theme API. The forked lightweight-charts library now exports
chartThemes, resolveChartTheme(), and a chart.setTheme('light' | 'dark' | partial) method that bundles layout background, text color, grid colors, time + price-scale border colors, crosshair stroke, and axis-label pill backgrounds in one call. The ChartTheme type includes axisLabelBackground so the date pill at the bottom and price pill on the right both follow the active theme — previously they used a fixed dark grey regardless. Both chart constructors in the SPA now pass labelBackgroundColor at construction time so the axis pills theme correctly on first paint, not just after a theme toggle
- App-wide light-mode polish. Every panel got the same treatment — hardcoded dark hex values (
#1e222d, #2a2e39, #34384a, #3c434c, #232732, #1a1a2e) and "color: white"/#d1d4dc/#888/#666 text spans got swept to CSS variables across the Symbol Search modal, watchlist rows (the white-on-white symbol/price bug is gone, hover stripe is light grey in light mode), sidebar header + stock info box + Show More modal (analyst gauge, dividends donut, income statement, 52-week range, profitability margins, ownership, short interest, cash vs debt — all stat strips and section headings themed), Alerts panel (empty state, alert rows, delete button), Create Alert modal (every input, dropdown, radio, checkbox, label, hint, and the Save CTA), Stock Screener (every fundamental + technical filter input now uses one unified var(--bg-input)/var(--text-primary)/var(--border) style across both single-timeframe and dual-timeframe modes), AI Chat (assistant + user bubbles, typing indicator, the welcome message's strategy/indicator chip rows, the backtest results summary card, the persistent live-stats bubble, the Quick Actions modal body + filter tabs + row hover, and the buy-signals results bubble), Hedge Fund Holdings tab (each fund card, each holding row, the premium-blur overlay, the "Add more investors" upsell card, the loading/empty states), the Hedge Fund settings modal (selected/available investor pills, back button, headings), the drawing toolbar's popout sub-sidebars (Line Tools, Magnet, Gann & Geometry, Position & Range — all with consistent option-row hover), the floating timeframe selector (container, drag handle, every button's idle/hover/active state) and the custom timeframe picker (Every N units), and the Daily Streak panel + milestone-details modal
- Drawing tool active state redesigned. Selected drawing tools used to render as a bright blue button (
#2962FF background) with a white icon — high contrast but harsh against a white chart background, and the white icon read as washed-out depending on the chart underneath. They now render as var(--bg-tertiary) (soft grey) with var(--accent) (blue) icons — the icon stays clearly readable and the button still reads as "selected" in both themes. The same treatment applies to the Magnet button's active states (Weak = grey + blue, Strong = grey + orange so they're still visually distinct). Hover state uses var(--accent-soft) (a subtle blue tint) so hover and active are differentiated
- Drawing toolbar hover gets a real themed state. An event-delegated
mouseover/mouseout handler on the toolbar paints a themed hover background on any button sitting in its idle (transparent) state, using relatedTarget to skip events fired while moving between a button's own SVG children — so the hover doesn't thrash on child boundaries. Buttons with an active highlight are skipped so the selected-tool state isn't clobbered
- Theme-aware popup chrome. Every floating popover — the chart-type picker, layout picker, watchlist dropdown, Add Indicator modal, sector comparison table, search results, hedge fund overlap tooltip, pattern-recognition options, model selector in AI Chat — got its hardcoded dark hex backgrounds (used by mouseenter handlers across the file) replaced with
var(--bg-tertiary). Scrollbars in the Symbol Search modal and Quick Actions modal now read --border-strong + --bg-elevated live from computed styles each time you mouse in, so the scrollbar thumb/track follow the active theme
- Crosshair performance — OHLC legend. The price-info legend used to rebuild its full inner HTML on every mouse move (a 10-line template literal with ~10 child spans). That meant the browser parsed HTML, dropped & rebuilt DOM, and ran layout + paint on every native
mousemove event. The legend's DOM is now built once in createPriceInfoDisplay with cached references to each value span (symbol, time, O, H, L, C, V, change), and updatePriceInfo updates textContent on those cached nodes — no innerHTML, no parsing, no layout storm. Plus skip-the-write caches on lastSymbol, lastTime, and lastIsOHLC avoid the few DOM writes when nothing actually changed
- Alligator Pro glow disabled by default. The Alligator Pro indicator renders seven series in one pane — three thin jaw/teeth/lips lines, three duplicate 6px-wide alpha-blended "glow" lines, and a BandSeries mouth fill. Wide alpha-blended lines are the most expensive thing canvas does, and the glow series were the dominant per-frame paint cost while the user wasn't even interacting with the chart.
showGlow now defaults to false; the three glow series are still created (with visible: false) so users who want the neon look can flip it back on in indicator settings and updateAlligatorProData simply toggles the visible option — no series recreation. Users with saved configs that had glow on keep their setting
- Quick Actions visual reset. The Quick Actions button above the AI Chat input previously used
color: #ff9800 on a faint orange tint — ~2:1 contrast on white, well below WCAG AA. It now uses var(--warning) (resolves to #ef6c00 in light, #ffa726 in dark) at font-weight 600. The button's subtitle "— Backtests, indicators & more" used opacity: 0.6 on the orange (making it almost invisible in light mode) and now uses an explicit var(--text-secondary) at full opacity
May 9, 2026
Indicator Suite Expansion — 2 New Indicators, Wavetrend & Ichimoku Overhauls, VBSD Polish & Subscription Hardening
Feature
Enhancement
Bug Fix
Big indicator pass plus subscription hardening. Two brand-new indicators (Alligator Pro and Liquidity Sweep Pro), full PineScript-parity overhauls of Wavetrend and Ichimoku, label legibility and break-marker offset polish on VBSD, an Inputs / Style / Visibility tab system applied across every indicator's settings modal, robustness fixes for legend behavior after deleting an indicator, a chart-library pane-ownership fix that stops VBSD from leaking artifacts into other panes, a server-side double-subscribe guard on the Stripe checkout worker, and a Pro-tier recognition fix on the AI Buy Signals page.
- New indicator: Alligator Pro. Williams Alligator with R²-adaptive SMMA smoothing — alpha scales with trend linearity so the lines react fast in trends and slow down in chop. Forward-offset projection on jaw / teeth / lips, neon glow layers, mouth fill between jaw and lips, ADX chop filter, R² trend gate, configurable signal cooldown to prevent clustering, and a "+" badge on signals aligned with the 200 EMA. Full per-component color and visibility control via the new tabbed settings modal
- New indicator: Liquidity Sweep Pro. Detects asymmetric wick rejections past recent extremes — lower wick > 1.5× upper wick (or vice versa), with ATR-scaled minimum-wick and minimum-rejection thresholds. Forward-pass cooldown matches the PineScript exactly. Optional EMA filter promotes hits to "Sweep+" when the bar closes on the trend-aligned side of the EMA. Markers position at
low − ATR×lblDist (bull) or high + ATR×lblDist (bear) so they sit at a configurable distance regardless of zoom
- Wavetrend now matches the LazyBear PineScript end-to-end. The original implementation only exposed Channel Length, Average Length, two line colors, and three toggles. The full param set is now in the modal: Over Bought / Over Sold Levels 1 & 2 (the ±60 / ±53 reference lines), per-line colors for every plot in the script (WT1, WT2, histogram, zero line, each ob/os level, bullish & bearish cross markers). Cross-marker thresholds now track the user's
obLevel2 / osLevel2 instead of the hardcoded ±53, so changing the levels in the modal correctly shifts where signals fire
- Ichimoku now has per-component visibility & colors. Cloud-only view is one click — toggle off Tenkan, Kijun, Senkou A, Senkou B, and Chikou and leave Show Cloud Fill on. Every line gets its own color picker. All series are created up front and toggled via
applyOptions({ visible }), so flipping a line on/off doesn't recreate geometry or recompute data. Older saved layouts merge under defaults so they still render with sensible colors
- VBSD label legibility & break-marker offset polish. Volume text inside zones is now solid black, bold (700), 11–14 px adaptive size, full opacity, and hard-clipped to the box bounds — text physically cannot leak into neighboring zones. When the box is too short for stacked text, the label automatically falls back to a single horizontal line joined with " · " (e.g. "2.4M (35%) · 4h OB") rather than dropping the timeframe tag. Break markers now use the existing Signal Distance (ATR×) setting (which previously did nothing) to push the symbol an ATR-based distance OUTSIDE both the zone bound AND the candle bound — arrows no longer sit inside the colored zone fill
- Indicator settings split into Inputs / Style / Visibility tabs. The settings modal previously stacked every parameter on a single page. The modal now buckets each parameter by purpose: number and select inputs go in Inputs, color pickers and the generic line-color picker go in Style, and checkbox toggles go in Visibility. Inputs is always the first tab when populated. Empty tabs auto-hide — A/D, which only has a price-label toggle, shows just Style and Visibility. Element IDs stayed identical, so all existing color-picker, toggle, validation, and save wiring needed zero changes
- Legend behavior after deleting an indicator is now robust. Previously, deleting one indicator from a chart with multiple indicators could turn the remaining names white and detach them from the OHLC legend, stacking them on top of each other. Three coordinated fixes:
getIndicatorColor got a complete map (MA, BB, Wavetrend, VBSD, autoPattern were missing — the white-color symptom), the rebuild now queries each series' actual current pane via series.getPane().paneIndex() instead of trusting a sequential counter (the detached/stacked symptom), and the color resolution uses a 3-tier fallback chain (chartInfo.color → group.color → getIndicatorColor(type))
- VBSD remove-from-chart now actually clears the rectangles. Deleting VBSD from the legend used to leave its zone boxes, midlines, and breakout markers on the chart — the standard
removeIndicatorByPane path only knows how to remove series, and VBSD renders as primitives. The deletion path now special-cases VBSD and delegates to _clearVBSDArtifacts, the same helper the manage-menu remove path uses
- VBSD zones no longer leak into volume / oscillator panes. The chart-library renderers
_drawRectangles and _drawTrendlines ran on every pane and used each pane's own defaultPriceScale() to convert price values to Y coordinates — so a $60–$65 zone defined on the price pane was being re-rendered into the volume pane through a 0–100M scale, where it collapsed into a thin sliver near zero. Both renderers now read each primitive's options.paneIndex (default 0 = price pane) and skip rendering when the current pane doesn't match, mirroring the pattern already used by the Fibonacci, trendline, and rectangle preview renderers
- Double-subscription guard on /create-checkout-session. Previously, a paid user hitting a Premium or Pro CTA from any unguarded entry point (landing page, pricing page, in-app modal) could complete a second Stripe Checkout that created a brand-new Stripe Customer and Subscription billed against the same card — and the webhook would then overwrite the original
subscriptionId in Firestore, leaving the old sub orphaned in Stripe and continuing to bill. The checkout worker now requires a Firebase ID token, derives UID + email from the verified token (not from the request body), looks up the existing subscription doc, and returns 409 {code:'already_subscribed', currentTier, requestedTier, nextAction} when an active or trialing Stripe sub is already on file. Premium users routed through Pro CTAs go through /upgrade-subscription with proration; same-tier or downgrade attempts go to Account Settings instead of silently creating a duplicate
- AI Buy Signals now recognize Pro. Pro subscribers were being served the 3-stock free slice on the Signals page because both
worker.js's getRequestTier and signals.js's tier readers only matched 'premium' and collapsed any other claim value to 'free'. The worker now treats both 'premium' and 'pro' as paid (single source of truth at the request-tier layer keeps every tier !== 'premium' downstream check correct), and the Signals page client recognizes 'pro' from custom claims, the SubscriptionManager localStorage cache, and isUserPremium(). Pro users get the full 25 stocks immediately
May 8, 2026
New Pricing Tiers — Premium & Pro
Launch
Feature
The single Premium plan splits into two tiers: Premium ($14.99/mo) with capped quotas (20 active alerts, 10 saved layouts, 10 watchlists, 10 email-notified alerts, 20 AI credits/day) and Pro ($29.99/mo) which lifts every cap to unlimited — same feature set, just no limits. Yearly billing saves 17% on both ($149/yr Premium, $299/yr Pro). The Free tier is unchanged. Existing $9.99 subscribers are automatically grandfathered into Pro at their original price for as long as their subscription stays active — nothing to do. The new /pricing page handles tier and billing-interval selection before checkout.
- Tier-aware limits everywhere. SubscriptionManager exposes per-tier caps via a single
getLimits() source of truth. New helpers (canCreateAlert, canEnableEmailAlert, canCreateLayout, canCreateWatchlist, canAddSymbolToWatchlist, canUseAiCredit) replace the old isPremium/free binary. Pro short-circuits everything to allowed; Premium reads its specific cap; Free reads the strict free-tier cap. Subscription-state-pending always fails open so a paying user is never wrongly blocked mid-refresh
- Premium caps applied at every enforcement point. Active alerts: 3 free / 20 Premium / unlimited Pro. Email-notified alerts: 0 free / 10 Premium / unlimited Pro (capped at trigger time by alert creation order, oldest wins). Saved chart layouts: 1 / 10 / unlimited. Watchlists: 1 / 10 / unlimited. Symbols per watchlist: 40 / unlimited / unlimited. AI credits per day (shared between AI Chat, Buy Signals, custom indicators & backtests): 2 / 20 / unlimited. CL Score reveals: 0 / unlimited / unlimited. Indicators per chart: 3 / unlimited / unlimited. All caps surface a tier-aware upgrade prompt — "Premium tier limited to 20 alerts, upgrade to Pro for unlimited" — not a generic "upgrade" message
- Stripe webhook routes price ID to tier. Five price IDs are mapped: legacy $9.99/mo → Pro (grandfathered), $14.99/mo and $149/yr → Premium, $29.99/mo and $299/yr → Pro. Subscription update events fetch fresh items from Stripe when the webhook payload omits price details, so tier resolution is always grounded in the live subscription state. Unknown price IDs default to Pro — better to overgrant than to undercharge a customer's access during a price-id rollout. Every claim now includes the tier so the client knows Premium-vs-Pro at JWT-decode time, no Firestore round-trip needed
- Stripe checkout worker accepts tier + interval. The checkout endpoint now takes
{ priceId } or { tier, interval } and validates against an allowlist of the five known price IDs. The legacy {} shape still works (defaults to Premium monthly) so old call sites don't break. setPremiumClaim Cloud Function accepts the new tier='pro' value, syncs both Premium and Pro users into the email-alert registry, and writes the tier into the Firestore subscription doc for the dashboard's analytics
- New /pricing page replaces the pre-launch preview. Three side-by-side tier cards with the full feature comparison, monthly/yearly billing toggle (yearly saves 17%), and per-tier CTAs that send users straight to Stripe Checkout for the selected price. Mobile shows stacked cards instead of a horizontal-scroll table. Already-signed-in users go straight to checkout; not-signed-in users bounce through signup with an
?upgrade=tier&interval=... hint to resume after auth. Grandfathered $9.99 subscribers see a banner confirming their Pro access (so they're not confused why the page lists $29.99 when they pay $9.99)
- Upgrade modal becomes a "see plans" hub. The in-app upgrade modal that fires on cap-reached events now shows a two-tier price card (Premium $14.99, Pro $29.99) and a single CTA that routes to /pricing for tier selection. The legacy single-price flow is gone — one entry point, full comparison, then checkout
- Dynamic AI-credit messaging. Premium users hitting their daily AI cap now see "you've hit your 20/day Premium AI cap — upgrade to Pro for unlimited" instead of the generic free-tier upsell. Free users still see the original "you've used all your free credits" message but with the new "20/day on Premium" upgrade pitch. Same change applied to AI Chat, AI Buy Signals, custom indicators, and custom backtests — all share the same daily credit pool
May 7, 2026
AI Assistant Action Tools, Verdict-First Analysis & Email Alert Resubscribe Fix
Feature
Enhancement
Bug Fix
The AI Assistant just stopped describing how to use the product and started actually using it for you. New tool calls let you ask in plain English to add or remove watchlist symbols, switch the chart timeframe, rank a watchlist by any of 17 fundamentals, or get a verdict-led analysis on a stock — and it does it, with confirmation chips and one-click Undo for anything reversible. Stock-analysis questions now lead with the buy/sell/hold answer instead of burying it. Session-based indicators (Opening Range, daily VWAP) work correctly on any timeframe. Premium gates honored throughout — natural language is no longer a free-tier loophole. Plus a quiet billing fix for users whose email alerts silently stopped firing after a Premium lapse + resubscribe.
- Add & remove watchlist symbols by voice or chat. "Add HPQ and KHC to my watchlist", "drop NVDA from my list", "watch Tesla and Apple" — the AI parses the tickers, batch-adds (or removes) them, and replies with a confirmation chip listing exactly what changed. Every confirmation has a one-click Undo button that reverses the operation. Free-tier 40-symbol cap is enforced — over-cap requests refuse the whole batch and surface the upgrade prompt with a clear message about how many slots are left. Already-in-watchlist duplicates are reported separately, never silently re-added
- Change timeframe by chat. "Switch to 5m", "go daily", "show me weekly", "change to 1 hour", "1 minute" all work — with loose phrasing handled (5 min / 5 minutes / 5m / five-minute all parse). Custom timeframes (3m, 7m, 2h, 12h, 3d, anything off the standard set) are Premium-gated automatically: free users get a clear "that's a custom interval — standard timeframes are 1m, 5m, 15m, 30m, 1h, 4h, 1D, 1W, 1M" message plus the upgrade modal, while Premium users switch instantly. The chart's timeframe-selector buttons auto-update to match
- compare_watchlist (Premium): rank a watchlist by 17 fundamentals. Ask "in my SCap miners watchlist, which has the most insider ownership?", "lowest forward P/E across my watchlist", "which of my watched stocks have the highest analyst upside?", or "rank my crypto list by market cap" and you get a leaderboard. Supported metrics: insider ownership, institutional ownership, short % of float, forward P/E, trailing P/E, market cap, beta, analyst recommendation, analyst upside %, dividend yield, earnings growth, revenue growth, return on equity, profit margins, debt-to-equity, distance from 52-week high, distance from 52-week low. Watchlist names fuzzy-match (so "scap miners" finds "Z - SCap miners"); omitting the name defaults to the active watchlist. Concurrency-capped fetcher (10 in flight) plus a 5-minute per-symbol cache means re-asking variants of the same question costs zero new backend calls
- "Go through my watchlist" actually goes through your watchlist. The active watchlist is now in the AI's context every turn — it knows the name and every symbol. Composite asks like "go through my watchlist and tell me which is the best buy" no longer respond with "which watchlist?"; the AI shortlists by analyst upside or recommendation, then produces a verdict-led analysis on the top candidate. Same applies to add/remove/compare — the AI never asks which watchlist when you didn't name one
- Verdict-first stock analysis. "Is BABA a good buy?" responses now lead with the answer: a colored circle (🟢 Buy / 🔴 Sell / 🟡 Hold / ⚪ Watch), one bolded sentence with a specific price reference, and a Confidence rating (High/Medium/Low). The supporting Current Levels / Trade Guidance / Story / Bull Case / Risks / Watch For sections still follow — you just don't have to scroll past them to find the answer. The closing "Verdict:" line is gone — the verdict at the top is the only one
- Opening Range / session-based indicators rebuilt. Asking the AI for Opening Range High/Low (or daily VWAP, prior-day high/low, session-anchored indicators) on a daily chart used to draw a single static line across the whole chart — conceptually broken because each daily bar already is one session. The AI now flags these requests as intraday-only, auto-switches the chart to 15m first (a free standard timeframe), and emits proper per-session step-function code that resets at every session boundary. The result is a real ORH/ORL that holds flat through each trading day and jumps to the new value at the next open
- Smarter routing for "how do I create" requests. Prompts like "How do I create a rolling 5-day low indicator?", "How would I build supertrend?", "Can you make me a 9/21 EMA crossover?" used to get explained-and-then-asked-again. They now route as actions and the AI just creates the indicator with an Apply button, no second prompt required. Concept questions ("explain RSI", "what does MACD mean") still get text-only explanations
- Filtered stock recommendations return real lists. Asking "find me a stock under $30 with high promise for profit within a week", "give me a low-float biotech with earnings this week", or "any stocks with a breakout setup today" used to open the platform's generic momentum panel that ignored every filter. Filtered requests now return a list of 5–10 specific tickers that actually match every constraint, sourced via web search. The unfiltered Buy Signals panel still opens for unfiltered asks ("what's hot today")
- No more "if you want this on your chart, just ask". Trailing-hedge phrases like "let me know if you'd like me to apply it" / "want me to add it?" are now banned in the AI's response style — if the AI would apply something on a follow-up "yes", it applies it on the first turn. One prompt, one answer
- Premium gates honored across every AI tool. "Switch to 3-minute timeframe", "add 50 symbols to my watchlist when I'm at 39", "compare my watchlist by [metric]" all enforce the same caps as the manual UI, with a clear upgrade prompt instead of a silent bypass. Natural-language commands no longer let free users access Premium-only features by going through the AI
- Email alert resubscribe fix. Users who had email-notified alerts saved during a previous Premium period, let their subscription lapse (which removes them from the email-alert cron's registry), and then resubscribed would silently have their email alerts never fire again — the cron only re-registered users when they next saved or edited an alert. The
setPremiumClaim Cloud Function now syncs the alert registry on every Stripe subscription event: on the Premium event it scans your existing alerts and re-registers you with the email-alert cron immediately; on the free event it removes you eagerly so the cron skips you on its next pass. Affected resubscribers will be auto-fixed on their next Stripe webhook event (renewal, cancellation, anything); existing-without-event users get fixed the moment they save or edit any alert
May 3, 2026
Stock Screener Major Upgrade & AI Assistant List-Query Fix
Feature
Enhancement
Bug Fix
A substantial filter and sort expansion to the screener built around what active momentum and small-cap traders actually screen for — float, volume, gap, pre-market, and spread metrics, every one filterable, every one sortable, and every one bundled into one-click presets. Plus a meaningful AI Assistant fix: list-of-stocks questions now actually return a list instead of pivoting to the current chart symbol, and "yes" replies to a deferred web-search offer now actually run the search.
- Float, Shares Outstanding, Short Float % filters. All three are now native screener fields with min/max range inputs in both the main and sidebar screener panels. Used heavily in low-float momentum and short-squeeze setups
- RVOL (Relative Volume) filter and sort. Defined as today's volume divided by the stock's 3-month average daily volume. RVOL > 2 means the stock is trading at 2× its normal pace. Range filter (min/max) plus a high-to-low sort option in both panels
- Dollar Volume filter and sort. Price × volume — the cleanest single number for "is this name actually liquid enough to trade?". Range filter plus high-to-low sort. Helps avoid thin sub-$10 names that show up high on volume but trade pennies of dollar flow
- % Change Today filter. Range filter on the day's price change. Pairs naturally with RVOL to find stocks both moving and being traded heavily
- Gap % filter and sort. Computed as today's open vs the previous session's close, expressed as a percentage. Lets you screen specifically for gap-and-go setups (e.g., "Gap ≥ 5%") rather than relying on intraday change as a proxy
- Pre-market % filter and sort. Min/max range on the pre-market change percent. Most useful between 4am and 9:30am ET; outside those hours pre-market data may be empty for some names. High-to-low sort puts the day's biggest pre-market movers at the top of your list
- Max Spread % filter and sort. Half-spread expressed as a percentage of mid-price — (ask − bid) / midpoint × 100. Set "Max Spread % ≤ 0.5" and you'll filter out illiquid names whose bid-ask is wider than half a percent. Sort low-to-high to surface the tightest-spread liquid names first
- Earnings Today only checkbox. Single-tap filter that restricts results to symbols whose earnings fall within today's date (your local timezone). Useful for "what's reporting today and trading actively?" screens
- One-click Preset dropdown at the top of the filter panel. Seven curated screens populate every relevant filter at once, then leave you free to fine-tune. Picking a preset clears any prior filter state first so you get exactly that preset, no leftover settings bleeding through
- Preset: $3-10 High RVOL Gappers. Price 3-10, RVOL ≥ 2, Gap % ≥ 5, Avg Volume ≥ 500K — the classic low-priced gap-and-go screen
- Preset: Pre-market Gappers (>10%). Pre-market % ≥ 10, Price ≥ 2, Avg Volume ≥ 500K — what's already moving before the bell
- Preset: Low Float Momentum. Float ≤ 20M shares, RVOL ≥ 2, % Change ≥ 3, Price ≥ 1 — small float names making a real move
- Preset: Penny Stock Movers. Price 1-5, RVOL ≥ 3, Dollar Volume ≥ 5M — sub-$5 names with enough liquidity to actually trade
- Preset: Short Squeeze Candidates. Short Float ≥ 15%, Avg Volume ≥ 500K, Price ≥ 2 — high-short-interest names with the volume to actually run
- Preset: Mid Cap Momentum. Mid-cap market cap, RVOL ≥ 1.5, % Change ≥ 2 — cleaner names with real movement
- Preset: Liquid Only (tight spreads). Max Spread % ≤ 0.5, Dollar Volume ≥ 10M, Price ≥ 5 — large liquid names only, useful as a base layer to combine with technical filters
- New sort options across both screener panels. Float (low → high), Short Float % (high → low), RVOL (high → low), Dollar Volume (high → low), Gap % (high → low), Pre-market % (high → low), and Spread % (low → high). Sort label shows in the results header so you always know how the list is ordered
- AI Assistant — list-of-stocks questions are now answered as lists. Asking "what stocks had news or earnings in the last 3 days?" used to pivot the answer to the current chart symbol because the system prompt was current-symbol-centric. The router now detects multi-stock list queries (phrases like "list of stocks", "what stocks have...", "stocks that...", "biggest gainers", "earnings today/tomorrow/this week", "reporting today") and routes them to web search with a different prompt that explicitly tells the AI to ignore the current chart symbol and return a clean ticker list with no resistance/support, no trade guidance, no verdict
- AI Assistant — "yes" to a search offer actually runs the search now. When the AI offered to search the web and the user replied "yes" / "do it" / "go ahead" / "sure", the previous behavior would route the bare "yes" through the regular tool-calling path with no real query content — which often defaulted to opening the Buy Signals panel. The router now detects affirmative replies to a prior search offer, walks the conversation history backwards to find the original substantive question (skipping any prior affirmatives), and sends the search engine the actual question instead of "yes". Recognised affirmatives include yes/yeah/yep/ok/okay/sure/please/do it/go ahead/sounds good/search it/look it up
May 1, 2026
AI Indicator Library, Selected/All Scope Toggle & Persistent S/R Levels
Feature
Enhancement
Bug Fix
A substantial release for the AI Assistant: a personal library of saved custom indicators that syncs across devices, a Selected/All scope toggle on every AI chat card so you control which chart the action targets in multi-chart layouts, persistent S/R levels saved as proper drawings, and a long list of correctness fixes around how the AI sees the active chart pane.
- AI Indicator Library — ☆ Save button on every indicator card. Every AI-generated indicator (custom code AND preset shortcuts like "add Bollinger Bands") now has a Save button next to "Add Indicator to Selected Chart". Click it and the indicator is saved to your personal library, synced across devices via Firestore (path:
users/{uid}/aiIndicators/{id}). Click it again to un-save. The button matches the size of the Add button and shows a smaller caption explaining where the indicator gets saved
- AI Indicator Library — new "Saved" category in the Indicators menu. A new ⭐ Saved entry sits at the top of the indicator menu sidebar, listing every indicator you've saved. Click an entry to apply it to the chart (uses the same toggle-on/off behavior as native indicators). Each row has three icons on the right: 🛈 Info opens a modal with the AI's full original explanation, ✎ Edit lets you rename or rewrite the description (saved straight back to Firestore), 🗑 Delete removes it from your library
- AI Indicator Library — clean info modal for long descriptions. AI explanations often run multi-paragraph and looked broken when truncated inline. The Info modal renders the full text scrollable with proper line breaks preserved. Click-outside or Esc to close
- Selected / All scope toggle on every AI chat card. Indicator, Backtest, and S/R Levels cards now show a small Selected chart / All charts pill toggle above the action button. Selected (default) targets only the active chart pane; All fans out to every chart in your layout. The button label updates live as you toggle (e.g. "Add Indicator to Selected Chart" ↔ "Add Indicator to All Charts")
- Scope toggle — locked in single-chart mode, unlocks live. The toggle is always visible so users see the option exists, but the pills are dimmed and not clickable when there's only one chart. The moment you switch to a multi-chart layout, every existing chat card's toggle becomes interactive without re-prompting the AI. Switch back to single-chart and they re-lock
- "Add Indicator to Selected Chart" actually means selected now. Previously, regardless of the button's wording, indicators applied to every chart in the layout. With the new scope toggle defaulting to Selected, "Add to Selected Chart" routes through
this.activeChartIndex only. Native preset indicators (Bollinger, RSI, MACD, VWAP, Stochastic, ATR, ADX, Supertrend, Wavetrend, Leg Count) honor the scope too via temporary chart-array masking around their internal multi-chart loops
- True Add ↔ Remove toggle on AI cards. The Add Indicator / Run Backtest / Draw Levels buttons used to either add another instance on each click or lock for an upgrade prompt. Now every click is a proper toggle: first click adds, the button flips to "Remove from Chart" / "Remove Backtest from Chart" / "N Levels Drawn — Click to Remove", the next click cleanly undoes the last action. Switching chart panes live-updates every button label so it reflects whether the indicator/backtest/levels are present on the now-active chart
- Free-tier "lock after first apply" gate is gone. Free users used to get one apply per AI indicator/backtest, then the button rebound to "Upgrade" so they couldn't even toggle off. Removing what you added isn't a premium action and shouldn't be gated. Free users now get the same Add ↔ Remove toggle as Premium; the indicator-count limit still applies on the add path
- Native preset indicators — targeted toggle-off. When you applied "Bollinger Bands" through the AI in two different panes (selected scope), clicking Remove on the second card would remove both. Per-card state now tracks exactly which group ids that card created on which charts, so toggle-off only undoes the groups that card placed on the click target. Manually-added Bollinger from the toolbar is left alone
- AI prompts route through the active chart pane. The AI used to always read its symbol context, candles, and technical levels from chart 0 — meaning if you had TSLA on chart 1 and AAPL selected on chart 2 and asked "draw S/R levels", you'd get TSLA-priced levels labeled as AAPL. Symbol, OHLC data, recent price history, and computed technical levels now all come from
activeChartIndex. collectAIContextData, collectRecentPriceHistory, and calculateKeyTechnicalLevels all accept an explicit chart index
- S/R Levels — per-chart symbol matching in "All" scope. S/R prices are symbol-specific in a way indicators aren't (AAPL's $180 resistance line on a TSLA chart is meaningless). In All scope, the dispatcher now filters target charts to those whose symbol matches the S/R's target symbol — the button label honestly reflects this as "Draw Levels on 2 of 3 Charts" if only some panes match. If zero charts match, a notification surfaces ("None of your charts are showing AAPL...")
- S/R Levels — symbol-specificity callout in multi-symbol layouts. When the user has multiple charts showing different symbols, every S/R card now displays a small inline note ("These levels are specific to AAPL. To get levels for another symbol, click that chart and re-prompt"). The note appears/disappears live as the user adds charts or changes symbols
- S/R Levels — persisted to Firestore as proper drawings. Lines drawn by the AI now save to
users/{uid}/drawings/{id} as type "horizontal" with full options (color, line width, line style, label text, strength). On page refresh they reload exactly like manually-drawn horizontal lines, including labels. Toggle-off on the SR card also deletes them from Firestore so they don't reappear
- S/R Levels — symbol switch acts on the active pane, not chart 0. The "Switch to AAPL & Draw Levels" button used to call
this.changeSymbol which only changes chart 0. So clicking on a TSLA chart 0 with AAPL on chart 2 selected would hijack chart 0 to AAPL and leave the user confused. The flow now uses changeSymbolForChart(targetIdx, ...) on the active pane only, polling that chart's OHLC for readiness before drawing
- Backtests — targeted toggle and All scope. Same target-aware toggle-off as indicators: clicking Run Backtest on chart 2 doesn't unapply chart 1's backtest just because the same card was used. In All scope, the strategy runs on every chart in the layout. Native-strategy presets (Golden Cross, TSMA Cross, RSI Mean Reversion, MACD Crossover, 2nd Leg After Gap, Pivot Reversal) iterate per-chart through the same execution path
- "Adding Indicator..." stuck-state bug fixed. The button-refresh helper was guarding against transient text like "Adding Indicator..." and "Drawing Levels..." to avoid clobbering them, but that prevented the success path from overwriting them with the canonical Remove label. Only sticky "Failed" states are now guarded; everything else gets overwritten by the refresh
- Group state append (not overwrite) for native indicators. Previously, applying a native AI indicator card to chart 2 after applying to chart 1 would overwrite the tracked group ids, leaving chart 1's group orphaned in the DOM and untracked — so the user couldn't remove it via the card. State now appends so both groups are tracked, and toggle-off can find and remove either selectively
April 29, 2026
AI Assistant Rebuild, Buy Signals Panel Redesign & Cross-Device Recents
Feature
Enhancement
Bug Fix
Big day. Three substantial pieces of work shipped together: a full architectural rebuild of the AI Assistant (replacing its brittle pattern-matching intent detection with native function calling so it actually understands what you're asking for, no matter the phrasing), a redesign of the AI Buy Signals panel that finally surfaces signal age and price drift at a glance, and cross-device recently-viewed symbols in the search dropdown so your watchlist context follows you to every device you sign into.
- AI Assistant — tool calling replaces regex intent detection. The AI now has a set of tools it can invoke directly (apply_indicator, run_backtest, draw_sr_levels, find_buy_signals). It picks the right one from your natural-language request, no matter how you phrase it. "Apply an indicator that shows buy/sell signals", "throw on a VWAP", "build me something that highlights gaps", "give me an indicator", "lets try the RSI version instead" — whatever you say, it just works. Deleted ~1,500 lines of brittle keyword-matching logic in the process
- AI Assistant — no more raw code in chat, ever. The old system would occasionally dump a JavaScript code block into the chat instead of showing the Apply Indicator button. With tool calling, code lives inside the tool argument, never in the visible response. The button always appears, and you never see a wall of code again
- AI Assistant — markdown rendering in responses.
**bold** shows as bold, ### Section renders as a real heading, lists become proper bullets, and [links](url) become clickable. Previously the AI's stock-analysis output (Bull Case, Risks, Verdict, Current Levels) showed raw asterisks and hash symbols. Now it's properly styled
- AI Assistant — buy/sell indicator menu. Ask for "an indicator that tells me when to buy or sell" and the AI now offers 3-4 different strategy options (EMA crossover, RSI mean reversion, MACD signal cross, Stochastic, Donchian breakout, VWAP bounce, Bollinger reversion, Supertrend) split between day-trade and swing-trade approaches. Say "let's try the RSI version" or "swap to Donchian" and the indicator regenerates with that strategy
- AI Assistant — markers AND underlying lines. Buy/sell indicators now return both the green up-arrows / red down-arrows on signal bars (the WHAT) and the EMAs / RSI / MACD lines that drove each signal (the WHY). Previously you'd get either lines OR markers, not both. Now you can visually verify what triggered every arrow
- AI Assistant — live arrow updates. As new candles form and the underlying crossover/threshold/condition triggers, new arrows appear automatically. Same when you switch ticker or timeframe — markers re-render against the new chart instead of staying pinned to the previous symbol's candle times
- AI Assistant — thumbs up/down on every response. Previously feedback only appeared on indicator/backtest cards. Now every assistant message has feedback buttons (excluding paywalls and error messages). Thumbs down sends your prompt and the AI's response to our team so we hear about every miss
- AI Assistant — stripped filler prompts. The AI no longer says "Here is the code:", "I can apply this indicator now", "Would you like me to proceed?" before the Apply button. The button is right there — those phrases were noise
- AI Assistant — cleaner concept answers. "What is RSI", "explain MACD", "how do moving averages work" no longer trigger the stock-analysis template (Current Levels / Bull Case / Verdict for the chart symbol you happen to have open). Concept questions get a focused concept answer, no chart-context noise
- Buy Signals — Day N badge on every signal. A color-coded pill next to each ticker shows which day the signal is on its run. Day 1-3 is green (fresh, still close to entry), Day 4-6 is amber (caution, watch for the setup to lose strength), Day 7+ is grey (aged, price may have already extended). Click the badge for a popup with the first-appeared date and a freshness hint
- Buy Signals — triggered-at price line. Under each signal you'll now see "Triggered at $42.10 · now $39.80 (-5.5%) — pulled back". Color-coded green if up, red if down, with a "still near entry" / "extended" / "pulled back" label so you instantly know whether the setup is fresh or has already moved. Backed by a new
firstAppearedPrice field stored per signal in our cache
- Buy Signals — "Stale" flag with auto-dim. Signals that are 7+ days old AND have moved more than 5% from the original trigger get a ⚠ Stale badge, and the entire card drops to 65% opacity so it's naturally easier to skip when scanning the panel. The original setup is no longer the same trade once price has run that far
- Buy Signals — strategy summary at the top. A small banner now shows the exit rules: +10% TP · -5% SL · 28d max hold. No more guessing what the system is targeting, or wondering why a signal stayed on the list after a normal pullback (because the stop is 5% below entry — pullbacks within that range are part of the strategy)
- Buy Signals — onboarding preview alignment. The post-onboarding "Active Signals" first-screen now uses the same Day N terminology as the main panel for consistency. New users see the same vocabulary everywhere
- Recents — "Recents" section at the top of search. A gold ⏱ pill marks each entry. Capped at 20, deduped (viewing the same symbol again moves it to the top, doesn't duplicate). Replaces the old default list of S&P 500 / crypto / ETF bellwethers when you have any history
- Recents — cross-device sync. Your recents are stored under
users/{uid}/settings/preferences.recentSymbols in Firestore, so the same list shows up on every device you sign into. Sign in on a new browser and your full recents list appears as soon as the Firestore fetch completes
- Recents — instant render via localStorage. The cached list shows immediately when you open search, so there's no delay waiting for the network. Firestore fetch happens once per session in the background and only re-renders the dropdown if the merged list actually changed (no flickering)
- Recents — tracks every symbol switch. Whether you typed it in search, clicked a watchlist symbol, opened it from AI Buy Signals, jumped to it from a chat reference, or loaded it via replay — it gets pushed onto the recents list automatically
April 27, 2026
Custom Timeframes
Feature
Premium
Chart any interval you want — not just the presets. A new "+" button on the timeframe selector lets you pick "every N minutes / hours / days / weeks", so 2h, 45m, 3h, 8h, 2d are all one click away. Bars are aggregated client-side from the closest base interval, so OHLC and volume stay accurate at any custom bucket size.
- "+" button on every chart's timeframe selector — appears in both the floating selector and the docked header selector. Click it to open a small popover, pick the interval (every N), pick the unit (minutes / hours / days / weeks), hit Apply
- Smart base-interval selection — under the hood, the platform fetches the largest available base TF that evenly divides your custom interval (e.g. 2h is built from 1h bars, 45m is built from 5m bars, 12h is built from 4h bars), then aggregates them into your chosen bucket size with proper open/high/low/close/volume rollup
- UTC-anchored buckets — your custom timeframe always lines up to consistent boundaries regardless of which range is loaded, so the same 2h chart renders identically every time
- Indicators, drawings, alerts and replay all work — once a custom timeframe is active it behaves like any other interval. Indicators recalculate on the aggregated bars, drawings stay anchored, and bar replay walks through the custom buckets
- History caveat — fine intraday customs (anything from 2m up to 45m) inherit the data provider's short intraday history window. The picker surfaces this in a small note so you know what you're getting
- Premium feature — free users see the picker and value prop, but Apply is gated. Upgrade to unlock arbitrary intervals on top of the built-in presets
April 26, 2026
AI Custom Indicators Overhaul & New Platform Walkthrough Guide
Feature
Enhancement
Bug Fix
Major upgrade to the AI Custom Indicator builder — "highlight every candle where..." style requests now draw arrows directly on the candles instead of an ugly 0/1 step line, multiple indicators can be combined into a single composite line ("blend RSI and ADX into one momentum reading"), and price-level indicators (previous-day highs/lows, support/resistance, fib retracements, VWAP, pivots) are now correctly placed on the price chart instead of getting shoved into a sub-pane. Plus a brand-new Platform Walkthrough Guide that visually tours every button on the platform.
- New: Platform Walkthrough Guide — a complete visual tour of every button on the platform. Top bar (Search, Chart Type, Timeframes, Replay, Watchlist, Multi-Chart, Save Layouts, Indicators, Multi-Window), side bar (Watchlist, CL Score, Detailed Information modal, Alerts, Stock Screener, AI Assistant, Hedge Fund Holdings), plus a full deep-dive on the AI Assistant covering preset queries, plain-English backtesting, custom indicators, support/resistance drawing, screenshot analysis, premium live news, and "save as alert". 27 annotated screenshots with click-to-zoom previews. Pinned to the top of the blog index along with the existing How to Use ChartingLens workflow guide
- "Highlight" indicators draw arrows on candles — ask for "an indicator that highlights every candle where volume is more than 3x the 20-day average" and you get gold up-arrows below each qualifying candle, not a 0/1 step line. Works for any condition: RSI overbought bars, gap-up days, inside bars, big momentum candles, etc. The AI knows to use markers for per-candle conditions and continuous lines for continuous values
- Composite indicators in a single line — "make a momentum indicator that combines RSI and ADX into one line" now produces ONE composite line (with each component normalized and weighted), not two separate panes. Same for "blend X and Y", "fuse X and Y", "weighted average of X and Y"
- Smart pane auto-detection for price levels — "draw the previous day's high and low", "plot psychological round-number levels", "show me Fib retracements from the recent swing", "give me support and resistance" all now correctly draw on the price chart. Previously these would get pushed into a separate sub-pane because the placement logic mistook the letter "d" in "day" for the stochastic %D oscillator. Now uses token-based matching with an expanded keyword list covering MAs, bands, channels, pivots, prev-day levels (PDH/PDL), VWAP/aVWAP, fib levels, supertrend, ichimoku, parabolic SAR, and more
- Markers and zones refresh on symbol/timeframe change — previously, custom-indicator arrows stayed pinned to the previous symbol's candle times when you switched tickers, leaving ghost arrows scattered randomly across the new chart. Now they re-execute against the current chart's data and appear at the right candles
- "Yes" replies to indicator suggestions now work — if the AI replied "I can create a custom indicator that plots these levels — would you like me to?" and you said "yes", the platform used to lose the context and produce a wrong-format code dump with no Add Indicator button. The follow-up router now detects offers in the previous response and routes affirmative replies to the indicator code-gen path
- Better natural-language detection — "build me an indicator that...", "make a momentum indicator that...", "highlight every candle...", "color the bars when..." now reliably trigger the indicator builder. The old keyword list was rigid (it had "build an indicator" but not "build me an indicator")
- ADX in the indicator function library —
ta.adx(high, low, close, period) now returns { plusDI, minusDI, adx } (Wilder's smoothing). The AI was hallucinating this function before; now it actually exists
- Bug fix: removing one of two custom price-chart indicators no longer wipes the other's legend — the rehome routine was unnecessarily tearing down both legends after pane-0 removals
- Bug fix: hovering over the × button on a custom indicator's legend no longer flickers in and out — the legend's hover flag wasn't being set, so the chart's no-point handler kept clearing values, shrinking the entry, and bouncing the × in and out from under the cursor
- Bug fix: marker-only and box-only indicators (e.g. high-volume highlighter, FVG detector) now get a legend entry with a delete button, so you can actually remove them. Previously they had no UI and got "stuck on the chart forever"
- Onboarding refresh — new signups now see the Platform Walkthrough as their first read instead of the workflow guide. The walkthrough teaches the layout first; the workflow guide (now linked from the walkthrough's closing CTA) becomes the natural follow-up read
April 24, 2026
Real-time Forex & Spot Precious Metals
Feature
Spot gold, silver, platinum, palladium and 40+ currency pairs are now charted in real time. Search "XAU" for gold, "EUR" for euro pairs, or any forex symbol — charts load with up to 20 years of history and update on the same live cadence as crypto and futures (no 15-minute delay). The forex market runs 24/5, so your charts stay fresh through the overnight session while US stocks sleep.
- 40+ currency pairs — all the majors (EUR/USD, GBP/USD, USD/JPY, AUD/USD, USD/CAD, USD/CHF, NZD/USD), all the common crosses (EUR/GBP, EUR/JPY, GBP/JPY, AUD/JPY, EUR/AUD, GBP/AUD, and more), plus emerging-market exotics (USD/MXN, USD/ZAR, USD/TRY, USD/SGD, USD/HKD, USD/CNH, USD/SEK, USD/NOK, USD/DKK)
- Spot precious metals — XAU/USD (gold), XAG/USD (silver), XPT/USD (platinum), XPD/USD (palladium), all priced per troy ounce. Traded on the spot market, not via futures contracts, so no expiry roll or contract specs to worry about
- Up to 20 years of history — daily candles back to 2003 on majors and 2006 on metals, with 1-minute resolution back to 2010 and tighter resolutions for recent windows. All timeframes supported (1m through monthly)
- Live prices, not delayed — the price header and the chart's current candle update every 3–15 seconds depending on other market hours, instead of the 15-minute delay common to retail forex feeds. Previous close and intraday change are calculated from the actual daily boundary
- Smarter refresh cadence — since forex trades 24/5, charts now keep polling on the "always-live" cadence during overnight hours too, matching how crypto and futures already behaved. You won't come back to a stale chart Monday morning
- Symbol search — type "XAU" or "gold" for gold, "EUR" for every euro pair, "JPY" for every yen cross, etc. Forex results show up under a new "Forex" category so they're easy to filter
April 23, 2026
Extended Hours on Intraday Charts
Feature
Pre-market and after-hours price history now render on intraday charts for US equities. Toggle it on from the chart's scale settings menu (bottom-right) and extended-hours candles get a light blue background tint so you can tell them apart from the regular session at a glance.
- “Show extended hours” toggle — new checkbox in the chart's price-scale settings popup (the same menu that holds Logarithmic). The setting persists across page refreshes and stays on when you switch timeframes or symbols, so you set it once
- Pre-market & after-hours candles on intraday intervals — 1m, 5m, 15m, 30m, and 1h charts now include the pre-market session (4:00–9:30 AM ET) and the after-hours session (4:00–8:00 PM ET). Daily and higher timeframes are unchanged
- Blue background band for extended hours — a subtle blue tint is drawn behind every pre- and post-market candle, via a custom chart primitive that scales correctly when you zoom or pan, so you can tell at a glance where the regular session starts and ends
- Note: extended-hours bars show price action but no reported volume — that's a limitation of the free market-data feed, not the chart. Volume-based studies (VWAP, volume profile, OBV) will therefore show a flat line through pre- and post-market periods
April 18, 2026
Stock Screener Overhaul, Drawing Text Labels & Feature Renames
Feature
Enhancement
Bug Fix
Major Stock Screener upgrade with 8 new technical filters, a Reset button, full filter persistence across refresh, and a detailed explainer for two-timeframe mode. Line drawings (trendlines, horizontal, vertical, ray) now support text labels that render along the line. Drawing settings modals get explicit Apply / Cancel buttons. Tabs renamed for clarity across the app, feature pages, and blog.
- 8 new Stock Screener technical filters — Moving Average Cross (Golden/Death Cross on 50/200 SMA, 9/21 EMA, 20/50 SMA + just-crossed variants), Price vs Moving Average (above/below/just crossed 20/50/200 SMA), 52-Week High/Low (at, near, just broke), Bollinger Bands (at upper, at lower, crossing, squeeze), Volume Surge (1.5×/2×/3× 20-bar average), Gap Up/Down (2% / 5%), ATR Volatility (low/normal/high/very high), and Price Change (up/down % over N bars). All formulas match the native chart indicators — Wilder's ATR, SMA-seeded Yahoo-style EMA, population-variance Bollinger Bands — so screener results don't contradict what you see on the chart
- Filter persistence — every Stock Screener filter (single + dual-timeframe mode, sort field, expanded sections) now survives a page refresh, the same way saved chart layouts do. Stored per-browser in localStorage
- Reset button — new "Reset" button in the Stock Screener action bar (and sidebar) instantly clears every filter back to its default (Any for dropdowns, empty for ranges)
- Two-timeframe mode explainer — toggling to the 2-timeframe view now reveals a detailed banner explaining the AND-logic with three worked examples (pullback in an uptrend, breakout confirmation, trend + momentum trigger) so it's clear what setups the mode is looking for
- Text labels on line drawings — trendlines, horizontal lines, horizontal rays, and vertical lines now have a "Text" field in the settings modal. Text renders along the line — rotated to match trendline slope, centered above horizontals, sideways along verticals — and persists across refresh
- Apply / Cancel in drawing settings — every drawing's settings modal now has explicit Apply and Cancel buttons. Cancel reverts every change made in the session in one click; Apply closes with changes kept. The X button and backdrop click behave like Cancel (standard modal convention)
- Feature renames for clarity — "AI Assistant" is now "AI Chat", "SuperInvestors" is now "Hedge Fund Holdings", and the Screener is now "Stock Screener" throughout the app, feature pages, and all blog posts
- Bug fix: trendline text now updates on the chart instantly instead of only after refresh (the chart API's
updateTrendline was silently dropping the new text option through a hardcoded property filter)
- Bug fix: Hedge Fund Holdings panel no longer shows "Report: undefined" next to the filed date
April 15, 2026
Market Sentiment Summary — CNN Fear & Greed on the Landing Page
Feature
Added a Sentiment Summary panel to the top of the Market Summary section for logged-in users. A CNN-style Fear & Greed dial shows the overall 0–100 score, the six underlying sub-indicators appear as 2-per-row mini-charts with rating badges and sparklines, and a new "What do these mean?" modal walks through every indicator with the numeric thresholds that separate bullish from bearish readings.
- Five-zone sentiment dial — semicircle broken into Extreme Fear / Fear / Neutral / Greed / Extreme Greed arcs, active zone highlighted, needle and marker dot at the current score, zone labels around the rim, big score and rating rendered under the arc
- Six sub-indicators in a 2-per-row grid — Market Momentum, Stock Price Strength, Stock Price Breadth, Put / Call Options, Market Volatility, Safe Haven Demand. Each tile has a label, color-coded rating badge, sparkline of the last ~60 days, and current score
- “What do these mean?” explainer modal — plain-language description of the overall index and every sub-indicator, each paired with a "How to read the number" panel that spells out the specific thresholds (e.g. P/C ratio above 1.0 is bearish / below ~0.7 is bullish, VIX above 25–30 is fear / below 15 is greed, overall index bands 0–24 / 25–44 / 45–55 / 56–75 / 76–100)
- History column next to the dial — Previous close, 1 week ago, 1 month ago, and 1 year ago, each shown as label + rating word + colored score circle. Matches the side-panel layout on CNN's own Fear & Greed page
- New Cloudflare Worker (
tradinglens-sentiment) proxies CNN's dataviz endpoint server-side, injects a browser User-Agent, trims the payload to the last ~60 daily points per indicator, and serves it through a 15-minute edge cache so we make at most one upstream request per quarter-hour globally
- Card fails closed — hidden until real data lands, so a worker outage never shows a broken shell
- Responsive layout — dial + history stack vertically under 1024px, sub-indicator grid collapses to a single column on mobile
April 15, 2026
Alerts System Overhaul — Unified Modal, Smart Indicator Detection & Chart-Parity Math
Feature
Enhancement
Bug Fix
The entire alerts system has been rewritten. A single unified modal now handles Price, Indicator, and Strategy alerts with a cleaner Condition / Trigger / Notify layout. Added per-alert trigger modes, evaluation modes, collapsible strategy summaries, and smart indicator detection that auto-adds missing chart indicators for the selected strategy. Worker-side indicator math now matches the chart exactly, with a richer diagnostic endpoint for end-to-end testing.
- Unified alert modal — Price, Indicator, and Strategy all in one form, organized into Condition / Trigger / Notify sections with per-alert options
- Trigger mode — choose "Only once" (one-shot) or "Every time" (re-fire on every new crossing/state change). Each alert can be independently one-shot or continuous
- Evaluation mode — new per-alert toggle between "Candle close" (wait for bar to close) and "Current price" (fire on live intra-bar crossings). Hidden for alerts where it doesn't apply
- Per-alert notifications — independent on-screen, sound, email (Premium), and webhook (coming soon) toggles on every alert
- Alert expiration — optional 1 day / 1 week / 1 month auto-expiry so old alerts don't linger
- Custom alert messages — optional free-text field included in the notification when the alert fires
- Collapsible "About this strategy" summary — every preset strategy now has a plain-English explanation with exact buy/sell conditions, expandable in one click
- Smart indicator detection — when you pick a strategy, the modal checks your chart and shows an "Add strategy indicators to chart" button only if something's missing (e.g. Golden Cross without 50 SMA + 200 SMA). Button adds only what's missing and hides once everything is present
- AI Chat → unified modal — "Get Buy/Sell Alerts" from a backtest now opens the unified modal pre-filled with the strategy. Prefix-based preset matching means name-variant mismatches no longer fall through to "custom strategy" errors
- Moving Average alert condition — "TSMA / Price Cross" renamed to "Moving Average / Price Cross" with an SMA/EMA/TSMA submenu; legacy TSMA alerts keep working
- Continuous indicator alerts now fire on transition only — no more spam every tick while a condition stays met. Mirrors strategy-alert dedup exactly
- Native indicator routing — AI Chat presets for RSI, MACD, Bollinger Bands, Stochastic, ATR, ADX, SuperTrend, SMA, and EMA now apply the real native chart indicators with settings gears (no PineTS execution)
- New SuperTrend AI preset — "add supertrend" applies the native Supertrend(10, 3) indicator
- Chart-math parity for alerts — worker MACD now uses SMA-seeded Yahoo-style EMA to match what the chart renders. RSI rounds to 2 decimals with explicit zero-loss handling. Strategy and indicator alerts now evaluate on the exact values users see on their charts
- Worker diagnostics endpoint —
/status?userId=<id> targets a specific user. New computedValues and indicatorAlerts sections expose live SMA50/SMA200/MACD/RSI/Stoch/ADX/TSMA/MA values so you can verify alerts will fire correctly without waiting for a crossing
- Pause all email alerts — account settings toggle renamed and refocused as a single kill-switch (vacation mode). Uses new
pauseEmailAlerts field; defaults to off so existing users aren't accidentally paused
- Bug fix: MA indicator settings modal no longer shows the wrong indicator's state when multiple SMAs share a pane (legendId-aware lookup)
- Bug fix: toggling "Show Y-Axis Price Label" no longer resets period/color on MA and BB indicators (full params merge)
- Bug fix: Golden Cross strategy no longer reports "need more data" on symbols with years of history (correct range map)
- Bug fix: AI Chat indicator additions (RSI, MACD, ADX, Stochastic, ATR, SuperTrend) now persist through refresh and logout — previously silently lost
- Bug fix: continuous indicator alerts with multi-condition AND logic now dedupe at the alert level, preventing compound-condition spam
April 12, 2026
WaveTrend Oscillator, Indicator Limits Enforced, Layout Management & Mobile Backtest Fixes
Feature
Enhancement
Bug Fix
New native WaveTrend Oscillator matching LazyBear's popular version. Free-tier indicator and chart layout limits now properly enforced across all paths. Edit and delete saved layouts. Mobile backtest buttons fixed.
- New native WaveTrend Oscillator indicator — LazyBear formula with WT1 (green) and WT2 (red dotted) lines, area-fill histogram, overbought/oversold levels at ±60 and ±53, zero line, and crossover signal circles
- WaveTrend settings modal with Channel Length, Average Length, line colors, and toggles for crossover signals and histogram trendlines
- Histogram trendlines connect the last 2 significant peaks (red) and troughs (green) to reveal divergence patterns
- WaveTrend available as an AI Chat preset — say "add wavetrend" to apply the native indicator with zero API credits
- Free-tier indicator limit (3 max) now counts both native and AI indicators combined — previously AI indicators bypassed the limit entirely
- Indicator limit enforced on page load, layout restore, and mid-session downgrade — excess indicators trimmed automatically with a notification
- AI batch indicator requests blocked if they would exceed the free limit
- Free-tier single-chart layout enforced on layout restore, named layout load, and subscription downgrade
- Added "Edit Layouts" button to the saved layouts dropdown with delete functionality
- Backtest results buttons stack vertically on mobile with larger tap targets
- Fixed: Add Indicator modal checkbox crash, AI profile dropdown Firestore read, model selector polling, StreakManager loadSubscription crash
April 11, 2026
Reworked Login & Subscription System
Enhancement
Security
Completely reworked the authentication and subscription system so your premium status is always recognized instantly on page load — no more delays or needing to refresh after subscribing.
- Premium status is now recognized instantly on every page load — no more brief "free user" flash on refresh
- Subscribing or canceling takes effect immediately in your browser without needing to refresh
- After completing checkout, premium features unlock within seconds of returning to the app
- Improved payment webhook security to prevent unauthorized access
- Faster app startup — your subscription status is cached locally for instant loading
April 9, 2026
AI Chat Upgrade — Smarter Answers, Live Web Search & Improved Support/Resistance
Feature
Enhancement
Major AI Chat intelligence upgrade. The Premium AI assistant now searches the web in real-time for news, earnings, and market-related questions — delivering significantly more accurate and up-to-date answers. Support & Resistance level detection has been completely rebuilt with advanced algorithms for higher-quality levels.
- AI Live Web Search (Premium) — the Premium AI assistant now searches the internet in real-time when answering questions about news, earnings, analyst ratings, market events, and stock-specific opinions like “Is AAPL a buy?”. Delivers current, sourced answers instead of relying solely on historical data
- Upgraded AI Intelligence — significantly improved AI response quality, better reasoning, and more accurate technical analysis across the entire platform
- Support & Resistance Overhaul — S/R detection now uses multi-pass swing analysis across 4 lookback periods, volume-weighted price zone clustering, touch-count scoring, Fibonacci retracements, VWAP, and psychological round-number levels. Produces 6–12 high-quality levels per query instead of 2–6
- Confluence Detection — levels where multiple methods converge (e.g. Fibonacci near a high-volume swing cluster near a round number) are identified as confluence zones — the strongest possible S/R levels
- S/R Level Strength Indicators — drawn levels now visually indicate their strength: solid lines for strong levels, dashed for moderate, and dotted for weaker levels
- Smarter S/R Labels — chart labels are now concise (3–4 words max) to prevent clutter when zoomed out, with full explanations in the chat response. Labels are also referenced in the chat text so you can match explanations to chart lines
- S/R Label Correction — support levels can no longer be mislabeled above the current price (and vice versa) — all levels are validated against the current price before drawing
- Y-Axis Price Label Toggle — every indicator now has a “Show Y-Axis Price Label” toggle in its settings panel. Labels are hidden by default for a cleaner chart, and the setting persists across page refreshes
- Drawing Tool Sidebar Toggle — clicking a drawing tool’s expand arrow now properly toggles the options panel open/closed instead of always re-opening it
April 8, 2026
Timeframe Selector Modes, Indicator Legend Sync & Price Scale Title Updates
Feature
Enhancement
Bug Fix
The timeframe selector can now be docked to the header bar, floated on the chart, or hidden entirely — with full multi-chart support. Indicator period changes now correctly update the Y-axis price scale label. Multiple bug fixes for indicator legend updates.
- Timeframe Selector Modes — right-click the timeframe selector or click the new clock icon in the header to cycle between three modes: Float on Chart (draggable, current behavior), Dock to Header (inline buttons in the top bar), and Hide (completely hidden). Mode persists across page reloads
- Multi-Chart Timeframe Docking — in multi-chart layouts, docked timeframe buttons control whichever chart is currently selected. A "C1"/"C2"/"C3" label shows which chart is active. Switching charts instantly updates the highlighted timeframe button
- Global Timeframe Mode — the selected mode (float/dock/hide) applies to all charts at once. Switching to hidden or docked hides all floating selectors across every chart pane
- Price Scale Title Sync — changing an indicator's period from the legend settings now updates the label on the Y-axis price scale (e.g. "TSMA(100)" → "TSMA(110)"), not just the legend text
- ATR & Supertrend Legend Fix — fixed a bug where changing ATR or Supertrend period from settings would fail to update the legend name due to an undefined variable reference
- Legend Element Lookup Fix — indicator legend updates now correctly find the right DOM element by ID instead of falling back to the first entry in the pane
April 6, 2026
Callout Drawing Tool, Double Top/Bottom Patterns, Indicator Color Pickers & AI Chat Quick Actions
Feature
Enhancement
Bug Fix
New callout drawing tool, Double Top & Double Bottom pattern detection in Auto Chart Patterns, full color customization for all indicators, AI chat quick actions for faster onboarding, 8 new superinvestors, and dozens of bug fixes.
- AI Chat Quick Actions — clickable quick action buttons inside the AI welcome message organized by category: General (S/R levels, buy analysis, full TA, news), Backtesting (golden cross, RSI mean reversion), and Indicators (Bollinger Bands, MACD). Screenshot and AI Signals buttons are now clickable directly from the welcome message
- AI Color Requests — ask the AI to apply indicators in specific colors (e.g. "Apply 20 SMA, make it red") — supports 30+ named colors and hex codes
- AI Preset Period Detection — SMA and EMA presets now extract the period from your message ("50 SMA", "200 EMA") instead of always defaulting to 20
- Indicator Color Pickers — every native indicator settings modal now includes a color picker with 12 preset swatches and a full custom color wheel
- Per-Line Color Settings — RSI (line, overbought, oversold), MACD (MACD line, signal, histogram), ADX (ADX, +DI, -DI), and Stochastic (%K, %D) each have individual color pickers for every sub-line
- Moving Average Source & Color — add MAs with custom source (Close/Open/High/Low) and custom color from the initial dialog and settings modal
- Indicator Colors Persist — all custom indicator colors now save to Firestore and restore correctly on page refresh
- Callout Drawing Tool — new callout: solid colored bubble with text and a triangular pointer anchored to the chart. Supports drag to move bubble, drag anchor dot independently, corner resize, double-click to edit text, and bubble/text color settings
- Callout Persistence — callouts save to Firestore and restore across page refreshes and symbol changes
- Double Top & Double Bottom Detection — new pattern type in Auto Chart Patterns. Strict detection: requires prior trend, two peaks/troughs at similar levels, neckline break confirmation, and volume analysis. Draws M-shape (top) or W-shape (bottom) with dashed neckline and labeled callout
- Auto Chart Pattern Settings — gear icon on the Auto Patterns legend opens a settings modal showing all detectable pattern types (Triangles, Wedges, Flags, Pennants, Channels, S/R, Double Top, Double Bottom, Breakouts) with toggles to enable/disable each. Settings persist across timeframe and symbol changes
- Auto Chart Pattern Callout Labels — every detected pattern now has a locked, non-interactive callout label showing the pattern name, positioned at the pattern's end point
- Locked Drawing Support — drawings with the locked flag are now skipped in hit-testing across ALL drawing types (trendlines, horizontal/vertical lines, arrows, rectangles, rays, parallel channels, callouts)
- 8 New Hedge Fund Managers — Stanley Druckenmiller, Ken Griffin, Steve Cohen, Howard Marks, Carl Icahn, Mohnish Pabrai, Li Lu, and Terry Smith added with verified SEC EDGAR CIK numbers
- Bollinger Bands & Stochastic Presets Fixed — AI preset indicators for Bollinger Bands and Stochastic now use the correct function names (ta.bbands, ta.stoch)
- "Apply" Keyword Detection — "Apply 20 SMA on the chart" now correctly triggers indicator mode instead of returning generic instructions
- Quick Actions "NEW" Badge Removed — cleaner look for the Quick Actions button in the AI sidebar
April 5, 2026
AI Chat Overhaul, Indicator Source Settings & Feedback Buttons
Feature
Enhancement
Bug Fix
Major AI Chat improvements — the assistant now knows ChartingLens features accurately and will never make up settings or UI elements that don't exist. Custom indicators now properly handle price source requests (SMA from high, EMA from low, etc.) and multiple indicators in a single request (e.g. "add 9, 21, and 50 EMA"). New indicator settings modal includes Type (SMA/EMA/WMA/TSMA), Period, and Source (Close/High/Low/Open) dropdowns. Thumbs up/down feedback buttons added below every AI indicator and backtest result. New affiliate program with custom referral codes — creators and traders can sign up as affiliates and earn commissions on referrals.
- AI Chat no longer hallucinates features — updated platform knowledge prevents the AI from describing settings, menus, or UI elements that don't exist in ChartingLens
- Custom indicators now respect price source requests — "SMA from high", "EMA from low", "moving average of opens" all generate correct code using the specified source
- Multiple indicators in one request — "add 9, 21, and 50 EMA" now generates all three as separate lines on the chart instead of just one
- New Source dropdown in MA indicator settings — change between Close, High, Low, and Open directly from the settings gear, no need to re-ask the AI
- New Type dropdown in MA indicator settings — switch between SMA, EMA, WMA, and TSMA (Time Series Moving Average) without removing and re-adding the indicator
- Thumbs up/down feedback buttons on every AI indicator and backtest result — thumbs down sends the user's prompt and AI response to support for review
- Dedicated AI feedback email template — separate from user feedback, includes user prompt, AI response excerpt, symbol, and user info
- Preset SMA/EMA/HMA indicators now correctly fall through to the AI for non-standard requests (custom sources, multiple periods) instead of returning default period-20 from close
- Indicator request detection expanded — "can you make", "can you create", "can you build" and price-source patterns now properly trigger custom indicator generation
- New affiliate program — creators and traders can sign up as affiliates with custom referral codes and earn commissions on every referred subscription
April 2, 2026
New Landing Page, Redesigned UI Across All Pages & Live Ticker Strip
Design
Enhancement
Complete landing page redesign with a new premium look and feel. New features include a live scrolling ticker strip with real-time stock and crypto prices, a split hero layout with embedded demo video, animated stat counters, a "How It Works" walkthrough section, and a trader testimonials section. Refreshed color scheme and typography (Playfair Display + Outfit) applied consistently across all pages — Features, Blog, Markets, Compare, FAQ, Pricing, Contact, and more. Stock pages now support 1D and 1W chart ranges powered by intraday data for more detailed price action. All feature pages updated with clean SVG icons replacing emojis. Market summary and ticker strip now show accurate daily change data.
April 1, 2026
AI Indicator Settings, Preset Indicators, Legend Improvements & More
Feature
Enhancement
Bug Fix
AI-applied indicators now display their parameters in the pane legend with a settings gear to modify them on the fly. 7 new instant indicator presets save API credits. Indicator-only legends are cleaner — no more "Strategy" header on the price chart. AI pane indicators fixed to always use normal (non-logarithmic) scale.
- AI indicator legends now show lookback periods and settings (RSI(14), SMA(50), EMA(20), ATR(14), HMA(20), etc.) instead of raw variable names
- Settings gear icon (⚙️) on AI indicator legends — click to modify periods for RSI, SMA, EMA, WMA, HMA, ATR, MACD, Stochastic, and Bollinger Bands
- MACD, Stochastic, and Bollinger Bands now have full multi-parameter settings modals (e.g., MACD: Fast, Slow, Signal periods)
- Settings modal with current parameter values, min/max validation, and one-click Apply that instantly re-executes the indicator
- Parameter changes persist in the legend — changing RSI from 14 to 20 updates the label to RSI(20) and recalculates
- 7 new instant indicator presets (zero API credits): RSI, MACD, Bollinger Bands, Stochastic, ATR, SMA, and EMA — all available via Quick Actions
- Indicator presets now match on just the indicator name — "rsi", "macd", "add RSI to chart", "show bollinger bands" all work without needing specific phrasing
- Indicator-only legends no longer show a "Strategy" or "Indicator" header on the price chart — the delete (✕) button is now on the indicator's own legend entry in the pane
- Fixed: AI pane indicators (RSI, MACD, Stochastic, ATR, etc.) now always render in normal scale even when the price chart is in logarithmic mode
- Fixed: EMA Spread Histogram now renders as histogram bars instead of a line
- Fixed: Hull Moving Average preset now matches "Hull Moving Average" phrasing (was failing on "Moving Average" detection)
- Improved symbol search — "No results found" now explains which markets are covered (US stocks, crypto, forex, ETFs) and notes that broker-specific instruments like Deriv synthetics are not available
- Multiple simultaneous AI indicators — apply as many indicators as you want at the same time (RSI + MACD + Bollinger Bands, etc.). Backtests remain single-apply. Indicators and backtests no longer interfere with each other
- Each AI indicator has its own independent toggle-off (✕), settings gear (⚙️), and legend — removing one doesn't affect the others
- Fixed pane legend alignment — legends are now attached inside their pane element, so they stay correctly positioned when multiple indicator panes are added or removed
March 31, 2026
Strategy Alerts, SMC Backtest, Locked AI Drawings, Free Tier Changes & More
Feature
Enhancement
Premium
Bug Fix
New Strategy Alerts turn any backtest into a live recurring alert with email notifications. SMC Fair Value Gap backtest preset, locked AI-drawn rectangles, smarter free tier limits, fixed mobile rendering, and reworked symbol detection.
- Strategy Alerts (Premium) — activate any preset backtest as a live recurring alert. The server checks every 5 minutes and sends email notifications when new buy or sell signals fire, even when your browser is closed
- Strategy Alerts support all 10+ preset strategies: Golden Cross, RSI Mean Reversion, MACD Crossover, 20-Day Breakout, Buy the Dip, SMC FVG Retest, Quarterly Rotation, Sell in May, January Effect, and Monday Effect
- Choose any timeframe for strategy alerts — 5 min, 15 min, 1 hour, daily, or weekly
- Recurring alerts — Golden Cross alerts fire on both the golden cross (buy) and death cross (sell). MACD alerts fire on both bullish and bearish crossovers. SMC FVG alerts fire on both bullish and bearish confirmed retests
- Strategy alert status visible in the alerts panel with live indicator values (e.g., current 50 SMA and 200 SMA values for Golden Cross alerts)
- New preset backtest: SMC Fair Value Gap Retest — detects bullish and bearish FVGs, enters on confirmed zone retests with 2:1 R:R, draws all FVG zones on chart. Available as a Quick Action
- FVG backtest filters for strong impulse candles only (1.5x average range), requires a candle to close inside the zone before entering on the next bar, and only holds one position at a time
- AI-drawn rectangles (FVGs, Order Blocks, Supply/Demand zones) are now locked — users cannot accidentally select, resize, drag, or delete them
- Fixed mobile rendering of AI-drawn rectangles — boxes now properly anchor to price and time coordinates when panning and zooming on mobile devices
- Free tier: AI-applied indicators, backtests, and S/R levels are now one-time apply — switching symbols clears them. Premium users retain persistent reapply across symbol changes
- Free tier: apply buttons now show premium upgrade modal on re-click after first use, instead of allowing unlimited re-runs
- Premium upgrade modal updated with full feature list (20 features listed including Strategy Alerts and Persistent AI Indicators)
- AI symbol detection completely reworked — no longer falsely detects common words as tickers. Use $SYMBOL syntax (e.g. $AAPL) to ask about a specific ticker not on your chart
- AI Chat welcome message and input placeholder updated to explain $SYMBOL syntax
- Onboarding tour updated: AI Chat step now explains core capabilities, new Quick Actions step opens the AI panel and highlights the Quick Actions button
- Onboarding Bar Replay step updated to mention simulated orders with stop losses and take profits, and random date selection
- Alert checker worker optimized — non-premium users removed from server registry to reduce Firestore reads. Crypto symbols now properly converted for OHLC data fetching. Direct Yahoo Finance API calls instead of worker-to-worker proxy
March 29, 2026
AI Chat Rework — Quick Actions, Preset Indicators & Smart Money Concepts
Feature
Enhancement
Major rework of the AI Chat chat with Quick Actions, preset backtests and indicators that run instantly without using AI credits, and full Smart Money Concepts support.
- New Quick Actions modal — browse and filter preset strategies and indicators by category (General, Backtesting, Indicators) with one-click execution
- 13 preset strategies and indicators that execute instantly without using AI credits — including Golden Cross, RSI Mean Reversion, MACD Crossover, 20-Day Breakout, Buy the Dip, and 4 time-based strategies
- Time-based backtest presets — Quarterly Rotation, Sell in May (Halloween Strategy), January Effect, and Monday Effect
- Smart Money Concepts (SMC) indicator — combines Order Blocks, Fair Value Gaps, and BOS/CHoCH signals in a single overlay
- Order Blocks indicator rewritten with ROC-based impulse detection at two sensitivity levels, matching professional-grade PineScript implementations
- Fair Value Gaps (FVG) indicator with DGT-style gap-on-gap filtering, middle candle close confirmation, and Wick Sweep fill method
- Supply & Demand Zones indicator rebuilt with pivot-based detection, ATR-sized zones, overlap prevention, and automatic break detection
- Market Structure indicator — pivot-based BOS/CHoCH detection with HH/HL/LH/LL pivot labels and horizontal trendlines connecting broken levels
- Break of Structure (BOS) indicator upgraded with pivot-based swing detection, trend tracking, CHoCH reversal signals, and trendline visualization
- Hull Moving Average and EMA Spread Histogram preset indicators
- AI Chat welcome message redesigned — explains backtesting, custom indicators, and S/R level capabilities in plain language
- Quick Actions button moved into the chat area with a NEW badge for discoverability
- All preset prompts also trigger when typed manually in chat — same keyword matching works for both quick actions and free-form input
March 26, 2026
Volume Profile (VRVP), Custom AI Indicators & Image Paste Overlay
Feature
Premium
Visible Range Volume Profile indicator, AI-powered custom indicator generation, and image paste overlay for visual pattern comparison.
- VRVP indicator auto-recalculates as you scroll and zoom — always reflects the visible chart range (Premium)
- Point of Control (POC) highlighted with a yellow dashed line at the highest-volume price level
- Value Area High and Low marked with blue dashed lines, encompassing 70% of total volume
- Fixed Range Volume Profile drawing tool — draw a diagonal selection to analyze volume within any custom time/price range
- Multi-chart support — add VRVP independently to each chart pane with per-chart visibility and deletion
- VP drawings and indicators persist across sessions via Firestore and restore on refresh
- Legend displays live POC, VAH, and VAL price levels with visibility toggle and delete controls
- Custom AI Indicators — ask the AI Chat for any indicator (Hull MA, DEMA, custom oscillators, etc.) and apply it directly to your chart with one click (Free)
- Ctrl+V to paste clipboard images directly onto any chart — automatically centered in the visible viewport with correct aspect ratio
- Drag to reposition images or resize from any corner handle
- Opacity slider in Image Settings lets you dial transparency for easy pattern-to-price comparison
- Images persist across sessions via Firestore with automatic JPEG compression to stay within storage limits
March 25, 2026
Layout Arrangements, Multi-Window Support & Draggable Replay Bar
Feature
Enhancement
Choose from 8 layout arrangements for multi-chart setups, pop out independent chart windows for multi-monitor workflows, and drag the replay control bar anywhere on the chart.
- 8 layout arrangements for multi-chart views: side-by-side, stacked, three columns, and 5 asymmetric grid options (Premium)
- Multi-window support — open independent chart windows for multi-monitor setups via the new window button in the toolbar (Premium)
- Bar replay control bar is now draggable — reposition it anywhere on the chart with mouse or touch
- Docked replay bar uses a compact 2-row layout on desktop, merging SL/TP into the trading row
- Timeframe selector automatically repositions when switching layout arrangements to stay visible
- Free tier updated to 1 chart layout; Premium unlocks up to 3 charts with all 8 arrangements
- Improved query detection for AI Chat questions to better identify what the user is querying about
March 22, 2026
Forex & Commodities Search, Equivolume Chart Type & Zoom to Selection
Feature
Expanded market coverage with forex pairs and commodity futures now searchable and browsable. Added a new Equivolume chart type and a zoom-to-selection drawing tool for precise chart navigation.
- Forex currency pairs (EUR/USD, GBP/USD, USD/JPY, and 20+ more) are now searchable and browsable in the symbol search with a dedicated Forex filter tab
- Commodity futures (Gold, Silver, Crude Oil, Natural Gas, Corn, Coffee, S&P/NASDAQ futures, and more) are now searchable and browsable with a dedicated Commodities filter tab
- Added Equivolume chart type — boxes span from high to low with no wicks, width proportional to volume, showing effort vs. result at a glance
- Added Zoom to Selection tool in the drawing toolbar — click and drag on the chart to highlight an area and zoom into it
- Zoom out button appears in the toolbar after zooming in, allowing you to reset back to the default view
- Zoom to Selection works with both mouse and touch for full mobile support
March 21, 2026
Replay Stop Loss & Take Profit, Date Picker, Random Date & Chart Skeleton Loader
Feature
Enhancement
Major replay simulator upgrades — set stop loss and take profit orders with live chart levels, pick a start date without seeing future candles, or jump to a random date for blind practice sessions. Plus a smoother initial loading experience.
- Added Stop Loss and Take Profit orders to the replay trading simulator — enter price levels that automatically close your position when hit
- SL/TP levels display as dashed price lines on the chart (red for stop loss, green for take profit) with axis labels
- SL/TP auto-trigger uses intrabar high/low detection for realistic fills at the exact SL/TP price, not bar close
- When both SL and TP are hit in the same bar, a proximity heuristic determines which triggered first
- SL/TP levels automatically clear when the position is closed (manually or by trigger)
- Trade log in the results modal now shows SL/TP badges on trades that were auto-closed by stop loss or take profit
- Added date picker to replay start screen — select a specific date to begin replay without seeing future candles on the chart
- Date picker is bounded to the available data range with min/max constraints and snaps to the nearest available bar
- Added "Random Date" button — instantly jump to a random point in the chart for blind practice sessions
- Random date selection skips the first 10% and last 20 bars to ensure enough history and room to play forward
- All three replay start methods (click chart, date picker, random) share a unified starting flow
- Added skeleton loading placeholder for charts — animated candlestick silhouettes with shimmer effect replace the flash of default data while saved layouts load
- Skeleton includes fake price scale, time axis, and staggered animation delays across 40 bars for a natural look
- Skeleton fades out smoothly with a 300ms animation once the user's actual chart data is rendered
March 20, 2026
Markets Page, Landing Page Search, Smart Pricing & Stock Page Auth
Feature
Enhancement
Introducing the new Markets overview page with live indices, crypto, commodities and currencies — plus a global search bar, personalized landing page for logged-in users, and smarter pricing visibility.
- Added new Markets page (/markets/) with world indices, commodities, crypto, and currency data — delayed quotes with 15-minute cache
- Inline sparkline charts on all market symbols showing 5-day price trends
- All symbols on the Markets page are clickable, linking directly to their /stocks/ detail pages
- Added search bar to the landing page navigation — search any stock, ETF, crypto, or index via Yahoo Finance autocomplete
- Search results show color-coded type badges (Stock, ETF, Crypto, Index) and navigate to /stocks/ pages on click
- Landing page now shows a live Market Summary widget (world indices, crypto, commodities, currencies) instead of the demo section when logged in
- Pricing section is automatically hidden on the landing page for active premium subscribers
- Stock pages now detect Firebase auth state — logged-in users see "Open in Charts" instead of signup CTAs
- "Open in Charts" loads the selected symbol directly onto chart index 0 without disrupting the saved multi-chart layout
- Updated stock page breadcrumb navigation from "Stocks" to "Markets" linking to the new Markets page
- Full SEO optimization on Markets page: meta tags, JSON-LD structured data, semantic HTML, noscript fallback, and sitemap entry
March 18, 2026
Time Series Moving Average, Cloud-Synced Scale Settings & Indicator Fixes
Feature
Enhancement
Bug Fix
Added the Time Series Moving Average (TSMA) indicator and chart scale settings now persist across sessions via cloud sync.
- Added Time Series Moving Average (TSMA) — a linear regression-based moving average that tracks price more closely than SMA or EMA with less lag
- Chart scale settings (Linear, Logarithmic, Percentage, Indexed) now save per-chart to your account via Firebase
- Scale settings persist across sessions and sync with your saved chart layout — e.g., Chart 1 on logarithmic and Chart 2 on linear will be remembered
- All scale options (auto scale, inverted scale, lock price-to-bar ratio) are also saved per chart
- Fixed indicators (MACD, RSI, ADX, Stochastic, OBV, ATR) displaying incorrectly when chart is in logarithmic/exponential scale mode
March 10, 2026
Paper Trading Simulator, Replay Offsets & SEO Overhaul
Feature
Enhancement
Practice trading risk-free with the new paper trading simulator in Bar Replay mode, jump to specific dates with replay offsets, and enjoy a refreshed stock pages experience with branded charts.
- Added Paper Trading Simulator to Bar Replay mode — place buy/sell orders during replay and track P&L in real time
- Performance stats summary shown after exiting replay: total trades, win rate, net P&L, largest win/loss, and more
- Added date offset controls to Bar Replay — jump to a specific date or skip forward/backward by customizable intervals
- Chart branding now shows the ChartingLens logo across all charts
- Added "Popular Stocks" quick-nav grid to all stock pages
- Redesigned stock page header with gradient card styling matching the landing page
- Fixed stock pages not loading correctly for certain symbols
- Fixed breadcrumb navigation layout issue on stock pages
March 5, 2026
Expanded Financials, Options Flow Tab & Trendline Precision
Feature
Bug Fix
Expanded the "Show More" panel with richer financial data, a brand-new Options Flow tab, and improved trendline accuracy across scale modes.
- Added more comprehensive financials data and metrics in the "Show More" section for each stock
- Added Options Flow as a new tab in "Show More" — view options activity broken down by expiration date, strike price, and put/call ratios
- Fixed trendline precision to be as accurate as possible when switching between normal and logarithmic scale
March 3, 2026
Drawing Tool Preview Fix on Zoom
Bug Fix
Fixed a bug where drawing tool previews (trendlines, fibonacci retracements, rectangles, arrows, date ranges, and price ranges) would not recalibrate their position when zooming in or out while mid-draw.
- Fixed trendline, fibonacci, rectangle, arrow, date range, and price range preview positions not updating when zooming while drawing
- Preview now correctly recalculates start and end coordinates from their stored time/price values on every render frame, matching the current zoom level
March 2, 2026
Price Scale Settings: Log, Percentage, Indexed & More
Feature
Full price scale customization with multiple scale modes, auto-fit toggle, invert scale, and lock price-to-bar ratio — accessible via a new settings gear button and right-click context menu on the price axis.
- Added settings gear button to the bottom-right corner of each chart pane for quick access to price scale options
- Added 4 price scale modes: Normal, Logarithmic, Percentage, and Indexed to 100
- Added Auto (fits data to screen) toggle — automatically adjusts the price scale to fit visible data
- Added Lock price to bar ratio — keeps the price/bar ratio fixed when resizing (mutually exclusive with Auto)
- Added Invert scale toggle — flips the price axis so uptrends display downward
- Right-click the price axis to access all scale options plus a Reset Price Scale action
- All price scale preferences persist per chart pane across sessions via localStorage
- Fixed multi-chart layout width calculation — charts no longer overflow when using 2 or 3 pane layouts
February 27, 2026
Stock Screener Rework, Pre/Post Market Data & Performance Optimizations
Feature
Bug Fix
Complete overhaul of the stock screener with server-side filtering, pre/post market price data throughout the app, and major performance improvements to reduce unnecessary API calls.
- Completely rebuilt the stock screener — now powered by Yahoo Finance's screener API with server-side filtering instead of a hardcoded stock list
- Added fundamental filters to the screener: Sector, Market Cap, P/E Ratio, EPS Growth, Dividend Yield, Beta, P/B Ratio, ROE, Debt/Equity, Profit Margin, PEG Ratio, and Average Volume
- Technical indicator filters (MACD, Stochastic, ADX) are now in a collapsible section — only fetches price data when needed
- Screener now returns unlimited results with automatic pagination
- Screener result cards now show sector badges and key metrics (P/E, EPS, Dividend Yield, Market Cap)
- Added sort dropdown for screener results: Market Cap, P/E, Dividend Yield, Price Change, and Volume
- Added pre-market and post-market price data to the header, sidebar info box, and watchlist items
- Added futures symbol support (ES=F, NQ=F, etc.) — futures charts stay live outside regular market hours
- Smart market hours detection — chart and price updates throttle automatically when the stock market is closed, reducing unnecessary API calls
- Added ticker info caching (5 min) and live price caching (30s) to avoid redundant API requests when switching between charts
- Fixed watchlist prices showing "-- --" when switching between watchlists
- Fixed "Show More" button showing data for the wrong symbol in multi-chart layout
- Fixed watchlist star button adding the wrong symbol in multi-chart layout
- Fixed watchlist failing to load when more than 20 symbols — now batches API requests automatically
February 25, 2026
Timeframe Optimization, Preset Strategies & Architecture Overhaul
Feature
Architecture
Major code refactor and architecture improvements alongside new backtesting features. Backtest any strategy across multiple timeframes to find the best-performing one, with AI-powered analysis.
- Major code refactor — improved architecture, code organization, and maintainability across the entire codebase
- Added "Find Best Timeframe" button to backtest results — automatically re-runs your strategy across 15m, 1h, 4h, and 1d timeframes, ranks by composite score (Sharpe, return, drawdown), and highlights the best performer
- Timeframe comparison results include a full comparison table with return, Sharpe ratio, win rate, max drawdown, and trade count for each timeframe
- AI-powered insight analyzes why the best timeframe outperformed and provides an actionable takeaway
- "Switch to Timeframe" button lets you instantly switch to the best-performing timeframe and re-apply the backtest
- Timeframe comparison results and AI insight are cached for 20 minutes to prevent redundant requests
- Added 4H timeframe to the timeframe selector for stocks and crypto
- Added two built-in preset backtest strategies (Golden Cross and RSI 30/70) — these load instantly with no AI API call required
- Custom backtest strategies are now a Premium feature — free users can use the two built-in presets
- Added feedback modal for users to submit feedback and suggestions
- Added notifications for new SEC filings in the Hedge Fund Holdings tab
- Fixed watchlist symbol click in multi-chart mode — now only switches the selected chart instead of all charts
February 22, 2026
Indicator Visibility Toggle & Legend Collapse
Feature
Temporarily hide and show indicators without removing them, and collapse the indicator legend panel to keep your chart clean.
- Added an eye icon to overlay indicator legends (MA, VWAP, SuperTrend, Bollinger Bands) to toggle visibility on/off without deleting
- Added an eye icon to the Auto Chart Patterns legend to hide/show detected pattern trendlines
- Hidden indicators dim their legend text and show dashes instead of values on crosshair hover
- Added a collapse/expand arrow below the indicator legends to hide or show the entire legend panel
- Fixed Auto Chart Patterns legend disappearing when deleting any other indicator
- Indicator hidden state is preserved when other indicators are added or removed
February 21, 2026
AI Chat Upgrades: Support/Resistance Drawing, Shorting Strategies & Smarter Backtesting
Feature
Major AI Chat improvements across the board. Support and resistance levels can now be drawn directly on the chart, backtesting now supports shorting strategies and time-based filters, and the assistant is smarter at understanding your requests.
- Right-click or press Escape during drawing mode to cancel and undo drawing mode
- Added clickable example prompts for backtesting strategies in the AI Chat sidebar
- AI Chat can now identify support and resistance levels and draw them directly on the chart with a "Draw Levels on Chart" button — support lines are green, resistance lines are red
- Support/resistance levels work cross-symbol — if you ask about a different ticker, the button automatically switches to that symbol before drawing
- Backtesting now supports shorting strategies (short/cover) and combined long+short strategies with proper entry/exit markers and P&L calculations
- Backtesting now handles time-based strategies — filter trades by quarter, month, day of week, or specific date ranges
- Intraday time-of-day filtering for backtests — specify trading windows like "only trade 9am–11am CST" with automatic timezone conversion
- AI Chat now uses fuzzy matching to detect typos and still understand your intent (e.g., "back tast" is recognized as "backtest")
- Fixed backtest stats showing 0 trades or undefined values when the AI miscalculates — platform now recomputes stats from actual signals as a safety net
- Fixed non-indicator arrays (like setup objects) being incorrectly plotted as oscillators on the chart
February 20, 2026
Drawing Tools Bug Fixes & Persistence Improvements
Bug Fix
Minor bug fixes to improve the charting experience. Drawing tools now behave more reliably across symbol switches, refreshes, and multi-chart layouts.
- Fixed crosshair getting stuck at the initial position when dragging drawings — it now follows the mouse during drag
- Fixed "Clear All Drawings" deleting drawings for the wrong symbol in multi-chart layouts
- Trendline "Extend to Left/Right" options now persist across page refreshes and symbol switches
- Only one drawing can be selected at a time — clicking a drawing now deselects all others
- Long/Short position box widths now use date-based sizing instead of index-based, so they stay consistent when zooming
- Position box widths are now preserved when switching symbols and refreshing the page
February 19, 2026
Trendline Context Menu, Extend to Infinity & Drawing Toolbar Improvements
Feature
Right-click any trendline to access a new context menu with extend and delete options. Trendlines can now extend to infinity like Thinkorswim. Added a quick way to clear all drawings and reorganized the magnet tool.
- New trendline right-click context menu with Delete Trendline, Extend to Left, and Extend to Right options
- Trendline extend to infinity — extend lines infinitely to the left, right, or both directions, with the state shown via checkmarks in the context menu
- Extended trendlines are fully interactive — hit testing works on the extended portions for selection and dragging
- Added "Clear All Drawings" option to the chart right-click context menu, which removes all drawings from the chart and deletes them from Firestore
- Moved the Magnet tool below the Measure tool in the drawing toolbar with a dedicated separator
- Magnet button now has a dropdown sidebar (matching the style of other grouped tools) to choose between Weak Magnet and Strong Magnet modes
February 17, 2026
Replay Mode, Keyboard Shortcuts & Bug Fixes
Update
New Replay mode for stepping through historical price action, keyboard shortcuts for undo/redo on drawings, and a batch of important bug fixes across indicator legends, VWAP, and chart layout.
- Added Replay mode for stepping through historical candles and simulating live price action
- Added keyboard shortcuts for undoing/redoing drawings, drags, and extensions
- Indicator legends are now transparent so they no longer block the chart behind them
- Legend values now clear when the crosshair leaves the chart instead of showing stale data
- Fixed legend flashing when hovering over settings/trash icons or indicator values
- Legend icons now appear before the subscription values so they stay in a fixed position
- Price info and indicator legends now stack dynamically in a single container — no more overlapping
- Fixed SuperTrend and VWAP deletion bugs where legends would reappear in the wrong pane or with incorrect names and colors
- Fixed crosshair subscription freezing after deleting an indicator while hovering over its legend
- Fixed VWAP on monthly timeframe causing candlesticks to space out by using wrong timeframe data
February 15, 2026
AI Strategy Backtester & Multi-Chart Bug Fixes
Feature
The AI Chat can now backtest trading strategies described in plain English. Simply describe your strategy and the AI will generate, execute, and visualize the results directly on your chart.
- New AI Strategy Backtester — describe a strategy like "Buy when RSI < 30, sell when RSI > 70 with a 5% stop loss" and see buy/sell signals plotted on the chart with full performance stats
- Backtest results panel shows key metrics: total return, win rate, profit factor, max drawdown, and more
- Fixed indicator restore bug where switching from 3 to 2 charts and refreshing would incorrectly copy all indicators from chart 1 to chart 2
- Fixed multi-chart layout restore to correctly preserve per-chart indicator configurations across sessions
- Various mobile UI improvements for indicator legends and backtest results panel
February 14, 2026
Multi-Chart Layouts, New Chart Types & Persistent Workspaces
Feature
Major update to chart layouts and workspace persistence. Multi-chart layouts now support fully independent chart instances, new chart types have been added, and your entire workspace is saved and restored across sessions.
- Multi-chart layout now supports separate independent chart instances — watch different symbols, timeframes, and chart types on each pane
- Added new chart types: Bar, Heikin Ashi, Line, Area, and Baseline in addition to Candlestick
- Full chart layout persistence — number of panes, per-chart symbols, timeframes, chart types, and indicators are saved to the cloud and restored on login across devices
- Per-chart indicator management — add or remove indicators on individual charts independently
- Drawings now save and restore correctly on all charts, not just the primary chart
- Drawings made on any chart pane now save under the correct symbol
- Click any chart pane to select it and change the symbol for that specific chart
- Auto Chart Pattern recognition has been updated and is now a toggleable indicator that can be easily added and removed
- Various UI improvements and polish
February 7, 2026
New Timeframes & Trendline Precision
Feature
Added 15-minute and 30-minute timeframe options, extended intraday data ranges, and improved trendline rendering precision across timeframes.
- Added 15-minute timeframe option with up to 1 month of historical data
- Added 30-minute timeframe option with up to 1 month of historical data
- Extended 1-minute data range from 1 day to 7 days
- Extended 2-minute data range from 5 days to 1 month
- Trendlines now render pixel-perfect across all timeframes (daily, weekly, monthly) by snapping to the correct containing bar
- Fixed trendline X-coordinate drift caused by timestamp interpolation between bars on higher timeframes
February 6, 2026
Stay Signed In & Cross-Timeframe Drawing Accuracy
Update
Added a "Stay signed in" option on the login page, and major improvements to how drawing tools render across different timeframes.
- Added "Stay signed in" checkbox to the login page, checked by default
- When checked, sessions persist across browser restarts using local storage persistence
- When unchecked, sessions end when the browser tab is closed using session storage persistence
- Added time extrapolation to the chart engine, allowing drawings to render beyond the current data range
- Trendline endpoints now use local time-step interpolation instead of global averages, eliminating slope distortion caused by overnight gaps
- Fixed trendlines snapping to the edge of data when endpoints fall outside the current timeframe's data range
- Drawings placed in the future on higher timeframes (e.g., daily) now project correctly on lower timeframes (e.g., 1-minute, 5-minute)
- Added float-index coordinate conversion for smooth positioning of drawings at any time, including before the first candle or after the last
- Backward extrapolation now works correctly, allowing drawings to extend before the earliest available data
February 4, 2026
Email-Notified Alerts (Premium)
Feature
Premium users can now receive email notifications when their alerts trigger, sent directly to their account email.
- Email notifications sent from [email protected] when any alert triggers
- Includes alert details: symbol, price, condition, and timestamp
- Enabled by default for Premium users, toggle on/off in Account Settings
- Free users retain 3 price alerts with browser notifications only
February 2, 2026
Cross-Timeframe Trendline Fix & Chart Engine Improvements
Fix
Extended the settings/delete legend to all drawing tools, and fixed trendline rendering and interaction issues when switching between timeframes.
- Added draggable settings and delete legend to all drawing tools (fibonacci, horizontal lines, vertical lines, horizontal rays, parallel channels, arrows, rectangles, date ranges, price ranges, and text annotations)
- All drawing tools now support customizable color, line width, and line style from the selection legend
- Fixed trendline rendering at wrong Y-position when switching between timeframes (e.g., daily to hourly)
- Trendlines now use proper line equation extrapolation to calculate correct coordinates for the visible time range
- Fixed "Cannot update oldest data" console error caused by whitespace data blocking real candle updates
- Fixed trendlines not being selectable or clickable after switching timeframes
- Selection indicators now render at the correct position matching the trendline on all timeframes
- Fixed trendline disappearing when zooming out to the chart data boundary
- Added line clipping algorithm for proper canvas bounds handling on extreme zoom levels
February 1, 2026
Trendline Alerts & Drawing Improvements
Feature
Set alerts directly on trendlines, customize drawing appearance, and improved position persistence.
- Fixed bug for long and short positions where time extensions are now persistent on save/load
- Added draggable legend on trendline selection that includes settings, alerts, and delete button
- Added customizable options for trendlines (color, style, width)
- Added alerts on trendlines with 2 trigger types: candle close on a selected timeframe, and real-time price cross
- Trendline alerts support both stocks (Yahoo Finance) and crypto (Coinbase/Binance)
- Trendline alert points automatically update when dragging/moving the trendline
- Deleting a trendline automatically removes its associated alerts
- Trendline alerts are a premium feature
January 29, 2026
Quick Alerts & Chart Alert Lines
Feature
New quick-add alert button on the price axis and visual alert lines on the chart for faster alert management.
- Added a "+" button next to the price axis to quickly add price alerts at any level
- Button follows the crosshair position and works on both desktop and mobile
- Clicking the button opens a confirmation modal with auto-detected alert condition (above/below current price)
- Active alerts now display as dashed lines on the chart for the current symbol
- Alert lines are clickable/tappable to reveal a delete option with trash icon
- Alert lines automatically update when switching symbols or adding/removing alerts
January 17, 2026
Landing Page Overhaul & Contact Form
Update
Major updates to the landing page with improved mobile experience and new pages for better user engagement.
- Added mobile hamburger menu for navigation on tablets and phones
- Created dedicated Features page with detailed descriptions of all platform capabilities
- Renamed "13F Filings" to "Superinvestor Tracking" for clarity
- Reordered features to highlight AI Buy Signals, AI Chat, and Legendary Investor Tracking
- Added track record links to AI Buy Signals sections for transparency
- Updated pricing section with accurate feature limits for Free and Premium tiers
- Created Contact page with email form for user inquiries
- Added SEO structured data (JSON-LD) to all pages for improved search visibility
January 15, 2026
AI Signals Watchlist & Track Record Page
Feature
Enhanced AI Buy Signals with watchlist stocks and launched a public track record page to showcase verified signal wins.
- AI Buy Signals now shows up to 25 stocks - active positions plus watchlist stocks that are close to triggering
- Watchlist stocks display with a "Watch" badge showing why they're being monitored (e.g., "Waiting for ADX cross")
- New Track Record page showing verified wins - stocks our AI identified before they became top market gainers
- Track record automatically updates daily after market close
- Added SEO improvements including sitemap.xml and structured data for better search visibility
January 9, 2026
AI Buy Signals Overhaul & Forward Test Stats
Feature
Completely reworked AI Buy Signals to show only active trades with transparent entry data. Added a new stats panel for forward testing results.
- Reworked AI Buy Signals to show only current active trades with entry date, entry price, and CL Score at the time of entry
- Added a draggable Stats Panel to the chart when forward testing is active, showing win rate, average gain, and historical trade results
- Forward test markers now persist when changing symbols if the toggle is active
- Added PE ratio and analyst upside to signal cards
- Removed redundant confidence indicator from CL Score - win rate now shown in Forward Test panel
January 8, 2026
Data Caching and AI Signal Improvements
Update
Improved loading times with data caching and enhanced AI Buy Signals quality with backtesting visibility.
- Hedge Fund Holdings, Insider Trading and AI Signal data is now cached for an hour until refreshed, improving loading times and request limits
- AI Buy Signals have been upgraded with better quality signal filtering and backtesting has been implemented to see the trades behind the confidence scores
January 4, 2026
Tutorial and Streak Rewards
Feature
Added interactive tutorial and daily streak rewards system for user engagement.
- Added Tutorial for the platform
- Added a streak system to get bonus rewards for returning users
- Small UI changes and updates
December 29, 2025
New indicators and drawing tools
Feature
Added new technical indicators and drawing tools for enhanced chart analysis.
- Added Horizontal Ray drawing tool
- Added VWAP, SuperTrend, Average True Range, and On-Balance Volume indicators
- Many small UI upgrades and improvements
December 26, 2025
UI improvements and premium features
Update
Improved UI dramatically. Increased the AI free limit from 1 to 2 credits. Added star next to symbol to easily add to the current watchlist.
- Improved UI dramatically across the platform
- Increased the AI free limit from 1 to 2 credits
- Added star next to symbol to easily add to the current watchlist
- Enhanced premium feature presentation and subscription modal
- Added social proof and improved upgrade prompts
December 22, 2025
Mobile improvements and bug fixes
Fix
Enhanced mobile experience and fixed critical bugs. Updated premium feature restrictions.
- Fixed the UI to be more friendly on Mobile and fixed selection bug for some drawings on Mobile (Now all features are working on mobile)
- Fixed Analyze Chart screenshot option in the AI Chat
- Updated free user permissions
- UI improvements
December 18, 2025
Position tracking and watchlist management
Feature
Added long and short positions with sizing and PnL tracking. Enhanced watchlist management with ability to create, rename, and organize multiple watchlists. Fixed drawing persistence bug across symbol changes. Various UI improvements.
- Long positions and short positions with sizing and tracking PnL
- Watchlist management (Adding symbols, clearing watchlists, creating multiple watchlists)
- Fixed a bug where certain drawings were persistent across symbol changes
- Small UI updates and improvements
December 6, 2025
Enhanced filtering and drawing tools
Feature
Added new filtering options and drawing capabilities for better chart analysis.
- Price range filter for advanced screening
- Date range filter for historical analysis
- Rectangle drawing tool for area highlighting
- Various bug fixes and performance improvements
November 20, 2025
New drawing tools
Feature
Expanded drawing capabilities with three new powerful tools for technical analysis.
- Parallel channel for trend analysis
- Text annotations for chart notes
- Arrow tool for highlighting key points
November 2, 2025
Cross-device drawing sync
Fix
Fixed mobile chart functionality. Drawings now save and sync properly across all devices.
November 1, 2025
Redesigned interface
Feature
New unified toolbar design with cleaner layout and improved icon system.
October 28, 2025
Platform launch
New
ChartingLens is now live with full charting capabilities, indicators, and drawing tools.