Includes core prod + GREEN/BLUE subsystems: - prod/ (BLUE harness, configs, scripts, docs) - nautilus_dolphin/ (GREEN Nautilus-native impl + dvae/ preserved) - adaptive_exit/ (AEM engine + models/bucket_assignments.pkl) - Observability/ (EsoF advisor, TUI, dashboards) - external_factors/ (EsoF producer) - mc_forewarning_qlabs_fork/ (MC regime/envelope) Excludes runtime caches, logs, backups, and reproducible artifacts per .gitignore.
11 KiB
Executable File
DOLPHIN Nautilus Implementation Summary
Date: 2026-02-18
Status: Phase 3 Complete, Phase 4 Started
Implementation Status by Task
Phase 1: Foundation ✅ Complete
- ✅ 1.1 Development Environment Setup (configured in requirements.txt, config.yaml)
- ✅ 1.2 Signal Bridge Actor (
signal_bridge.py)- Redis Streams consumption with xread
- Timestamp parsing (seconds/ms/ns)
- Signal validation with freshness check
- Error handling and backoff
- ✅ 1.3 Basic Execution Strategy (
strategy.py)- Signal subscription and filtering
- Lifecycle methods (on_start/on_stop)
- SmartExecAlgorithm registration
Phase 2: Core Logic ✅ Complete
- ✅ 2.1 Signal Filtering (
volatility_detector.py,strategy.py)- VolatilityRegimeDetector with P50/P75 thresholds
- IRP alignment filter (>=0.45)
- Direction confirmation filter
- Momentum magnitude filter (>0.75bps)
- Asset exclusion (stablecoins)
- Position limits (max 10 concurrent)
- ✅ 2.2 Dynamic Leverage Calculation (
strategy.py)- Base formula:
min_lev + (strength^convexity) * (max_lev - min_lev) - Alpha multipliers: bucket_boost, streak_mult, trend_mult
- Sanity check (max 50% account balance)
- Base formula:
- ✅ 2.3 Position Sizing (
strategy.py)- Notional calculation:
balance * fraction * leverage - Quantity conversion with precision
- Notional calculation:
- ✅ 2.4 Exit Logic (
position_manager.py)- PositionManager class
- TP condition (99bps for SHORT)
- Max hold condition (120 bars)
- Exit execution via SmartExecAlgorithm
Phase 3: Execution ✅ Complete
- ✅ 3.1 SmartExecAlgorithm Entry Orders (
smart_exec_algorithm.py)- Limit order 1bps inside spread
- 25s timeout with market fallback
- NEW: Abort when price moves 5bps against
- Fill tracking (maker/taker)
- ✅ 3.2 SmartExecAlgorithm Exit Orders (
smart_exec_algorithm.py)- TP exit: market order
- Max hold: limit 10s → market fallback
- Order rejection handler
- ✅ 3.3 Fee and Slippage Measurement (
smart_exec_algorithm.py)- NEW: Fee tracking (0.02% maker, 0.05% taker)
- NEW: Slippage calculation (actual vs expected price)
- NEW: Metrics collection via
get_metrics()/reset_metrics()
- ✅ 3.4 Circuit Breakers (
circuit_breaker.py)- NEW: CircuitBreakerManager class
- Daily loss limit (10% hard stop)
- Max concurrent positions (10)
- Per-asset position limit (1)
- API failure tracking (3 consecutive)
- Order size sanity check (50%)
- Auto-reset after 24 hours
- ✅ 3.5 Metrics Monitor (
metrics_monitor.py)- NEW: MetricsMonitor class
- Maker fill rate tracking (1-hour rolling)
- Slippage tracking (rolling average)
- Funding rate tracking (24-hour)
- Threshold alerting (warning/critical)
- Prometheus export format
Phase 4: Validation 🔄 In Progress
- ✅ 4.1 JSON Data Adapter (
data_adapter.py)- NEW: JSONEigenvalueDataAdapter class
- Loads eigenvalue JSON files from correlation_arb512
- Generates synthetic bars from vel_div data
- Signal metadata extraction
- BacktestDataLoader for high-level loading
- ⬜ 4.2 Validation Backtests (pending)
- ⬜ 4.3 Validation Analysis (pending)
File Structure
nautilus_dolphin/
├── nautilus_dolphin/ # Main package
│ ├── __init__.py # Package exports
│ └── nautilus/ # Nautilus components
│ ├── __init__.py # Component exports
│ ├── signal_bridge.py # Redis → Nautilus bridge
│ ├── strategy.py # Main execution strategy
│ ├── smart_exec_algorithm.py # Entry/exit execution
│ ├── position_manager.py # Exit management
│ ├── volatility_detector.py # Vol regime detection
│ ├── circuit_breaker.py # Operational safety
│ ├── metrics_monitor.py # Stress-test metrics
│ └── data_adapter.py # JSON backtest loader
├── tests/ # Test suite
│ ├── test_signal_bridge.py
│ ├── test_strategy.py
│ ├── test_position_manager.py
│ ├── test_volatility_detector.py
│ ├── test_circuit_breaker.py # NEW
│ ├── test_metrics_monitor.py # NEW
│ └── test_smart_exec_algorithm.py # NEW
├── config/
│ └── config.yaml
├── pyproject.toml # Package config
├── requirements.txt
└── README.md
New Components Detail
1. CircuitBreakerManager (circuit_breaker.py)
cb = CircuitBreakerManager(
daily_loss_limit_pct=10.0,
max_concurrent_positions=10,
max_api_failures=3,
max_order_size_pct=50.0
)
# Check before opening position
can_trade, reason = cb.can_open_position("BTCUSDT", balance)
# Track position lifecycle
cb.on_position_opened(position_id, asset)
cb.on_position_closed(position_id, asset, pnl)
# Check order size
can_submit, reason = cb.can_submit_order(notional, balance)
# Monitor API health
cb.on_api_failure(error_message)
# Manual control
cb.manual_trip("Emergency stop")
cb.reset()
# Get status
status = cb.get_status()
2. MetricsMonitor (metrics_monitor.py)
monitor = MetricsMonitor(
config=ThresholdConfig(
min_maker_fill_rate=48.0,
max_slippage_bps=5.0
)
)
# Record fills
monitor.record_fill('maker', slippage_bps=2.5)
monitor.record_fill('taker', slippage_bps=4.0)
# Record trade results
monitor.record_trade_result(pnl=100.0)
# Get metrics
summary = monitor.get_metrics_summary()
# Returns: maker_fill_rate_pct, avg_slippage_bps,
# win_rate_pct, profit_factor, etc.
# Prometheus export
prometheus_metrics = monitor.get_prometheus_metrics()
3. SmartExecAlgorithm Enhancements
Abort Logic (Task 3.1.5):
- Monitors quote ticks for pending entries
- Cancels order if price moves 5bps against position
- Tracks aborted entries in metrics
Fee/Slippage Tracking (Task 3.3):
- Calculates fees: 0.02% maker, 0.05% taker
- Tracks slippage: |actual - expected| / expected
- Provides metrics via
get_metrics()method
4. JSONEigenvalueDataAdapter (data_adapter.py)
adapter = JSONEigenvalueDataAdapter(
eigenvalues_dir="path/to/correlation_arb512/eigenvalues",
venue="BINANCE_FUTURES"
)
# Load date range
adapter.load_date_range(
start_date=datetime(2026, 2, 6),
end_date=datetime(2026, 2, 14)
)
# Iterate through scans
for bars, signals in adapter:
# bars: List[Bar] - synthetic OHLCV
# signals: List[dict] - signal metadata
process_bars(bars)
process_signals(signals)
# Or use high-level loader
loader = BacktestDataLoader(eigenvalues_dir, venue)
data = loader.load_period(start_date, end_date, assets=['BTCUSDT', 'ETHUSDT'])
Strategy Integration
The DolphinExecutionStrategy now integrates all components:
class DolphinExecutionStrategy(Strategy):
def __init__(self, config):
# Components
self.volatility_detector = VolatilityRegimeDetector(...)
self.position_manager = PositionManager(...)
self.circuit_breaker = CircuitBreakerManager(...)
self.metrics_monitor = MetricsMonitor(...)
def on_signal(self, signal):
# 1. Apply filters
rejection = self._should_trade(signal)
if rejection:
return
# 2. Check circuit breaker
can_trade, reason = self.circuit_breaker.can_open_position(...)
if not can_trade:
return
# 3. Execute trade
self._execute_entry(signal)
def _execute_entry(self, signal):
# Calculate size
notional = self.calculate_position_size(signal, balance)
# Check order sanity
can_submit, reason = self.circuit_breaker.can_submit_order(...)
# Submit via SmartExecAlgorithm
self.submit_order(order, exec_algorithm_id="SMART_EXEC")
Test Coverage
New tests added:
-
test_circuit_breaker.py (11 tests)
- Position limit checks
- Daily loss limit
- Order size sanity
- API failure tracking
- Manual trip/reset
- Auto-reset after timeout
-
test_metrics_monitor.py (13 tests)
- Fill rate calculation
- Slippage tracking
- Trade result recording
- Win rate / profit factor
- Alert generation
- Deduplication
- Prometheus export
-
test_smart_exec_algorithm.py (10 tests)
- Abort logic (price movement)
- Fee calculation (maker/taker)
- Slippage calculation
- Metrics tracking
- Category classification
Next Steps
To complete Phase 4 (Validation):
-
Set up validation backtests:
# Load data for validation periods loader = BacktestDataLoader(eigenvalues_dir) # High volatility: Feb 6-14, 2026 feb_data = loader.load_period( datetime(2026, 2, 6), datetime(2026, 2, 14) ) # Low volatility: Jan 21-28, 2026 jan_data = loader.load_period( datetime(2026, 1, 21), datetime(2026, 1, 28) ) -
Run Nautilus backtests using the loaded data
-
Compare results to VBT baseline:
- Total trades (±2% tolerance)
- Win rate (±1% tolerance)
- Profit factor (±3% tolerance)
- Final capital (±5% tolerance)
Configuration Example
# config/config.yaml
strategy:
venue: "BINANCE_FUTURES"
# Filters
irp_alignment_min: 0.45
momentum_magnitude_min: 0.000075
excluded_assets: ["TUSDUSDT", "USDCUSDT"]
# Sizing
min_leverage: 0.5
max_leverage: 5.0
leverage_convexity: 3.0
capital_fraction: 0.20
# Exit
tp_bps: 99
max_hold_bars: 120
# Limits
max_concurrent_positions: 10
circuit_breaker:
daily_loss_limit_pct: 10.0
max_api_failures: 3
max_order_size_pct: 50.0
auto_reset_hours: 24.0
smart_exec:
entry_timeout_sec: 25
entry_abort_threshold_bps: 5.0
exit_timeout_sec: 10
maker_fee_rate: 0.0002
taker_fee_rate: 0.0005
metrics:
min_maker_fill_rate: 48.0
max_slippage_bps: 5.0
warning_maker_fill_rate: 55.0
critical_maker_fill_rate: 48.0
Running Tests
# Activate environment
activate_siloqy.bat
# Install in dev mode
pip install -e .
# Run all tests
python -m pytest tests/ -v
# Run specific test file
python -m pytest tests/test_circuit_breaker.py -v
# Run with coverage
python -m pytest tests/ --cov=nautilus_dolphin --cov-report=html
Notes
-
NautilusTrader dependency: The implementation requires NautilusTrader 1.200.0+ which should be installed in the siloqy environment.
-
Import errors in test: Tests will fail to import if nautilus_trader is not installed. This is expected in environments without the trading dependencies.
-
Data adapter: The JSONEigenvalueDataAdapter generates synthetic prices based on vel_div. For production backtests, consider using actual price data from Binance.
-
Redis: SignalBridgeActor requires Redis 7.0+ for the Redis Streams functionality.