initial: import DOLPHIN baseline 2026-04-21 from dolphinng5_predict working tree

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.
This commit is contained in:
hjnormey
2026-04-21 16:58:38 +02:00
commit 01c19662cb
643 changed files with 260241 additions and 0 deletions

85
prod/launch_paper_portfolio.py Executable file
View File

@@ -0,0 +1,85 @@
"""
DOLPHIN Nautilus Paper Trading Portfolio - Realistic Friction Edition
=====================================================================
Path: prod/launch_paper_portfolio.py
Launches a Dolphin-Nautilus portfolio in PAPER mode using the internal
Sandbox matching engine with realistic Binance Futures fees and slippage.
"""
import asyncio
import os
import sys
import logging
from pathlib import Path
from dotenv import load_dotenv
# Add project root and package to path
# File is in prod/, so we need 2 .parent to reach project root
PROJECT_ROOT = Path(__file__).parent.parent
sys.path.insert(0, str(PROJECT_ROOT / 'nautilus_dolphin'))
sys.path.insert(0, str(PROJECT_ROOT))
# Load credentials from .env
load_dotenv(PROJECT_ROOT / '.env')
from nautilus_trader.model.objects import Money
from nautilus_dolphin.nautilus.launcher import NautilusDolphinLauncher
# Configure Logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("PaperPortfolio")
# ---------------------------------------------------------------------------
# PAPER TRADING CONFIGURATION (Realistic Friction)
# ---------------------------------------------------------------------------
PAPER_CONFIG = {
'venue': 'BINANCE_FUTURES',
'environment': 'PAPER',
'trader_id': 'DOLPHIN-PHOENIX-01',
'auth': {
'api_key': os.getenv('MRS_BINANCE_API_KEY'),
'api_secret': os.getenv('MRS_BINANCE_SECRET_KEY'),
},
'strategy': {
'venue': 'BINANCE_FUTURES',
'acb_enabled': True,
# --- DISABLE INTERNAL FRICTION OVERRIDES ---
# We disable these so Nautilus can handle them natively
'use_sp_fees': False,
'use_sp_slippage': False,
'use_ob_edge': False, # Disable MC-fallback edge for cleaner proof
'max_leverage': 5.0,
'capital_fraction': 0.10, # Conservative 10% fraction for paper testing
'tp_bps': 99,
'max_hold_bars': 120,
},
'execution': {
'testnet': False, # Use Mainnet data feeds
'use_sandbox': True, # Match orders internally (Paper Trading)
'account_type': 'FUTURES_USDT',
},
}
async def launch():
logger.info("Starting DOLPHIN Paper Portfolio (Phoenix-01)...")
logger.info("Sandbox Mode: ENABLED")
logger.info("Internal Friction (Legacy): BYPASSED")
logger.info("Nautilus Friction (Realistic): ENABLED (0.02%/0.05%)")
try:
launcher = NautilusDolphinLauncher(PAPER_CONFIG)
await launcher.start()
except KeyboardInterrupt:
logger.info("Stopping portfolio...")
except Exception as e:
logger.error(f"Failed to launch portfolio: {e}")
if __name__ == "__main__":
if not os.getenv('MRS_BINANCE_API_KEY'):
logger.error("API Keys missing! Ensure .env is populated.")
sys.exit(1)
asyncio.run(launch())