← Back to Reviews
20260115_044957_micro_mr_eth_quality.md
# AI Review: micro_mr_eth_quality (1-Minute)
**Date:** Thu Jan 15 04:49:57 CET 2026
**Strategy File:** /root/trade_1m/strategies/micro_mr_eth_quality.py
---
```json
{
"score": 35,
"flags": [
"overfitting",
"execution",
"cost_sensitive",
"concentration"
],
"review": "## Critical Issues\n\n### 1. **Same-Bar Execution Fatal Flaw**\n\nThe strategy computes indicators on bar `i` and makes entry decisions on the SAME bar:\n\n```python\nbar = bars[i]\ncurrent_rsi = rsi_vals[i]\ncurrent_z = compute_zscore(closes, zscore_lookback, i)\nvwap_val = vwap(bars, vwap_period, i)\n```\n\nThen immediately enters:\n\n```python\nif (rsi_recovery and z_recovery and vwap_deviation < -vwap_stretch and is_bullish_bar):\n actions.append({'action': 'open_long', ...})\n```\n\n**Problem**: You cannot know if `bars[i]` is bullish/bearish until bar close. At 1-minute timeframes, this is severe lookahead bias. Real execution would occur on bar `i+1` with potentially very different conditions.\n\n**Impact on Results**: The strategy relies heavily on `is_bullish_bar` and `is_bearish_bar` confirmations. These are unknowable intra-bar. With +1 bar delay:\n- Entry signals would trigger too late (reversion already started)\n- \"Recovery\" patterns would be stale\n- Edge would collapse\n\n---\n\n### 2. **Excessive Complexity = Overfitting**\n\nEntry requires 6 simultaneous conditions:\n1. RSI < oversold threshold\n2. RSI rising from previous bar\n3. Z-score < negative threshold \n4. Z-score rising from previous bar\n5. VWAP deviation > minimum\n6. Bullish/bearish bar confirmation\n\nPlus ATR volatility filter and body size requirement.\n\n**Why This is Problematic**:\n- Each condition narrows the opportunity set\n- Combined conditions create \"magic moments\" that fit historical data\n- Requires RSI AND z-score to BOTH be recovering simultaneously - extremely specific\n- Trade count (440, 566, 434, 161, 317, 393) varies 3.5x across years, suggesting parameter sensitivity\n\n**Generic Pattern**: When a strategy needs 5+ conditions to fire, it's often finding rare historical coincidences rather than robust patterns.\n\n---\n\n### 3. **Exit Logic Inconsistency**\n\nExit trigger:\n\n```python\nif pos.side == 'long' and bar.close >= vwap_val:\n should_exit = True\n```\n\n**Problem**: This is ALSO same-bar lookahead. You don't know `bar.close` until the bar completes. \n\n**Secondary Issue**: Exit on \"VWAP touch\" sounds good in theory, but:\n- VWAP is a lagging moving average\n- At 1-minute scale, price whipsaws around VWAP constantly\n- Exit timing would be inconsistent and slippage-heavy\n- No fixed take-profit means outcomes are path-dependent\n\n---\n\n### 4. **Cost Analysis Red Flags**\n\nThe strategy reports:\n- Avg trade: ~0.095% (based on 209% return / 2311 trades)\n- Required minimum: 0.10% to cover 5bp slippage\n\n**This barely clears the cost floor**, and that's BEFORE accounting for:\n- Same-bar lookahead bias correction\n- Bid-ask spread (additional 1-2bp on ETHUSDT)\n- Market impact on larger sizes\n- Exchange fees (even with maker rebates)\n\n**Realistic Net Edge**: After execution delays and costs, likely negative.\n\n---\n\n### 5. **Parameter Specificity Concerns**\n\nParameters show optimization fingerprints:\n- `rsi_oversold: 30, rsi_overbought: 70` - reasonable\n- `zscore_threshold: 1.5` - oddly specific (why not 1.0 or 2.0?)\n- `vwap_stretch_min: 0.20%` - very precise\n- `max_atr_zscore: 1.5` - matches z-score threshold (coincidence?)\n- `cooldown_bars: 480` (8 hours) - arbitrary\n\nThe fact that z-score threshold and ATR z-score threshold are IDENTICAL (1.5) suggests parameter coupling from optimization.\n\n---\n\n### 6. **Validation Period Concerns**\n\nMonthly returns show high variance:\n- Year with 65.6% return vs year with 11.0% return\n- Trade counts: 161 to 566 (3.5x difference)\n- Sharpe ranges: 2.50 to 5.28\n\n**This suggests**:\n- Strategy performs very differently across market conditions\n- Not a robust microstructure edge (those should be more stable)\n- Likely capturing specific volatility regimes that may not repeat\n\n---\n\n### 7. **Concentration Risk**\n\nWith only ~50-90 trades per month (based on 2311 total over years), individual trades matter significantly:\n- A few lucky outliers can swing results\n- 53% win rate means ~50/50 coin flip\n- Without fixed take-profit, fat-tail wins could dominate PnL\n- Removing top 10% of trades would likely crater returns\n\n---\n\n## Strengths\n\n- **Cooldown mechanism** (8 hours) does enforce trade selectivity\n- **Round parameters** (RSI 30/70, periods of 5, 20, 60) show some restraint\n- **Volatility filter** (ATR z-score) is a legitimate 1m concern\n- **No trend-following component** - appropriate for mean reversion\n\n---\n\n## Fatal Verdict\n\nThis strategy cannot survive real execution because:\n\n1. **Same-bar decisions are lookahead bias** - results would collapse with proper +1 bar delay\n2. **Edge is too thin** - avg trade barely exceeds cost floor even WITH lookahead bias\n3. **Overfit complexity** - 6+ conditions required for entry is curve-fitting\n4. **Inconsistent performance** - 3.5x variance in trade frequency across years\n\n**Estimated Real Performance**: -5% to +2% annually after fixing execution and costs.\n\n---\n\n## What Would Fix This\n\n- **Execution**: All indicators on bar `i-1`, decisions on bar `i`\n- **Simplification**: Pick RSI OR z-score, not both\n- **Edge validation**: Avg trade should be 0.15%+ even with +1 bar delay\n- **Fixed exits**: Use concrete profit targets, not dynamic VWAP touch\n- **Stability test**: Trade count variance across years should be <2x\n\n---\n\n## Bottom Line\n\nThis looks like a heavily optimized strategy that found historical patterns but lacks a genuine microstructure edge. The same-bar execution alone disqualifies it from production use.",
"rule_suggestion": "Require all 1-minute strategies to demonstrate indicator calculation on bar N-1 and decision execution on bar N (never same-bar). Additionally, enforce that average trade PnL must exceed 0.15% after applying +1 bar execution delay in backtests, not just on raw signals."
}
```