Date: 2026-05-08
Commands:
rtk uv run python scripts/validate_data_pipeline.py --symbols BTC-USDT-SWAP,ETH-USDT-SWAP --bars 5m,15m --fetch-latest
rtk uv run python scripts/validate_external_backtest.py --symbol BTC-USDT-SWAP --bar 15m --limit 50000 --trend-sma 240 --rsi-long-threshold 2.0 --rsi-short-threshold 101.0 --exit-rsi 55.0
Results:
| Symbol | Bar | Rows | First UTC | Last UTC | Unexpected intervals | Live mismatches |
|---|---|---|---|---|---|---|
| BTC-USDT-SWAP | 5m | 672525 | 2019-12-16 06:05 | 2026-05-08 09:45 | 0 | 0 |
| BTC-USDT-SWAP | 15m | 224172 | 2019-12-16 06:00 | 2026-05-08 08:45 | 0 | 0 |
| ETH-USDT-SWAP | 5m | 670006 | 2019-12-25 00:00 | 2026-05-08 09:45 | 0 | 0 |
| ETH-USDT-SWAP | 15m | 223332 | 2019-12-25 00:00 | 2026-05-08 08:45 | 0 | 0 |
The internal RSI2 implementation matched backtesting.py on the same BTC 15m data and execution model:
| Rows | Internal trades | External trades | Internal final equity | External final equity | Final equity diff |
|---|---|---|---|---|---|
| 50000 | 222 | 222 | 19962.777451 | 19962.777247 | 0.000204 |
Freqtrade can read the exported OKX futures JSON files, but OKX market loading through ccxt/aiohttp did not use environment proxy variables by default. freqtrade/config-okx-futures.json now sets httpsProxy explicitly in both ccxt_config and ccxt_async_config.
Export commands:
rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 5m
rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 5m
rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 15m
rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 15m
Timerange: 20240101-20260508
Fee: 0.0004
| Strategy | Pair | Trades | Total return | CAGR | Max drawdown | Win rate | Profit factor | Notes |
|---|---|---|---|---|---|---|---|---|
| BtcRsi2Guarded | BTC/USDT:USDT | 365 | 0.05% | 0.02% | 0.21% | 63.0% | 1.04 | Framework-check only; low edge under freqtrade sizing. |
| EthFocusedInformativeDry | ETH/USDT:USDT | 508 | -0.95% | -0.41% | 0.95% | 43.3% | 0.70 | Reject for live use. |
| EthNextgenMicroSignalStream | ETH/USDT:USDT | 119 | 0.02% | 0.01% | 0.13% | 37.8% | 1.03 | Signal-only stream, mostly flat after fees. |
| EthNextgenMicroLeverageUnits | ETH/USDT:USDT | 119 | 0.44% | 0.19% | 13.21% | 37.8% | 1.01 | Uses position units; poor risk/reward. |
| EthNextgenMicroLeverageUnitsShifted | ETH/USDT:USDT | 119 | 34.02% | 13.27% | 10.08% | 65.5% | 1.77 | Best freqtrade confirmation; depends on one-bar shifted signal alignment. |
Full-range shifted retest after timestamp fix:
| Strategy | Pair | Timerange | Trades | Total return | CAGR | Max drawdown | Win rate | Profit factor |
|---|---|---|---|---|---|---|---|---|
| EthNextgenMicroLeverageUnitsShifted | ETH/USDT:USDT | 20191230-20260508 | 271 | 153.90% | 15.78% | 10.08% | 67.2% | 1.92 |
The current long-short fusion strategy is not directly representable as one ordinary freqtrade strategy because it is portfolio-level weighted return composition across multiple long and short components. Freqtrade is useful here for leg-level and execution-framework checks, not as a full replacement for the portfolio combiner.
See reports/eth-nextgen-shift-alignment-validation.md for the one-bar shifted signal alignment audit. The shift is valid for reproducing next-open entries. Freqtrade still cannot exactly reproduce same-candle stop/take exits from the custom research engine.