Forward Testing System Development (Paper Trading)

A strategy validated only on history often falls apart in live markets. We develop forward testing systems where the strategy trades in paper trading mode on a real data stream without capital risk. We deliver turnkey and shorten the path from hypothesis to a decision to go live.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1376
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1350
  • B2B Advance company logo design
    B2B Advance company logo design
    798
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1088
  • AIDER company logo development
    AIDER company logo development
    1034
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1130

Paper trading: where simulation diverges from real trading

A test run of a strategy ends with a smoothly rising chart, while the same logic on a real account produces a result that does not match the calculation in either the number of trades or the average return.

The error is not in the code: by default, paper trading treats execution as ideal — an order is filled in full at the price from the quote stream, cancellation triggers instantly, and the order book beneath our order does not change.

Each assumption on its own looks harmless, but together they shift the strategy assessment so much that forward testing of strategies stops predicting the result.

Slippage in simulation appears only where it was explicitly built into the model. If the order size is comparable to the visible volume at a price level, real execution passes through several levels of the book, and the average trade price turns out worse than the test one.

The simulator, however, fills the entire volume at the best price — on narrow instruments this produces a divergence that, over a long series of trades, outweighs the entire stated strategy return.

The second source is execution latency. The signal is calculated on bar close, reaches the trading gateway with network delay, and the opposing flow has time to reprice: in the test, zero time passes between signal and trade; in reality, a noticeable fraction of a second.

Incomplete quote flow adds to this: the test survives a connection break silently and continues calculating at the last known price, whereas in real trading at that moment you can neither enter nor exit.

Order cancellation logic also diverges separately. In simulation, removing and replacing an order is free and instantaneous, so any strategy with trailing limit orders looks more profitable than it is.

On an exchange, cancellation may arrive after partial execution or be rejected by a request rate limit — and then the position remains open, followed by a signal in the opposite direction.

We explain how the divergence between test and real trades is closed in the forward test architecture.

What forward testing provides before deploying a strategy to production

Forward testing (paper trading) runs a strategy on a live market data stream, but orders go not to the exchange, but to an execution emulator.

The test environment connects to the same trading API as production: on Binance and other venues the set of methods matches, so the divergence between the run and the real account comes from the hypothesis logic, not from infrastructure differences.

Testing a trading hypothesis fits into days instead of weeks, and test-run metrics are calculated by the same code as in production.

Reducing strategy risk stops being a declaration: the effects are visible in the report, and failures are eliminated before the strategy receives a real account.

Effects visible in the report

  • Hypothesis validation time — days instead of weeks, the run proceeds continuously.
  • Share of reproducible trades — above 95% with a fixed order book snapshot and repeated launch.
  • Test environment downtime — minutes to restart instead of hours of manual stand assembly.
  • Drawdown predictability — calculated and actual curves converge, risk limits are set in advance.
  • Failure classes — are closed in the test environment, not on the real account.

State before and after

Failure class Before forward testing After
Order cancellation at execution time Race, double position Caught during the run
Partial execution Skewed position size Checked on every run
Request retry on connection loss Duplicate orders Idempotency confirmed
Data stream break Strategy waits silently Emergency close and alert

Paper trading formats: history, live stream, shadow mode

History, live stream, and shadow monitoring do not replace each other — they answer different questions: whether the logic can withstand past data, how the strategy behaves on real spreads, and what will change if it is placed next to the production environment.

We pull historical slices from archives such as CoinGecko and normalize them into a unified format so that runs are reproducible.

Option When it fits Limitations
Backtest on history Initial hypothesis selection, parameter tuning No slippage and order queue, risk of overfitting to the past
Live quote stream Execution check on real spreads and delays Rare liquidity gaps remain unnoticed
Shadow trading mode Compare a new version with the production one on the same market Double load, separate signal accounting required

How to choose a mode for the strategy type

For high-frequency strategies, the live stream becomes decisive: on history, commission and slippage look completely different from in the real order book.

Positional strategies are cheaper to test with a historical run — there, resilience over a long horizon and behavior during rare events matter more than execution microstructure.

How shadow running alongside the production environment works

The shadow copy receives the same data stream as the production environment, but does not place orders — signals and calculated prices are written to a separate journal.

Reconciliation of the two journals shows divergence in entry time and execution price: if the new version signals earlier and closes a position 2-3% more profitably, it can be promoted to the main environment; if the divergence goes the other way, the edits are returned to the run.

Stages of implementing a testing system: from audit to handover

Implementation of a testing system begins not with code, but with an inventory: until strategies, instruments, and modes are described, the stand will replicate the production system in its worst form. We run the project in steps, and at each one we record a verifiable result.

  1. Audit of trading strategies: collect the list, timeframes, instrument sets, and risk-control rules; note what is tested in isolation and what requires a shared account.
  2. Data flow diagram: describe where quotes, the order book, and blockchain events come from, how they are normalized into a common journal, and where the boundary between production and test environments lies.
  3. Stand assembly: deploy a paper trading environment with isolated accounts, emulation of exchange restrictions, and separate result storage.
  4. Execution model calibration: configure delays, slippage, partial execution of limit orders, and commissions so that the simulated result converges with the actual one.
  5. Reconciliation on benchmark trades: run a set of known trades and compare with actuals by entry price, volume, and time; analyze divergences to an acceptable level.
  6. Handover and training: show the team how to add strategies, read reports, and update the execution model without our support.

Acceptance criteria

Acceptance is based on reproducibility: the same dataset and configuration produce the same result from run to run.

Separately, we record that the divergence from benchmark trades fits within the agreed corridor, and the journal stores input data and the execution model version for each launch.

Launch without stopping the production environment

We deploy the stand next to the production system and connect it to the same sources through separate connections and limits — the production environment does not stop or change behavior.

Strategies are migrated one by one, with rollback: if testing interferes with load or distorts data, the connection is disabled without a trace in the production environment.

What the client receives: stand, diagrams, regulations

We deliver the paper trading stand not “as is,” but as a package your team can use to launch and verify it without our involvement. The handover includes configurations, diagrams, access rules, and regulations — the list of artifacts is below.

  • Stand configurations: environment files, strategy parameter sets, run scenarios, and starting conditions under which the result is reproduced again.
  • Integration diagram with trading venues: which streams run in real time, which are taken from history, where buffers are placed, and how a connection break is handled.
  • Access rules and roles: separation into observer, analyst, and administrator, separate keys to test accounts, user action log.
  • Calibration report: how the order and trade flow was reconciled with the benchmark source, what divergences were found, how they were closed, and what remained in known limitations.
  • Test stand documentation: module descriptions, input data formats, extension points for connecting new venues and instruments.
  • Support regulations: frequency of reference data updates, procedure for source stoppage, who receives the alert, and within what timeframe.
  • Acceptance checklist: scenarios that are run on your side before the stand becomes operational.

How we transfer knowledge to the team

We conduct a walkthrough of the stand with your engineers: show launch, manual intervention in parameters, and metric collection. Your team independently runs one scenario from start to finish — this is an acceptance condition, not a formality.

After that, support follows the support regulations: you make strategy edits yourselves, while we take on expanding integrations.

Case study: reduced the gap between testing and real trades

At the start of the project, forward testing was calculated on historical candles: an order was closed at the bar price, delivery delays and partial executions were not taken into account.

The reports converged with each other but diverged from real trades — the entry price did not match in about a third of cases, and strategy decisions were made on data the team did not trust.

Trade execution model and latency accounting

The stand was rewritten to replay a recorded exchange order book through a connector to Binance: an order is queued and executed based on available liquidity, partial volume, commission, funding rate are taken into account, and separately — the delay between signal and order placement.

It was captured by measurements in the production environment and inserted into the simulation. The run is tied to a data snapshot and parameter version, so a repeated launch produces an identical result — previously, floating settings made comparing runs meaningless.

We compared three metrics: the entry price divergence fell from a third of cases to 4%, the gap in average return between the stand and the live account narrowed from 40% to 6%, and the daily historical run accelerated fourfold.

Transferring stand settings to the production environment

Settings no longer live in two places: a snapshot of parameters — commissions, delays, volume limits — is exported from the stand and inserted into the production module as is, with divergences logged.

If a strategy on the stand and on the account diverges beyond the threshold, the run is marked unreliable: this catches a configuration error before it becomes a loss.

How forward testing differs from backtesting

Backtesting works with a fixed dataset: the entire series is already in storage, and the strategy sees the market in full. This is convenient for quickly filtering out hypotheses — thousands of parameter combinations are checked in one run.

The flip side is that a smooth return curve is obtained too easily here: overfitting to the past meets almost no resistance.

A forward test, or paper trading, takes the same strategy core but receives data one candle at a time — without access to the future.

Signals are calculated on incoming data, and trades do not go to the network: execution is emulated based on the current order book with commission and slippage. The strategy behaves the same as it would in live trading, but without the risk of losing funds.

Only in this mode do things become visible that are not in saved history: slippage on a thin order book, partial executions, the pause between signal and order placement, behavior after a connection break and restart. A historical sample smooths out such details and therefore does not show them.

The main thing forward testing catches is strategy overfitting. On history, parameters are tuned to a beautiful curve that falls apart on the first unfamiliar market segment.

Testing on incoming data runs over a segment that did not exist during tuning and shows the real resilience of the logic, not the quality of the fit.

Therefore, one approach is not enough: history answers the question “what would have been,” while forward testing answers “what is happening now, while the market moves on its own.” The first filters out obviously weak ideas; the second confirms that the rules survive on unfamiliar data and that the result did not fall apart along with the tuning.

Technical questions before project start

Before the project starts, clients bring the same set of engineering doubts: whether the execution model in paper trading will turn out to be too “greenhouse,” whether there is enough historical data, and whether the simulator will start interfering with the production environment. The short answers below usually resolve these questions before discussing estimates and the plan.

How closely does the execution model match a real trade?

The simulator does not “draw” an ideal price — an order is matched against opposing quotes taking into account the spread, slippage, and partial execution of volume.

We model commissions, order delivery delay, and limit triggers, so the divergence from a production launch remains in single-digit percentages, not multiples.

What are the requirements for historical data?

A continuous quote series with a uniform step and a complete set of fields, including volume, is required. We check history for gaps, duplicates, and session breaks before test start — otherwise the chart shows trades at a price that did not exist at that moment.

What should be done with rare instruments?

For low-liquidity securities and pairs, we bring up saved order book snapshots and calculate execution at the worst available price. If there is objectively little data, we mark the instrument as limited-testable — its result is not mixed with the overall statistics.

Will the simulator load the production trading environment?

The test environment is isolated: its own account, separate data stream, request rate limit. Production strategies do not see test orders, and the simulator's peak load does not add delays to real trades.

What changes in the system after handover?

We hand over the configuration, order matching rules, expansion documentation, and a set of regression scenarios. A new instrument or field in the execution model is added by editing the configuration, without rewriting the core.

Let’s discuss the task of testing your strategies

To make the project estimate accurate rather than approximate, we need a snapshot of your infrastructure and of what exactly the paper trading system should show.

Below is what to send in the first message: using this list, we will record the system requirements and return with a staged implementation plan.

  • Strategy descriptions: entry and exit logic, indicators and timeframes used, how signals are calculated now — manually, in spreadsheets, or already in code.
  • Data sources: venues and instruments, required history depth, whether a real-time quote stream is needed and at what update frequency.
  • Environment diagram: how many environments are needed — backtest, paper trading on a live stream, reconciliation with real trading — and how they are connected to each other.
  • Reporting requirements: which metrics to calculate (return, drawdown, share of profitable trades), in what form to deliver them — monitoring dashboard, table export, regular report.
  • Constraints: deadlines, access to venues and data, permission separation rules, systems to integrate into.
  • Current work: what already exists and must be preserved, and what can be replaced without losing the logic.

With this set, we will analyze bottlenecks, record the system requirements, and return with a project estimate and implementation plan. If some data has not been collected yet, describe it in words; we will ask clarifying questions ourselves.