# Execution-quality research — current dry-run baseline

Captured: `2026-07-29`

Scope: read-only evidence refresh for the active remote
`VolatilityBreakoutRiskCap` dry-run. No production setting, order policy, bot
state, or exchange account was changed.

## Runtime

- Host: `43.164.75.52`
- Container: `freqtrade`
- Strategy: `VolatilityBreakoutRiskCap`
- Strategy path:
  `/freqtrade/user_data/strategies/volatility_breakout`
- Database: `/data/freqtrade/user_data/tradesv3-v5.sqlite`
- Window start: active RiskCap container start,
  `2026-07-23T08:50:52Z`
- Mode: dry-run, 5m, isolated futures
- Entry: passive limit, `price_side=same`
- Exit protection: exchange-style stop-market simulation

## Current aggregate

Across both `freqtrade.log.1` and `freqtrade.log`, with duplicate rotation
events removed:

- closed trades: 10;
- limit-entry opportunities retained in the database/log denominator: 10;
- filled: 10/10 (100%);
- partial fills: 0;
- zero-fill cancellations: 0;
- fill latency: median 6.6s, P90 34.9s, maximum 57.0s;
- closed stop exits: 10;
- reported stop slippage: 0.000% for all ten.

There are two open protective stop orders, for XRP and ETH. They are correctly
classified as protective stops rather than pending entry/exit orders.

This six-day cohort is provisional and does not replace the longer
2026-07-07–2026-07-28 record:

- historical dry-run zero-fill rate: 4/47 = 8.5%;
- historical latency: median 6.6s, P90 39.8s, maximum 57.0s.

The new sample introduces no evidence that requires reopening the existing
`price_side=same` versus `other` decision.

## Capacity refresh

The latest available entry-conditioned audit remains constrained by POWER:

- maximum order notional is 30% of wallet under RiskCap;
- POWER minimum observed entry-bar turnover: 9,183 USDT;
- account ceiling at 0.5% / 1% / 2% of a 5m entry bar:
  153 / 306 / 612 USDT;
- a 280 USDT verification wallet would submit at most 84 USDT notional,
  approximately 0.91% of that worst observed POWER entry bar.

The result uses 24 historical entry bars. It measures bar participation, not
real order-book queue position or stop-market sweep cost.

## First unresolved divergence

The first unmeasured stage is:

```text
submitted passive limit order
  -> real exchange queue position
  -> actual fill / zero-fill cancellation
```

For exits it is:

```text
stop trigger
  -> real market order
  -> order-book sweep
  -> actual average fill
```

Dry-run deterministically reports stop price equal to fill price and has no
exchange queue model. Therefore its 0.000% stop slippage and current 100% fill
rate cannot resolve either question.

## Decision

- Keep `price_side=same`; do not implement another offline entry filter.
- Do not interpret the new 10-trade sample as proof of 100% real fill.
- The next discriminating experiment is the already frozen 280 USDT,
  20-closed-trade live execution measurement in
  `docs/live-verification-runbook.md`.
- Starting that experiment requires separate explicit authorization, exchange
  credentials supplied by the user, and confirmation of the fixed stop
  conditions. This Stage 0 audit does not authorize or start it.

