← Back to Reviews
20260115_020251_micro_mr_rsi_vwap_btc.md
# AI Review: micro_mr_rsi_vwap_btc (1-Minute)
**Date:** Thu Jan 15 02:02:51 CET 2026
**Strategy File:** /root/trade_1m/strategies_rejected/micro_mr_rsi_vwap_btc.py
---
```json
{
"score": 35,
"flags": [
"overfitting",
"cost_sensitive",
"execution",
"inconsistent"
],
"review": "## Critical Issues\n\n### 1. Severe Overfitting to Historical Period\n\nThe strategy shows **extreme performance degradation** between different time periods:\n- One year shows 25.2% return with 4.36 Sharpe (exceptional)\n- Validation period shows -1.82% return with -1.34 Sharpe (catastrophic failure)\n- Other years range from 0.2% to 10.2%\n\nThis is textbook overfitting. The strategy likely captured noise in the best-performing period rather than a genuine microstructure edge. **A robust 1-minute strategy should show consistent behavior across market regimes**, not 25x variation in Sharpe ratio.\n\n### 2. Cost Sensitivity - Edge Too Thin\n\nWith average trade of ~0.15-0.20% (inferred from returns/trades) and 0.10% round-trip slippage:\n- Edge-to-cost ratio is only ~1.5-2x\n- This leaves **zero margin for execution slippage** in practice\n- At 1-minute timeframe, same-bar execution is impossible - you get next bar at best\n- Real fills will be worse than close price, especially at session extremes\n\nThe strategy generates 1,300+ trades over training period. At this frequency, even small execution shortfalls compound catastrophically.\n\n### 3. Dangerous Execution Assumptions\n\n**Same-candle entry/exit problem:**\n```python\n# Checks current bar close position vs extremes\ndist_to_high = (session_high - bar.close) / bar.close * 100\n```\n\nAt 1-minute resolution:\n- You can't know `bar.close` until the minute completes\n- By then, you're entering on the **next** bar\n- At session extremes with volatility, next bar is often worse\n- The \"reaction bar\" (close > open bullish confirmation) requires seeing the full candle - classic next-bar delay\n\n**Boundary touch detection:**\n- 0.05% threshold is ~$35 on a $70k BTC price\n- In volatile touches of session highs/lows, spreads widen significantly\n- Real entry will be further from extreme than backtest assumes\n\n### 4. Validation Failure is Decisive\n\nValidation Sharpe of **-1.34** means the strategy doesn't just underperform - it has **negative risk-adjusted returns**. This isn't noise; this is structural failure.\n\n## Minor Issues\n\n### Parameter Specificity\n- `range_period: 240` (4 hours) - reasonable round number ✓\n- `touch_threshold: 0.05` - very specific, not 0.1% ✓\n- `max_atr_zscore: 0.5` - oddly specific, why not 0.5 or 1.0? ✗\n- `vwap_period: 60` - round number ✓\n- `atr_period: 20` - round number ✓\n\nMostly acceptable, but the 0.5 z-score threshold seems optimized.\n\n### Logic Concerns\n\n**ATR filter contradiction:**\n```python\nif atr_zscore > max_atr_zscore: # Only trade when ATR < 0.5 stdev\n return []\n```\n\nThis restricts trading to **extremely calm markets only** (bottom 30% of volatility). But:\n- Session extremes are often tested during volatility expansions\n- Requiring both \"at extreme\" AND \"ultra-calm\" creates rare coincidence\n- May explain low sample diversity and overfitting\n\n**Exit logic gap:**\n```python\nif pos.side == 'long' and bar.low < session_low:\n should_exit = True # Stop on new low\n```\n\nIf price makes a new session low, you're already underwater. This isn't a protective stop - it's damage control after the fade failed.\n\n## What Would Make This Work\n\n1. **Widen the edge**: Target 0.3-0.5% per trade minimum at 1-minute scale\n2. **Test next-bar execution explicitly**: Shift all entries/exits by +1 bar and see if edge survives\n3. **Remove ultra-tight filters**: 0.5 z-score ATR cutoff creates sample selection bias\n4. **Add realistic slippage**: 0.10% is optimistic at session extremes; use 0.15%\n5. **Require validation Sharpe > 0.5**: -1.34 is disqualifying\n\n## Verdict\n\nThis strategy **fails validation decisively** and shows classic signs of curve-fitting to a favorable historical period. The execution assumptions are unrealistic for 1-minute trading, and the edge (if it exists) is too thin to survive real-world costs.\n\n**Score: 35/100** - Poor quality, should not be traded.",
"rule_suggestion": "REQUIRE: Validation Sharpe must be within 50% of training Sharpe (not negative). Reject strategies where validation Sharpe < 0.5 * training Sharpe OR validation Sharpe < 0.3 absolute. This prevents deployment of strategies that only worked in specific historical conditions."
}
```