Pulse is an intraday market simulation platform

Simulators

Three ways to simulate markets

PulseABM

Available now

Agent-based market simulator generating synthetic tick data at millisecond resolution. Access order books, L1/L2 quotes, orders, and trades via a Python SDK.

  • ✓L1 & L2 order book data
  • ✓Order flow & trade data
  • ✓Python SDK with Polars DataFrames
  • ✓Run custom simulations
  • ✓Test algos & measure market impact
  • SoonTrain online reinforcement learning agents

Pulse Flow

Available on Pro

A flow-matching foundation model that treats the order book as an image. Conditioned on the last 33 seconds, it generates the next 32 seconds of the full 10-level book from noise, rolling forward on its own output.

  • ✓L2 order book generation (10 levels)
  • ✓Conditioned on real market regime
  • ✓API & Python SDK access (Pro tier)
  • SoonScenario generation

Pulse GPT

Coming soon

A large market model. Like an LLM predicts the next word, it predicts the next order, one order per token, generating realistic order flow and market scenarios on demand.

  • SoonSynthetic order flow generation
  • SoonScenario generation
  • SoonExpanded universe of symbols & venues
  • SoonAPI access

Use cases

What can Pulse do?

  1. 01 · Algo backtesting

    Replay your algo over synthetic markets

  2. 02 · Training data

    Unlimited tape for models that need more than history

  3. 03 · Market impact

    Measure the price move your order caused

  4. 04 · Pre-trade TCA

    Estimate cost before you trade

  5. 05 · Liquidity risk

    Price a ladder of order sizes in both directions

  6. 06 · Stress scenarios

    Trade through crises that never happened

cached run 0000 — 50k TWAP sell replay (unreactive)

execution window604.50604.90605.30
09:3010:3011:3012:3013:30
mid pricebid / askchild fills (on bid)avg fill 604.86 (dashed)

mid_price_by_min — 14 Monte Carlo runs, one calibration

604605606
09:3011:0812:4514:2316:00

700.HK mid: baseline, same seed with a 250k buy, same seed with a 250k sell. 3 simulations, one job

601.1606.0610.910:0010:2310:4511:0811:30impact +1.84buy 250kimpact +3.39sell 250k0risk + impact = cost, HKD / sharerisk +0.62impact +1.84cost +2.46buy 250krisk -1.76impact +3.39cost +1.62sell 250k
baseline, no ordersame seed with buy 250ksame seed with sell 250k

700.HK mid: baseline vs the same seed with a 250k VWAP buy from 14:00. 4 simulations, one job

VWAP working, one hour602.1604.8607.40142lots filled per minute13:4514:0814:3014:5315:15avg fill 606.28risk + impact = cost, HKD / shareriskimpact0+4.6709:30+1.5411:00+1.2814:00
baseline, no ordersame seed with the VWAPchild orders, lots per minuteimpact: the gap the order opened

impact, HKD / share, 700.HK: five sizes each side by four TWAP durations, 10 runs a point, one job

0.05.010.01M500k250k100k50k050k100k250k500k1Msellsbuysshares, worked over the duration from 10:30
5 min TWAP15 min TWAP30 min TWAP60 min TWAP

mid price — 700.HK, scenario=flash_crash, 8 of 24 runs

59260060810:30 shock
10:0010:3011:0011:3012:00
individual runsmedian of all runs

Pull a cached Pulse run and backtest your strategy against synthetic data. A classic replay backtest, but on unlimited synthetic days instead of one historical tape. The market doesn't react to your orders here; when you need impact, the same data model goes reactive on Pro.

One trading day happens once. Pulse generates as many statistically realistic variations of the market as your models need.

Run the same seed twice, once with your order and once without. Cost is what you paid against the reference price, risk is what the market did anyway, and impact is the difference: the part your order caused.

Run the same order through different execution windows and read the cost of each straight off the simulation, before you commit to one.

One job runs every size you might trade, as a buy and as a sell, at every speed you might work it, each against the same baseline. The result is the impact surface your desk prices against.

Historical data only contains the crashes that occurred. See how your strategy behaves if the market drastically turns against it.

FIX connectivity

Trade against Pulse over a real FIX session

Pulse exposes its simulated exchange over standard FIX 5.0 SP2 point your algo at the simulator before running on a live market. You can run it at up to 10× speed, and get a pre-trade cost report before you risk the alpha for real.

FIX 5.0 SP2 session · user_76b8ee0f… → PULSE
FIX wire0/10

Waiting for messages…

Order book · 700.HK
609.5014,600
609.005,500
608.0014,900
607.004,800
606.005,500
spread 1.00
605.0023,100
604.503,300
604.002,000
603.502,400

Sample Data

See what the data looks like

Download a real Pulse output. 5 Monte Carlo runs for 700.HK under a baseline scenario, calibrated to HKEX market microstructure. No account needed.

sim_data.parquet · mid price
5 REAL RUNS · 700.HK · MARKET OPEN · MS RES.
run_0000run_0001run_0002run_0003run_0004
09:30:1009:31:2509:32:4009:33:5509:35:10
pulse_sample_data.zip
  • ▸700.HK_2025-09-02_…_baseline_0000/
  • │ mid_price_by_min.parquet
  • │ sim_data.parquet
  • ▸700.HK_2025-09-02_…_baseline_0001/
  • …
  • ▸700.HK_2025-09-02_…_baseline_0002/
  • …
  • ▸700.HK_2025-09-02_…_baseline_0003/
  • …
  • ▸700.HK_2025-09-02_…_baseline_0004/
  • …

Symbol

700.HK

Exchange

HKEX

Scenario

baseline

MC runs

5

Date

2025-09-02

Resolution

tick-level

Orderbook

Full L2, 10 levels

Session

09:30 – 16:00

Quick start

Your data in six lines

example.py
from simudyne import PulseABM client = PulseABM(api_key="pk_live_...") # Discover available cached simulationscached_simulations = client.simulation.list_cached() # Find a cached sim IDsim_id = cached_simulations['simulations'][0]['example_sim_id'] # Fetch full data (messages + LOB)df = client.simulation.get_sim_data(sim_id, 'sim_data.parquet') print(df.head())

Cite Pulse

Using Pulse in your research?

If you use Pulse data in a publication, please cite us. Copy the BibTeX entry below.

citation.bib
@misc{simudyne2025pulse,  title        = {Pulse: Synthetic Market Microstructure Data                  from Agent-Based Simulation},  author       = {Simudyne},  year         = {2026},  howpublished = {\url{https://pulse.simudyne.com}},  note         = {Tick-level synthetic order book data generated                  by PulseABM, calibrated to real exchange                  microstructure},}

Foundation Model

Join the waiting list

Be the first to know when the Pulse Foundation Model is available.

FAQs

Frequently asked questions

Pulse is Simudyne's platform for synthetic market data generation. It provides APIs and a Python SDK to access simulated market data for research, model training, algo development, and backtesting.

PulseABM is an agent-based market simulator. It generates realistic synthetic market data at millisecond resolution by modelling individual market participants and their interactions. You can access the resulting data through the Pulse API and Python SDK, including order books, L1/L2/L3, trades, and orders.

The Pulse Foundation Model is an upcoming large market model calibrated with real market data. Just as a Large Language Model predicts the next word in a sequence, the Pulse Foundation Model predicts the next order in a market, generating realistic synthetic order books and market scenarios on demand. Join the waiting list to get early access.

PulseABM currently supports HKEX and LSE, with venues and symbols growing rapidly. Available data includes synthetic order books, L1/L2/L3 data, individual order events, and executed trades. All data is generated at millisecond time resolution and returned as Polars DataFrames. To request new symbols or venues, reach out to support@simudyne.com.

Sign up for a free account, then go to your dashboard to generate an API key. You can create multiple keys, label them for different projects, and revoke them at any time.

Install the SDK with: pip install git+https://github.com/simudyne/pulse-api.git (or uv pip install git+https://github.com/simudyne/pulse-api.git). Then import the client with `from simudyne import PulseABM` and pass your API key to get started.

Yes, Pulse is currently free to use. Create an account to get started.

Yes. PulseABM data is designed for training trading agents and financial models. The SDK returns data in Polars DataFrames that integrate smoothly with ML workflows.