Sample dataset · CC0

OHLC bars that never invert.

Two years of daily bars for eight four-letter symbols that belong to nobody. Each ticker follows its own smooth trend with noise on top, the open is last session's close plus a gap, and the high and low always bracket both.

7 columns · 100 or 1,000 rows as a file · up to 1,000,000 rows generated here · CSV, JSON, JSONL, Excel, Parquet

Take a file

A thousand rows is 125 sessions across all eight tickers. For a full two-year candlestick chart per ticker, generate 10,000 rows.

More sessions, built here

Larger sizes add sessions rather than tickers, so a hundred thousand rows is about 12,500 sessions per symbol. That is more history than any real listing has, and it is a fair way to find out how a candlestick renderer behaves when asked to draw too much.

The first eight rows

The first eight rows of the 1,000-row file: all eight tickers on the first session.

datetickeropenhighlowclosevolume
2024-07-01ACME337.59341.09335.44336.651668595
2024-07-01BRLN90.9091.7889.9290.603886024
2024-07-01CYGN230.52233.42229.36231.472648950
2024-07-01DELT295.08295.53292.17293.895306175
2024-07-01EVRG165.87167.52164.90166.665122326
2024-07-01FLUX135.76136.12135.55135.751625279
2024-07-01GRVT35.8636.2335.4835.965044150
2024-07-01HLIX196.74198.54195.66196.902120855

Seven columns, and what each one holds

Column Type What it holds Example
date date Trading date. Eight rows share each date, one per ticker. 2024-07-01
ticker text One of eight invented four-letter symbols. None of them is a real listed company. ACME
open decimal Opening price in USD. Equals the previous session's close plus an overnight gap. 337.59
high decimal Session high. Never below open or close. 341.09
low decimal Session low. Never above open or close. 335.44
close decimal Closing price, following a smooth trend with noise on top. 336.65
volume integer Shares traded, in the low millions, higher on big-move days. 1668595

What it models

Daily bars, the format every charting library expects and most sample files get subtly wrong. One row is one symbol on one session: the price it opened at, the highest and lowest it traded, where it closed, and how much changed hands.

There are eight symbols, ACME, BRLN, CYGN, DELT, EVRG, FLUX, GRVT and HLIX, and they are all invented. That is not squeamishness. Publishing sample data under a real ticker invites somebody to backtest against it by accident, and a fabricated price series with a real name attached is worse than useless.

How the price series is built

Each symbol has a base price between 20 and 360 and a deterministic trend made of two sine waves at different periods plus a slow drift whose direction depends on the symbol. On top sits a small per-session noise term. The result has visible medium-term swings and short-term chop, which is what a price chart looks like, rather than a pure random walk that wanders off to nothing.

The open of a session is the previous session's close nudged by up to about half a percent, so there are small overnight gaps but no absurd ones. High and low are computed from whichever of the open and close is larger or smaller, pushed out by up to about one percent, which is what guarantees the bar can never invert.

Volume is not independent of price. It is a base draw multiplied by a factor that rises with the size of the day's move, so big moves come with heavy volume. That relationship is the first thing anybody checks when they open a market dataset, and its absence is the fastest way to tell that a file was generated carelessly.

The invariant, stated plainly

For every row: high is greater than or equal to both open and close, and low is less than or equal to both. A test asserts it across 800 rows. Break that invariant and a candlestick chart draws a bar with the wick inside the body, which looks like a rendering bug, is actually a data bug, and costs somebody an afternoon.

It also means you can use this file to verify your own OHLC handling. Resample it to weekly bars: the weekly open should be the first session's open, the close the last session's close, the high the maximum high and the low the minimum low. If your resampling produces anything else, the file is not the problem.

What people use it for

  • Candlestick and OHLC chart testing, where an inverted bar is immediately visible.
  • Resampling practice: daily bars to weekly or monthly, with a checkable right answer.
  • Rolling windows, moving averages and volatility, on a series with real structure.
  • Multi-symbol comparison charts, normalized to a base date.
  • Checking that a tool keeps four decimal-heavy price columns aligned after a conversion.

License, and the people in it

This dataset is dedicated to the public domain under CC0 1.0. Put it in a course, a paid product, a test suite, a bug report, a screenshot, a conference talk or a book. There is nothing to ask for, nothing to sign and no attribution required. A link back is welcome and is not a condition.

No real company, listing, exchange or price appears in this file. The eight symbols are invented four-letter strings and the prices come from a deterministic function, so nothing here is market data and none of it should be treated as a price history.

Questions people ask about this file

Can the high ever be below the close?

No. high is computed as the larger of open and close, pushed up by up to about one percent, and low is the smaller of the two pushed down the same way. A test checks all four columns across 800 rows. An inverted bar is the classic defect in generated OHLC data and it makes candlestick charts look broken, so this one is guarded rather than hoped for.

Are these real companies?

None of them. ACME, BRLN, CYGN, DELT, EVRG, FLUX, GRVT and HLIX are invented four-letter strings chosen not to collide with anything meaningful. Using a real ticker on fabricated prices is asking for the file to be mistaken for market data, and the cost of that mistake is somebody's backtest.

Is the price a random walk?

Not quite, and deliberately so. It is two sine waves at different periods, plus a slow drift, plus per-session noise. A pure random walk drifts arbitrarily far from its starting point and often produces a chart with no visible structure, while this has medium-term swings you can see and reason about, which is what makes it useful for demonstrating a moving average.

Does volume relate to price movement?

Yes. Volume is a base draw multiplied by a factor that scales with the absolute size of the day's move, so large moves come with heavy trading. It is the first correlation anybody looks for in a market file, and generating the two columns independently is the fastest way to make a dataset that looks wrong to anyone who works with this data.