# MAKER_OPT Conviction Strategy

## Overview

This is the production trading strategy for txocap. It combines:
- Multi-exchange tape reading for signal generation
- Absorption detection as the primary entry signal
- Maker limit orders for execution
- Conviction-weighted position sizing
- Volatility gating to avoid untradeable regimes
- Fast trailing stops calibrated to the statistical edge decay

## Performance (backtested on 24 hours, 6 sessions)

| Metric | Value |
|--------|-------|
| Starting capital | $500 |
| Final capital | $609.38 |
| Return | **+$109.38 (+21.9%)** |
| Max drawdown | **1.61%** |
| Trades | 19 |
| Win rate | **84%** |
| Stop-losses | 2 |
| Total fees | $50.25 |
| Profit factor | 17.5 (best session) |

Backtested 5 times with zero variance.

## Entry conditions

### Signal requirements
- Composite score absolute value > 0.50 (configurable)
- Delta absolute value > 0.25
- Volume surge > 2.5x recent average
- Exchange concentration < 65% (slow window)

### Absorption detection (primary entry)
- Delta direction opposes price movement
- Delta absolute > 0.30
- Price move > 0.5bps
- Volume surge > 2.5x
- This is the statistically validated edge: t=8.89 on 134 events

### Volatile momentum (secondary entry)
- Range > 60bps (volatile regime)
- Volume surge > 3x
- Delta > 0.40, aligned with price
- Score > 0.55

### Regime gate
- Realized volatility (5-min rolling from orderbook mid) must be > 5 bps/minute
- Average notional per bar must be > $500k
- Below these thresholds: no trade (market is too quiet for our edge to manifest)

### Dead range gate
- 5-min orderbook mid range must be > 10bps
- Below this: no trade

## Position sizing

### Base risk
- 1.5% of current equity per trade

### Conviction multiplier
Applied on top of base risk, capped at 0.25x to 3.0x:

| Factor | Condition | Multiplier |
|--------|-----------|-----------|
| Score tier | 0.50-0.59 | 0.75x |
| Score tier | 0.60-0.69 | 1.0x |
| Score tier | 0.70-0.79 | 1.25x |
| Score tier | 0.80+ | 1.5x |
| Regime | volatile (range > 30bps) | 1.25x |
| Signal type | absorption detected | 1.2x |
| Win streak | 2+ consecutive wins | 1.15x |
| Loss streak | 1 loss | 0.75x |
| Loss streak | 2+ losses | 0.5x |

### Effective risk range
- Minimum: 1.5% × 0.25 = 0.375% of equity
- Maximum: 1.5% × 3.0 = 4.5% of equity
- Typical winning trade: 1.5% × 1.25-1.5 = 1.875%-2.25%

### Size computation
```
maxRiskUsd = equity × riskPct
netRiskPerBtc = price × (stopBps / 10000) + price × (feeRoundtrip / 10000)
sizeByRisk = maxRiskUsd / netRiskPerBtc
sizeByNotional = maxNotionalUsd / price
positionSize = min(sizeByRisk, sizeByNotional)
```

## Stop and target computation

### Stops
- Minimum: 8 bps
- Computed: max(8bps, range × 0.4)
- Capped: min(computed, range × 0.6)

### Targets
- Regime-adaptive from orderbook-measured range
- TP1: range-based, capped at 70% of realized range
- TP2: max(TP1 × 1.5, range × 0.65-0.95)
- Both must exceed fee breakeven

## Exit management

### Trailing stop
- Activates when unrealized profit > 5bps
- Trails at 45% of best unrealized
- Example: if best profit was 20bps, trail triggers at 11bps

### Time exit
- Maximum hold: 120 seconds (2 minutes)
- If in profit > 2bps at max hold: exit at market
- If held 2x max hold (4 minutes): force exit regardless

### TP1 hit
- Close full position at TP1 target price

### Stop-loss
- Hard stop at computed stop price

## Cooldowns

| Cooldown | Duration | Trigger |
|----------|----------|---------|
| Entry cooldown | 300 seconds (5 min) | After any trade |
| Loss cooldown | 600 seconds (10 min) | After any stop-loss |
| Direction cooldown | 300 seconds (5 min) | After 2 consecutive same-direction losses |

## Fee assumptions

| | Maker | Taker |
|---|------|-------|
| Entry | 2.0 bps | 5.5 bps |
| Exit | 2.0 bps | 5.5 bps |
| Round-trip | 4.0 bps | 11.0 bps |

The strategy is designed for **maker execution on both entry and exit**. At taker rates, the edge is sub-fee and the strategy is net negative.

## Fill model (for simulation)

- Limit order at best bid/ask
- Up to 3 chase attempts with 20-second gaps
- Fill requires price to cross our posted level within the chase window
- If no fill after 3 attempts: trade abandoned

## Exchange weighting

| Exchange | Weight | Rationale |
|----------|--------|-----------|
| BYBIT | 1.00 | Execution venue |
| BINANCE | 0.95 | Largest flow but slight discount |
| OKX | 0.90 | Good flow, not a lead exchange |
| COINBASE | 1.20 | Strongest lead signal (t=2.48) |
| KRAKEN | 0.80 | Low volume |
| HYPERLIQUID | 0.60 | Bursty DEX flow |
| DYDX | 0.50 | Thinnest venue |

Coinbase gets a 1.2x weight boost because its delta is the most predictive of next-bar returns across all exchanges.

## Statistical basis

### Absorption signal
- 134 events across 20 hours
- Mean delta-aligned return: +2.4 bps at 10s (t=8.89)
- Significant at every horizon from 10s to 300s
- Edge decays after 120 seconds

### Order flow imbalance
- Peaks at 60s forward (t=4.02, +0.36bps)
- Decays to noise after 120s

### Return autocorrelation
- Strong 10s mean-reversion (AC=-0.345)
- Weak 60s momentum (AC=+0.035)

### Volatility clustering
- Significant at all lags 10s-120s
- Validates the regime-based approach

### Regime returns
- Quiet: avg 10min move 6bps (sub-fee, don't trade)
- Ranging: avg 7.8bps (marginal, don't trade)
- Breakout: avg 10.8bps (delta is coin-flip, don't trade)
- Volatile: avg 17.7bps, 63% produce >10bps moves (TRADE HERE)
