Backtest strategy¶
BTCUSDC¶
Period: 2025-01 : 2025-12¶
BTCUSDC
OHLCV Market Intelligence Report
📊 Overview
- 525,239 one-minute candles covering 364 days (~8,759 hours)
- 01 Jan 2025 00:00 → 31 Dec 2025 23:58
- Resampled to: 8,760 hourly, 2,190 four-hourly, 365 daily, 53 weekly, 12 monthly
🏔️ Price Extremes — 1-min Precision
- All-time high: 126,300 at 06 Oct 2025 18:58
- All-time low: 74,424 at 07 Apr 2025 07:04
- Peak-to-trough range: 1.7× (70% from low to high)
📐 Volatility Ladder
- 1-min: 61.8778 (0.061%)
- 1-hour: 623.51 (0.613%)
- 4-hour: 1,289.57 (1.269%)
- daily: 3,384.23 (3.329%)
- Typical intraday range: ~3,384.23
⚡ Hourly Extremes
- Best hour: +5.07% on 09 Apr 2025 17:00
- Worst hour: -4.92% on 07 Mar 2025 00:00
🕐 Hour-of-Day Patterns (UTC)
- Busiest hour: 14:00 — avg 1.11 vol/min
- Quietest hour: 05:00 — avg 0.43 vol/min
- Most volatile hour: 14:00 — where big moves tend to originate
📅 Day-of-Week Patterns
- Busiest day: Friday (1.15K avg volume)
- Quietest day: Saturday (461.07 avg volume)
- Widest range: Monday (4.10% avg H-L)
- Strongest close: Wednesday (+0.58% avg) | Weakest: Thursday (-0.34% avg)
🌋 Volume Spikes — Minute Level
- Avg per-minute volume: 0.65
- Exceeded 2× avg: 69,145 times | 5×: 14,598 | 10×: 3,006
- Most explosive minute: 10 Jul 2025 21:19 — 70.39 traded (109× normal)
📈 Daily Performance
- Best day: +9.59% on 02 Mar 2025
- Worst day: -8.69% on 03 Mar 2025
- Green days: 183 | Red days: 182 → 50% win rate
🔥 Streak Analysis — 4-Hour Candles
- Longest bull run: 8 consecutive green candles (32 hours of sustained buying)
- Longest bear run: 8 consecutive red candles (32 hours of sustained selling)
📆 Weekly Patterns
- Best week: +10.4% (w/o 11 May 2025)
- Worst week: -14.5% (w/o 09 Mar 2025)
- Green weeks: 26 | Red weeks: 26 | Avg: -0.00%
🗓️ Monthly Seasonality
- Strongest month: April (+14.1% avg return)
- Weakest month: February (-17.6% avg return)
- Most active month by volume: January
↕️ Gap Analysis — Daily Opens
- Total significant gaps (>0.3%): 0
- Bullish gaps: 0 (avg +0.00%) | Bearish gaps: 0 (avg 0.00%)
- Overnight bias: Sellers dominated
🚀 Recent Momentum
- Last 24h: -1.04% on volume 449.41 (0.5× daily avg)
- Last 7 days: -0.11%
- Short-term bias: 🔴 Bearish
Parameter Grid Analysis — n1 × n2 · Return [%]
🟢 Sweet Spot
- Peak result: 23.24 Return % at n1=65.0, n2=100.0
- Best n1 values on average: 65, 15, 5
- Best n2 values on average: 130, 120, 110
- Top 20% results cluster around n1 ∈ {5, 15, 55, 65, 75, 85, 95}
🔴 Avoid Zone
- Worst result: -8.93 Return % · bottom-20% threshold: 2.0
- n1 values that frequently appear in the red zone: 5, 25, 35, 45, 55, 85, 95
- As n1 rises, return stays flat → — avoid high n1 unless n2 compensates
- 50 of 100 combinations fall below the median (8.0)
📐 Stability
- Most consistent n1 (low variance across all n2): 65, 25, 15
- Most volatile n1 (result swings wildly with n2): 55, 5
- n1 ↔ Return % correlation: -0.06 — return stays flat →
- n2 ↔ Return % correlation: -0.31 — meaningful directional impact
🧭 General Feeling
- Mean: 7.64 · Max: 23.24 · Min: -8.93 · Range: 32.17 Return %
- The heatmap is patchy and non-linear — no single direction in n1 consistently wins
- Best neighbourhood to explore: n1 ≈ 65, n2 ≈ 130 — try ±1 step around this cell
- Peak beats grid mean by 15.6 Return % — large gap, validate on out-of-sample data
| Exposure Time [%] | Return [%] | Buy & Hold Return [%] | Max. Drawdown [%] | # Trades | Win Rate [%] | Best Trade [%] | Worst Trade [%] | n1 | n2 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 60 | 38.721461 | 23.235106 | -8.243942 | -14.085700 | 7 | 57.142857 | 12.501959 | -4.176286 | 65 | 100 |
| 3 | 40.000000 | 21.885732 | -8.898776 | -11.683362 | 5 | 40.000000 | 23.761312 | -3.038599 | 5 | 130 |
| 70 | 37.625571 | 20.869196 | -8.243942 | -11.973579 | 7 | 71.428571 | 10.474178 | -0.861990 | 75 | 100 |
| 14 | 39.269406 | 18.732853 | -9.691211 | -15.244051 | 4 | 50.000000 | 23.723385 | -5.124423 | 15 | 140 |
| 71 | 39.452055 | 18.668453 | -10.083616 | -14.637263 | 6 | 66.666667 | 11.574754 | -3.797394 | 75 | 110 |
| period | Return [%] | Buy & Hold Return [%] | Exposure Time [%] | n1 | n2 | |
|---|---|---|---|---|---|---|
| 89 | 1min | -99.522859 | -6.645056 | 51.287319 | 85 | 190 |
| 65 | 15min | -44.325569 | -9.451816 | 51.432648 | 65 | 150 |
| 84 | 30min | -8.735045 | -10.885300 | 50.445205 | 85 | 140 |
| 88 | 1h | -5.021368 | -7.957224 | 49.942922 | 85 | 180 |
| 22 | 4h | 4.072351 | -14.242095 | 39.726027 | 25 | 120 |
| 60 | 8h | 23.235106 | -8.243942 | 38.721461 | 65 | 100 |
| 0 | 12h | 14.980625 | -9.428636 | 40.273973 | 5 | 100 |
| 50 | 1d | 14.450893 | 9.916157 | 38.356164 | 55 | 100 |
Period Analysis — Return [%] vs Buy & Hold Return [%]
📊 Performance Summary
- Tested across 8 periods · avg return: -12.61 Return %
- Best period: 8h → 23.24 Return % | Worst: 1min → -99.52 Return %
- Positive periods: 4 / 8 · Results are highly variable — results depend heavily on the period chosen
- Returns improve as period lengthens ↗ — the edge appears to compound over time
- Beats Buy & Hold Return [%] in 6 of 8 periods (some)
- Average alpha vs benchmark: -5.49 Return %
- Strongest outperformance: period 8h (+31.5 Return % above benchmark)
🧭 General Feeling
- Strategy underperforms the benchmark on average by -5.49 Return %
- With avg exposure of 45.0%, return-on-invested-time is -28.0 Return % effective
- ✗ Fragile — profitable in 4/8 periods but fails in others
- Average market exposure: 45.0% — moderate
- Exposure range: 38.4% – 51.4% across periods
(<Figure size 1200x700 with 1 Axes>,
<Axes: title={'center': 'Strategy Return vs Buy & Hold'}, xlabel='Period', ylabel='Return [%]'>)
Best strategy¶
Backtest Report
SmaCross(n1=65,n2=100)
💰 Returns & Edge
- Total return: +23.24% · Ann.: +23.24%
- vs Buy & Hold: -8.24% — ✓ outperforms
- Alpha: +25.37% · Beta: 0.259 (low market exposure)
- Equity: $123,235,105.73 final · $137,260,447.70 peak · Commissions: $2,982,400.97
- Return on invested time: +60.01% (exposure 38.7%)
⚖️ Risk & Drawdown
- Max drawdown: -14.09% ✓ contained
- Avg drawdown: -2.82% · Max duration: 86 days 08:00:00
- Volatility (ann.): 26.04%
- Sharpe: 0.892 · Sortino: 1.808 · Calmar: 1.650
🎯 Trade Quality
- Trades: 7 · Win rate: +57.14%
- Best: 12.50% · Worst: -4.18% · Avg: 3.36%
- Avg trade duration: 19 days 21:00:00 · Max: 51 days 16:00:00
- Expectancy: +3.51% · SQN: 1.434 (Average)
- Profit factor: 5.49
🧭 Verdict
- ⚠ Acceptable — monitor closely
- Risk-adjusted edge: weak — both ratios below threshold
- Drawdown comfort: max -14.09% is manageable — Calmar of 1.65 confirms recovery speed
- ⚠ Only 7 trades — statistically thin, results may not generalise
- Tested: 2025-01-01 → 2025-12-31 (364 days 16:00:00)
Start 2025-01-01 00:00:00 End 2025-12-31 16:00:00 Duration 364 days 16:00:00 Exposure Time [%] 38.721461 Equity Final [$] 123235105.733 Equity Peak [$] 137260447.7014 Commissions [$] 2982400.967 Return [%] 23.235106 Buy & Hold Return [%] -8.243942 Return (Ann.) [%] 23.235106 Volatility (Ann.) [%] 26.041169 CAGR [%] 23.258642 Sharpe Ratio 0.892245 Sortino Ratio 1.807711 Calmar Ratio 1.649553 Alpha [%] 25.366546 Beta 0.258546 Max. Drawdown [%] -14.0857 Avg. Drawdown [%] -2.817417 Max. Drawdown Duration 86 days 08:00:00 Avg. Drawdown Duration 13 days 19:00:00 # Trades 7 Win Rate [%] 57.142857 Best Trade [%] 12.501959 Worst Trade [%] -4.176286 Avg. Trade [%] 3.358936 Max. Trade Duration 51 days 16:00:00 Avg. Trade Duration 19 days 21:00:00 Profit Factor 5.492076 Expectancy [%] 3.510705 SQN 1.434485 Kelly Criterion 0.450663 _strategy SmaCross(n1=65,n2=100) dtype: object
GridPlot(
id = ‘p1347’, …)
⚠ Disclaimer — Read Before Trading
⚠️ Past performance is not indicative of future results.
Every return figure shown is calculated on historical data. Markets change regime, correlations break, and edges erode. A strategy that worked perfectly over the test window may fail entirely in live conditions.
🎲 Backtests are optimistic by construction.
Simulations assume perfect order fills, ignore slippage, liquidity constraints, and partial fills. Real execution will always underperform the backtest — often significantly. Treat all reported returns as an upper bound, not a target.
🔬 Small parameter changes can have a large impact.
Shifting n1 or n2 by a single step can cut returns in half or flip a winning strategy into a losing one. If performance is highly sensitive to exact parameters, the edge is likely a statistical artefact of the specific test window, not a structural market inefficiency.
📉 Drawdowns feel worse in real life than on a chart.
A −15% drawdown in a backtest is a line on a graph. In live trading it is weeks of losses, emotional pressure, and the constant temptation to abandon the strategy at exactly the wrong moment. Size positions accordingly.
🪄 Overfitting is silent and dangerous.
The more parameters optimised, the more periods tested, and the more strategies tried, the higher the probability that results reflect curve-fitting rather than a genuine edge. A strategy with a very high win rate or very few trades on a short window is especially suspect.
💸 Costs compound against you.
Commissions, spreads, funding rates, and taxes are shown individually but their cumulative drag over many trades is substantial. Strategies with high trade frequency or small average gains per trade are particularly vulnerable.
🌐 This strategy has not been tested in all market conditions.
Bull markets, bear markets, high-volatility regimes, low-liquidity periods, and black-swan events each expose different failure modes. A single backtest window captures only one slice of market history and cannot guarantee robustness across all future conditions.
🛡️ Use at your own risk.
Nothing presented here constitutes financial advice, a recommendation to trade, or a guarantee of profit. You are solely responsible for any capital deployed based on this analysis. Never risk money you cannot afford to lose.
0