← Notes
How we trade levels
strategy·trading·zones·execution

How we trade levels

Zone engine, MTF confluence, limit-entry maker mode, Sharpe-weighted sizing, funding overlay. The intraday side, end to end.

· Mikhail Savchenko · Updated

The trading sleeves are short-horizon plays on perp/spot venues — intraday levels, zones, mean-reversion at clusters. Different time constant, different code path, different DB. This post walks through how a single trade is born, sized, executed, exited.

What we look for: zones, not levels

A “level” is a single price. A zone is a price band where the order flow has historically defended itself — wicks reject from inside the band, breaks from inside the band hold, retests of the band hold or fail predictably. Zones survive being touched many times; levels often don’t.

We build zones from:

  • Multi-timeframe pivots — daily/4h/1h confluence at a price band.
  • Volume profile — POC + value area extremes.
  • Wyckoff structure — accumulation/distribution boundaries on HTF.

A zone needs at least two of these three to qualify. Single-source zones are noise.

Confluence scoring

Every potential setup gets a confluence score. We tried the standard A/B/C grading — most desks do. Found something counterintuitive in backtest: Grade A trades underperformed Grade B. Reason: A-grade setups are obvious, the order flow defends them aggressively, and entry slippage eats 30–50% of the expected R. Grade B setups have less pre-positioning, give cleaner fills.

So we eliminated Grade A scoring and run “C-filter, B-only” — anything above the C threshold and at or below B in confluence quality. The counter-intuitive empirical thing wins. WR went from 54% to 58%, R contribution +61%. The full comparison data and the reasoning we landed on after a year of running A and B side by side is in why we deleted A-grade signals.

Entry: limit-only, maker mode

We don’t market-buy zones. The whole point is the zone defending itself; if we have to chase, the zone failed. Limit orders sit at the zone boundary, maker mode (negative fees on Binance perps), with a time-out — if the order isn’t filled in N candles, we cancel and re-evaluate.

The TWAP-slicing infra exists but we rarely use it on intraday — the trade size is small enough to fit one limit order, and slicing introduces fill-uncertainty we don’t want on a 5m trade.

Sizing: Sharpe-weighted + funding overlay

Two layers:

  1. Sharpe-weighted base size. Each strategy variant has a rolling Sharpe over the last 60 days. Sizing is proportional to Sharpe — a variant with 1.8 Sharpe gets ~2x the base size of one at 0.9. Below 0.5 Sharpe, sizing collapses to zero (we don’t trade variants that aren’t earning their keep).

  2. Funding overlay. Binance perp funding is real money. If funding is favorable to our direction (we’re short and funding is positive, or vice versa), we add to size. If funding is hostile, we subtract. Cap at ±25%. Net effect across the book is a free 8-15% return improvement that costs nothing — funding is leaking onto the table anyway.

Exit: conviction-weighted, not time-based

We don’t exit at a fixed R-multiple. We exit when:

  • Price reaches the inverse zone (the zone on the other side that forms the natural take-profit). 80% of exits are these.
  • The thesis breaks — price closes through the entry zone in the wrong direction with volume. Stop. Cut.
  • Conviction degrades — order flow stops defending, the structure that justified the entry has expired (HTF candle closed differently than expected, etc).

The “conviction” model is a small calibrated thing — half rules, half read of order flow features (cumulative delta, OI changes, taker imbalance). It’s not a black-box ML model. It’s transparent enough that an operator can override it from the cockpit.

VCA + open interest

We added an absorption-style filter (VCA — vertical close-down/up absorption) earlier this year. Specifically: at a zone, we look at how OI changes during the wick. OI rising during a defended wick = absorbing flow at the level = strong defense. OI falling = squeeze, less reliable.

VCA + OI added +11.7pp to win rate on the variants where we backtest’d it. Q-learning exit (we tried) underperformed fixed rules at the same horizon. We went back to fixed rules.

The current shape of the book

90 days back, the live paper book sits at:

  • WR: 54.8%
  • Avg R: +9.34R total = ~$4.7k notional
  • Maker mode active, fee P&L net positive
  • Grade B trades only, +10R contribution

These aren’t return-of-the-decade numbers. They’re consistent. The trading sleeve runs alongside the long sleeves on the same user balance — see the non-linear balance post for how cash, NAV, and margin compose into a single tree.

What we don’t do

  • News trading. No NLP, no headline reactions. The signal is too fast for our infrastructure latency anyway, and the alpha decay is brutal.
  • HFT. Our latency budget is “human noticeable” — the trade idea needs to be sound for at least 5 minutes. Anything faster lives in the sub-millisecond world we can’t compete in.
  • Leverage stacking. Max 3x effective notional. We’ve stress-tested 4x and the tail risk isn’t worth the upside.

The trade-as-project model

Every trade has its own state machine: prepared → open → scaling-in → defended → exiting → closed. The state lives in tm_strategy_snapshots and is replayable. If the engine restarts mid- trade, it picks up where it left off — orders still active on venue, position still in tm_positions, snapshot still in DB.

You can ask the MCP get_trading_account(strategy_id="paper_levels_bob") and get back the full state: cash, NAV, margin used, realized + unrealized PnL, last snapshot timestamp. From a chat window. While the trade is still alive.

The whole sleeve is opinionated software running a defensible methodology. It’s not a black box; it’s a few thousand lines of code that you can read line by line in the repo.

Related notes
All notes →