Open, high, low and close
A bar describes one security over one interval, such as a trading day or five minutes. Its four prices answer four questions about that window.
- Open: the first price of the interval. For a U.S. stock's daily bar this is normally set by the opening auction.
- High: the highest trade price during the interval.
- Low: the lowest trade price during the interval.
- Close: the last price of the interval. For a daily bar it is the official closing price, which on U.S. exchanges is usually set by the closing auction.
- Volume: the number of shares (or units) traded during the interval. It is what turns OHLC into OHLCV.
Together they show direction (close above or below open), range (high minus low) and participation (volume) without storing every trade. A year of daily bars is about 252 rows per stock; a year of trades can be millions.
OHLC vs OHLCV
The terms are often used interchangeably. Strictly, OHLC is the four prices and OHLCV adds volume. Volume matters for most analysis: a breakout on heavy volume reads differently from the same move on light volume, and indicators such as on-balance volume or volume-weighted averages need it. Some datasets also include a trade count, the number of individual trades behind the bar.
Candlestick and OHLC bar charts
Both chart types draw one bar per interval from the same four numbers. An OHLC bar is a vertical line from low to high with a tick to the left at the open and a tick to the right at the close. A candlestick draws a thick body between open and close and thin wicks to the high and low; the body is usually filled or colored red when the close is below the open and hollow or green when it is above. Neither chart adds information the four prices do not already contain.
Intervals: from minutes to months
The interval sets the resolution. Intraday bars (1, 5, 15 or 60 minutes) suit execution analysis and short-term strategies. Daily bars are the standard for research, screening and backtests. Weekly and monthly bars are built by rolling daily bars up: the first open, the highest high, the lowest low, the last close and the summed volume. The same rule turns 5-minute bars into hourly ones.
How a daily bar is formed
U.S. stocks trade in a regular session from 9:30 a.m. to 4:00 p.m. New York time, with pre-market and after-hours sessions around it. A daily bar is dated by the exchange-local trading date, not by UTC: a session that ends at 4:00 p.m. New York time is still that date even though it is already the next day in some time zones. Intraday bars, by contrast, are usually timestamped in UTC, so the 9:30 a.m. bar of a day in October appears as 13:30:00Z.
Daily and intraday bars are compiled separately and do not always reconcile. The official close can differ from the last intraday trade, and daily volume commonly includes the closing auction and trading outside the regular session that regular-session intraday bars leave out.
A worked example: Apple on October 2, 2026
These are Apple's (XNAS:AAPL) hourly regular-session bars and its daily bar for October 2, 2026, as returned by the OHLC API on October 3. They are historical end-of-day values. Times are New York time; the API returns them in UTC.
| Bar | Open | High | Low | Close | Volume |
|---|---|---|---|---|---|
| 9:30 | 333.20 | 334.54 | 330.61 | 334.31 | 6,833,376 |
| 10:30 | 334.29 | 334.45 | 331.08 | 332.35 | 5,089,535 |
| 11:30 | 332.33 | 333.45 | 331.62 | 332.86 | 2,551,308 |
| 12:30 | 332.86 | 333.89 | 332.83 | 333.41 | 2,592,144 |
| 13:30 | 333.41 | 333.70 | 332.72 | 332.99 | 1,688,421 |
| 14:30 | 333.00 | 334.13 | 332.95 | 333.27 | 1,980,489 |
| 15:30 (30 min) | 333.26 | 334.08 | 332.71 | 333.79 | 2,764,289 |
| Rolled up from hourly | 333.20 | 334.54 | 330.61 | 333.79 | 23,499,562 |
| Daily bar | 333.205 | 334.54 | 330.61 | 333.69 | 31,878,433 |
Rolling the hourly bars up reproduces the open, high and low of the daily bar. The close differs by ten cents, and daily volume is about 8.4 million shares higher than the sum of the hourly bars. The daily bar carries the official closing price and the day's full volume, while the hourly bars stop at the last regular-session trade in each window. Differences like these, not data errors, are the usual reason two bar series for the same day disagree.
Adjusted vs unadjusted OHLC data
Raw (unadjusted) bars show the prices that actually traded. After a split or dividend, raw history has a jump that no investor experienced: NVIDIA closed at 1,208.88 on June 7, 2024 and at 121.79 on June 10, the first session after its 10-for-1 split. Adjusted bars rescale earlier history so that the series is continuous. Use raw bars to see what traded and adjusted bars to measure returns. Adjusted stock prices explains the factors.
A note on VWAP
Volume-weighted average price is the average price of every share traded in the interval, weighted by size. It needs trade-level data, so it cannot be computed exactly from OHLCV. The typical price, (high + low + close) / 3, weighted by volume across bars is a common approximation. OHLC bars do not include a VWAP field.
Common pitfalls with OHLC data
- Mixing raw and adjusted series in one calculation, which creates false gaps or false returns at every split.
- Treating UTC timestamps as local time, or the reverse, and shifting every intraday bar by four or five hours.
- Expecting daily volume to equal the sum of intraday bars, or the daily close to equal the last intraday close.
- Assuming a bar exists for every calendar day. Weekends, holidays and halted sessions have no bar; use a trading calendar rather than filling gaps.
- Parsing prices as binary floats and comparing them for equality. Keep decimal strings or use a decimal type when exact values matter.
- Joining history by ticker. Tickers are reused and renamed; a stable instrument ID keeps one company's history together.
How to get OHLC data from the OHLC API
- Create a free account and an API key. The Free plan covers AAPL, NVDA, JNJ, PEP, MSFT, SPY and QQQ with five years of daily history.
- Request daily bars from
/v1/eodwith an exchange-qualified symbol and a date range. - Add
adjustment=splitoradjustment=total_returnfor adjusted history, or use/v1/intradaywithinterval=5mon Pro and above. - Follow
meta.next_cursoruntil it is null to read longer ranges.
curl 'https://api.ohlc.io/v1/eod?symbols=XNAS:AAPL&from=2026-09-28&to=2026-10-02' \
-H "Authorization: Bearer $OHLC_API_KEY"