---
title: "Backtesting, data pipelines and risk controls · Oxarus Quant"
description: "Pipelines that clean market data, tests purged of look-ahead bias and risk controls that protect live systems. We build them for institutions, too."
url: https://oxarus.com/en/quant/engineering
key: quant-engineering
route: /quant/engineering
unit: quant
locale: en
status: live
alternates:
  tr: https://oxarus.com/tr/quant/engineering
  en: https://oxarus.com/en/quant/engineering
documents:
  json: https://oxarus.com/machine/en/quant/engineering.json
  jsonld: https://oxarus.com/machine/en/quant/engineering.jsonld
  txt: https://oxarus.com/machine/en/quant/engineering.txt
schema: oxarus.machine/2.0
---

# Backtesting, data pipelines and risk controls · Oxarus Quant

> Pipelines that clean market data, tests purged of look-ahead bias and risk controls that protect live systems. We build them for institutions, too.

Breadcrumbs: [Oxarus home](https://oxarus.com/en) › [Oxarus Quant](https://oxarus.com/en/quant) › [Engineering](https://oxarus.com/en/quant/engineering)

## Notices

- Interface data marked as representative is illustrative; it is not a real client, result or measurement.
- Not investment advice. Trading in financial markets carries a risk of losing capital.

## Sections

- [from data to live.](#hero)
- [where backtests go wrong.](#pitfalls)
- [two sources, minute by minute.](#feeds)
- [five checks before every order.](#breakers)
- [we build it for you, too.](#services)
- [let's build your infrastructure.](#cta)

<a id="hero"></a>
<!-- section:hero component:EngineeringHero kind:hero sources:messages:quantEngineering.hero -->

## from data to live.

_QUANT · ENGINEERING_

Building systems that trade our own capital taught us what belongs in the infrastructure: pipelines that verify data, tests closed to look-ahead bias and risk controls that halt a live system when they have to.

<https://oxarus.com/en/quant/engineering>

- [Institutional project](https://oxarus.com/en/quant/engineering#cta-heading) → `open_page(path="/quant/engineering", anchor="cta-heading")`
- [Risk controls](https://oxarus.com/en/quant/engineering#breakers) → `open_page(path="/quant/engineering", anchor="breakers")`

- Tests guarded against look-ahead bias
- Verified against two independent data sources
- Automatic circuit breakers in production

1. Data
2. Test
3. Live

<!-- demo:start messages:quantEngineering.hero.demo -->
_Representative interface data_ · Representative flow diagram.

- **file:** research-to-live
- **tag:** Representative flow

- **data:** Data
- **test:** Test

> Live

**Broker data**

- **detail:** EURUSD · M1

**Reference data**

- **detail:** independent second source

**Clean and compare**

- **detail:** median diff 0.20 pip

**Features**

- **detail:** previous bar only

**Backtest**

- **detail:** hourly spread distribution

**Walk-forward**

- **detail:** unseen period

**Risk gate**

- **detail:** 5 checks before every order

**Live**

- **detail:** order flow

**Monitoring**

- **detail:** event log and alerts

- **bars:** 2.4M minutes
- **delta:** median diff 0.20 pip
- **lookahead:** look-ahead: 0
- **breakers:** 5 circuit breakers armed

<!-- demo:end -->

<a id="pitfalls"></a>
<!-- section:pitfalls component:AuditSuite kind:features anchor:#pitfalls-heading sources:messages:quantEngineering.pitfalls -->

## where backtests go wrong.

_TESTING_

Most systems that look good on historical data are feeding on a flaw in the test itself. Pick one to see the flawed test, the corrected pipeline and the automated checks side by side.

<https://oxarus.com/en/quant/engineering#pitfalls-heading>

- **Look-ahead**
  - **Flawed test:** The day's close leaks into an intraday decision.
  - **Corrected pipeline:** The read window ends before the current bar; anything after it is out of reach.
  A value that's only known at the end of the day gets used during the day.
  Every calculation draws only on the previous bar and earlier. We don't leave this to code review: by design, the data access layer can't see the future.
- **Synthetic ticks**
  - **Flawed test:** A four-point synthetic path fills at prices that never traded.
  - **Corrected pipeline:** The real tick path: every fill rests on a price that was actually seen.
  Fake price paths generated from minute bars create fills that never happened.
  We rerun critical results on real tick data and a second feed source.
- **Overfitting**
  - **Flawed test:** One bright cell: results fall apart at neighboring settings.
  - **Corrected pipeline:** A broad, stable region: the chosen setting's neighbors hold up too.
  The best of hundreds of parameter combinations is picked and assumed to stay the best.
  We choose parameters in one period and test them in a period they've never seen. Settings that don't hold at neighboring values are discarded.
- **Survivorship**
  - **Flawed test:** A universe built from today's list never sees delisted instruments.
  - **Corrected pipeline:** Every instrument trading on that date, including those removed later.
  The test only uses instruments that still exist today.
  The test universe is built from instruments that were actually available on that date.
- **Unrealistic costs**
  - **Flawed test:** A fixed spread every hour: no session differences, no news widening.
  - **Corrected pipeline:** Spread distribution by hour, with spikes around news preserved.
  Spread, commission and slippage are assumed to be zero or fixed.
  We use the real spread distribution by hour and session, including widening around news.

**Audit suite**

- **count:** {passed} / {total} passed

> If any audit is red, the change does not merge into the main branch.

- **run all:** Run all
- **queued:** queued
- **passed:** passed
- **pass:** pass
- **fail:** fail
- **representative:** Representative output

_Interface labels:_ Symptom · How we catch it · Automated checks · running

<a id="feeds"></a>
<!-- section:feeds component:FeedParity kind:content anchor:#feeds-heading sources:messages:quantEngineering.feeds -->

## two sources, minute by minute.

_DATA_

We compare the broker feed against an independent reference source, minute by minute. 1,721 shared trading days, 2.4 million shared minutes.

<https://oxarus.com/en/quant/engineering#feeds-heading>

- **Median:** 0.2
- **90th percentile:** 0.4
- **99th percentile:** 1.8
- **Largest difference:** 16.8
- **unit:** pip

Most of the time, the difference is a fifth of a pip. That's why we can verify our results without depending on any single broker's data.

- **overlay:** Same minutes, two sources
- **histogram:** Distribution of minute-close differences

> The shape of the distribution is representative; the marked percentiles and the largest difference are measured.

- **histogram sample:** n = 2.4M · square-root scale
- **source a:** Broker
- **source b:** Reference
- **Shared trading days:** 1,721
- **Shared minutes:** 2.4million
- **Daily range difference, median:** 0.2pip
- **representative:** Representative path
- **measured:** measured
- **jump max:** Jump to the largest gap
- **validated:** validated

_Interface labels:_ Minute

<a id="breakers"></a>
<!-- section:breakers component:RiskGateway kind:features anchor:#breakers sources:messages:quantEngineering.breakers -->

## five checks before every order.

_RISK_

Every order the live system sends passes these checks. Trip one, then send a test order to see which check stops it.

<https://oxarus.com/en/quant/engineering#breakers>

- **Daily loss limit**
  Intraday loss has hit the limit
  No new trades open, open trades close according to the rules, and the system stays locked until the end of the day.
- **Spread guard**
  Spread has widened to 4× normal
  Pending orders are suspended, and no entries are made until the spread normalizes.
- **News window**
  High-impact release within 10 minutes
  No new trades open during the window, and stops are not widened.
- **Connection loss**
  Server unresponsive for 20 seconds
  No orders are sent until the connection is restored; on reconnect, positions are reconciled with the server.
- **Exposure cap**
  Total risk in one currency is at the cap
  No new positions involving that currency are opened.

- **status:** System status
- **representative:** Representative screen

**Test order**

Send an order through the gate and see which check passes and which one stops it.

- **send:** Send test order
- **accepted:** Order accepted
- **rejected:** Order rejected · {name}
- **accepted count:** accepted
- **blocked count:** blocked

_Interface labels:_ Trip · Reset · Armed · Tripped · Order flow open · Order flow halted · Re-arming controls · Running checks

<a id="services"></a>
<!-- section:services component:ServiceCards kind:features anchor:#services-heading sources:messages:quantEngineering.services -->

## we build it for you, too.

_INSTITUTIONAL_

We build the infrastructure we run our own research and live systems on around your organization's data and processes.

<https://oxarus.com/en/quant/engineering#services-heading>

- **Data pipelines**
  Infrastructure that collects, cleans and stores price and news data from multiple sources.
  **Tools used**
  Python · Polars · Parquet · PostgreSQL
  **DELIVERABLES**
  - Source connectors and scheduled pulls
  - Dual-source comparison and quality report
  - Versioned, queryable data store
- **Testing infrastructure**
  An environment where your team can test strategies free of look-ahead bias.
  **Tools used**
  Python · NumPy · pytest · Docker
  **DELIVERABLES**
  - Look-ahead-safe data access layer
  - Walk-forward and parameter robustness reports
  - Reproducible, containerized test environment
- **MetaTrader 5 tooling**
  Robots, panels, bridges and reporting tools built for institutional use.
  **Tools used**
  MQL5 · C++ · MetaTrader 5 · REST
  **DELIVERABLES**
  - Robot, panel and indicator development
  - Bridges between MetaTrader 5 and external systems
  - Source code and setup documentation
- **Risk and monitoring dashboards**
  Dashboards that show account exposure, limits and system health on a single screen.
  **Tools used**
  TypeScript · Next.js · WebSocket · PostgreSQL
  **DELIVERABLES**
  - Per-account exposure and limit view
  - Circuit breaker states and event log
  - Instant alerts on threshold breaches

- **representative:** Representative

<a id="cta"></a>
<!-- section:cta component:StudioCta kind:cta anchor:#cta sources:messages:quantEngineering.cta -->

## let's build your infrastructure.

_ENGINEERING_

Tell us what you need, whether it's a data pipeline, a test environment or a risk dashboard, and we'll define the scope and approach together.

<https://oxarus.com/en/quant/engineering#cta>

- [Send a project request](https://oxarus.com/en/contact?start=quant) → `start_project_brief(topic="quant")`
- [info@oxarus.com](mailto:info@oxarus.com?subject=Institutional%20quant%20project) → `contact(subject="Institutional quant project")`

## Actions

- [Institutional project](https://oxarus.com/en/quant/engineering#cta-heading) → `open_page(path="/quant/engineering", anchor="cta-heading")`
- [Risk controls](https://oxarus.com/en/quant/engineering#breakers) → `open_page(path="/quant/engineering", anchor="breakers")`
- [Send a project request](https://oxarus.com/en/contact?start=quant) → `start_project_brief(topic="quant")`
- [info@oxarus.com](mailto:info@oxarus.com?subject=Institutional%20quant%20project) → `contact(subject="Institutional quant project")`
- [Türkçe](https://oxarus.com/tr/quant/engineering) → `switch_locale(locale="tr", path="/quant/engineering")`

## Related pages

- [Oxarus Quant](https://oxarus.com/en/quant)
