How the numbers work
Every number in the table is computed in your browser from prices your own Alpaca account sends it. Vibistic Stocks has no market data of its own and keeps none: free market-data plans are for personal use, so each visitor brings their own key.
Where the prices come from
- Daily history: Alpaca's full-market (consolidated, "SIP") daily bars for the last four years (about 1,000 sessions), adjusted for stock splits (not for dividends). Only completed sessions are used.
- Live price: while the market is open (9:30 to 16:00 New York time), the latest trade on IEX, the one exchange Alpaca's free plan streams in real time. IEX handles only a few percent of US volume, so a thinly traded stock can go minutes without an IEX trade, and its live price can lag the wider market. During the session every column treats that price as today's provisional close; the values settle when the session ends.
- Today's volume: Alpaca's free plan serves full-market data once it is 15 minutes old, so the anchored VWAPs include today's trading up to 15 minutes ago. IEX volume is never used for them: it is too small a slice of the market.
Moving averages
The simple moving averages (5, 20, 50 and 200 SMA) are the plain average of the last 5, 20, 50 or 200 closes. The exponential ones (9 and 21 EMA) start from the simple average of the first 9 or 21 closes in the history and then weight each new close by 2 / (n + 1). A column shows a dash until a stock has enough sessions, for example a recent listing has no 200 SMA.
52-week range
The lowest low and the highest high of the last 365 days, from the same split-adjusted full-market daily bars. During the session today's trading counts too, as on quote sites, so a stock making a new high shows the price right at its 52-week high. A stock listed less than a year ago shows its range since listing. An alert on the 52-week high or low compares with the range as it stood before today, so a breakout to a new high (or a break to a new low) fires the alert instead of moving the level along with the price.
Anchored VWAP
An anchored VWAP is the average price paid for every share traded since a starting session, weighted by volume. The app adds up each session's own VWAP times its volume and divides by the total volume, so it is the true volume-weighted price rather than an estimate from highs and lows. If a session's VWAP is missing or falls outside its own high-low range, its typical price (high + low + close) / 3 stands in for it. A day's high or low more than 25% beyond both its open and close, when the day's VWAP stayed near the open/close range, is treated as a bad print (a real one: NVIDIA's split day shows a high of $195.95 in a $117 to $122 session, with a VWAP of $121.14) and cut back to that range, so it cannot create a false swing. A real spike moves the VWAP too, and is kept.
- YTD: anchored at the first session of the calendar year.
- From dip: anchored at the last big dip, below.
- From 52-wk low: not the low itself (that is in the 52-week range columns) but the volume-weighted average price since it, anchored at the lowest low of the last 365 days, the bigger, slower picture. It is shown only once the price has risen at least the big-dip percentage (10% unless you change it) from that low; while a stock is still at or near its low, an anchor there would sit on today's price and say nothing, so the column shows a dash. A year after it was made, a low drops out of the window and the anchor moves to the next one.
The last big dip
The app finds turning points with a zigzag over daily highs and lows. A low counts only once the price has climbed at least the chosen percentage (10% unless you change it) above it, and a high only once the price has fallen that much below it, so smaller wiggles are ignored. The last big dip is the most recent such low: the point the latest uptrend started from. A dip counts only if the price fell the full percentage into it too; if a stock has risen for the whole four years without one, the dip columns show a dash rather than pretending the first day of the history was a dip. The exception is a stock whose prices start within the history (a recent listing): its first confirmed low (one the price has since risen the full percentage from) counts even without the full fall into it, and a note under its row says so (if it traded before under another name, its real last dip may be different). When a single day both makes a new extreme and reverses by the full amount, daily bars cannot say which came first, so the app treats it as extending the current move.
Fibonacci levels
The levels measure the swing from the last big dip up to the highest high since it. Retracements count down from that high: the 38.2% level is the high minus 38.2% of the swing. Extensions count up from the low: the 127.2% level is the low plus 127.2% of the swing. While a stock keeps making new highs, the high (and with it every level) moves up.
Reading the table
Under each level is how far the price is above (+) or below (−) it, and the cell is tinted to match: green when the price is above the level, red when it is below, and orange when it is at the level, within 0.5% of it unless you choose another band (0.25% to 2%). A note under a row explains anything unusual: a symbol with no data, a stock with too little history, or a one-day move of more than 40%, which is more often a stock split that has not been applied to the history yet than a real move.
Charts
Click a symbol in the table (or its chart badge) to open its chart: candles and volume with every level from the table drawn on it. Pick a range (1M, 3M, 6M, YTD, 1Y, 2Y, 5Y or All) and daily or weekly candles; you can also drag and zoom. The table works from four years of history; a chart fetches the years before that (Alpaca's full-market history starts in 2016, so about ten years) for that stock when it opens. The levels stay the table's, so a long chart shows the same numbers. Weekly candles show the same daily levels, read at each week's close.
Draw your own anchored VWAPs with + Anchored VWAP: move the pointer over the chart to preview one from the candle under it, then click to place it (or type a date: it starts on the first session on or after it). Up to five per stock, each in its own color. They are listed above the chart, each with a × to remove it (plus "Remove all", and "Undo" if you change your mind), and their values are in the legend. They are computed like the table's (full-market volume-weighted prices from the anchor day on), follow the live price, and are kept in this browser only. On weekly candles a click anchors at the week's first session. The price's own label reads "Close", or "Last" while the market is open and the price is live. The moving averages and anchored VWAPs are drawn as they stood day by day, each VWAP starting at its anchor; the Fibonacci levels run from the last big dip onward and the 52-week range across the last year, so the right-hand end of every line is the number in the table. The chart starts with the columns your table shows; switch any line on or off under it. Use the left and right arrow keys (or the buttons) to move through your watchlist, and Escape to close. During the session the last candle moves with the live price.
Charts by TradingView Lightweight Charts™, Copyright (c) TradingView, Inc., used under the Apache License 2.0 and served from this site.
Ask AI
In a chart, Ask AI opens a chat beside it (a panel at the bottom on a phone; it takes no room until you open it). Ask what a level or line measures, why a cell has its color, how the last big dip is found or how a feature works. It uses your own AI key (Anthropic, Google Gemini, xAI Grok, OpenRouter or Zhipu GLM), from your browser straight to that provider. It explains; it does not see prices, so the numbers are in the table and the legend, and it will not tell you what to do with a stock or where its price will go. In browsers that support it, the microphone button lets you speak your question. SeePrivacy.
Alerts
An alert watches one stock (or every stock in your watchlist) against one level and tells you when the price crosses above it, crosses below it, or comes within the orange band of it. It fires on the change, never on the state: "crossed above the 50 SMA" happens once, while "is above the 50 SMA" could be true all day. The orange band is a buffer, so a cross counts only once the price has left the band on the other side; a price wobbling on the line does not fire again and again. Each alert fires at most once a day per stock, or at most every 15, 30 or 60 minutes if you choose.
Alerts run in your browser, only while the Vibistic Stocks tab is open (it can be in the background), and only on live prices during the regular session: an alert fires only when a new trade arrives. Loading the page or refreshing data never fires one; if a refresh moves a level (an anchored VWAP) across the price, the next trade reports it. The first live trade after the open fires if the stock opened on the other side of a level. They follow IEX trades, so a thinly traded stock can alert late, and the anchored VWAPs move only every few minutes. You can have a browser notification, a short sound, or both, and every alert is also listed on the page. Some phone browsers cannot show notifications from a web page; there the page's list is the only place an alert appears.
Moving your watchlist
Cloud backup (in Settings; off unless you turn it on) keeps your devices in step: turn it on, save the recovery code, then scan the QR code or open the restore link on your other device and press Restore. From then on a change on one device shows up on the others within a few minutes (each fetches the backup when the page opens, when you come back to it and every few minutes). If two devices change things at the same time, both changes are kept: watchlists, alerts and anchored VWAPs are joined (so something removed on one device at that moment can come back), and each device keeps its own settings. Your Alpaca key is never backed up: enter it once on each device. Everything is encrypted in your browser first; see Privacy.
Everything you set up is kept in this browser. Add tickers with the + on the Symbol column, and remove one with the × next to it. In Settings, Import from a file adds tickers from a text file (one per line, or separated by commas or spaces), a spreadsheet or broker CSV (the Symbol or Ticker column, else the first column) or a JSON list; anything that is not a ticker is listed, not guessed. Export tickers saves your watchlist as a text file.Export full backup saves your watchlist, settings, alerts and anchored VWAPs (never your key, and no prices) as one file; importing it in another browser replaces the setup there, after asking. Files are read and written in your browser: nothing is uploaded.
Not investment advice
Vibistic Stocks shows levels that traders commonly watch. It does not say whether to buy, sell or hold anything, and its numbers can be wrong or late. Check prices with your broker before acting on them.