Files
DOLPHIN/nautilus_dolphin/dvae/test_dliq_fix_verify.py
hjnormey 01c19662cb 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.
2026-04-21 16:58:38 +02:00

87 lines
3.3 KiB
Python
Executable File

"""Verify D_LIQ_GOLD ROI=181.81% using exact gold _run_engine() path (float64, gold vol_p60)."""
import sys, time, math
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
from pathlib import Path
import numpy as np
_HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(_HERE.parent)) # nautilus_dolphin root
sys.path.insert(0, str(_HERE)) # dvae/ dir — avoid dvae/__init__ PyTorch load
from exp_shared import ENGINE_KWARGS, MC_BASE_CFG, load_data, load_forewarner
from nautilus_dolphin.nautilus.proxy_boost_engine import create_d_liq_engine
from nautilus_dolphin.nautilus.adaptive_circuit_breaker import AdaptiveCircuitBreaker
def _run_gold(eng, d, fw):
"""Exact gold _run_engine() path: float64 pq_data, gold vol_p60, np.isfinite gate."""
acb = AdaptiveCircuitBreaker()
acb.preload_w750(d['date_strings'])
eng.set_ob_engine(d['ob_eng'])
eng.set_acb(acb)
if fw is not None:
eng.set_mc_forewarner(fw, MC_BASE_CFG)
eng.set_esoteric_hazard_multiplier(0.0)
print(f" base_max_leverage = {eng.base_max_leverage} (expect 8.0 — fix check)")
print(f" abs_max_leverage = {eng.abs_max_leverage}")
print(f" sizer.max_leverage= {eng.bet_sizer.max_leverage}")
assert eng.base_max_leverage == 8.0, f"FIX NOT APPLIED: base_max={eng.base_max_leverage}"
t0 = time.time()
daily_caps = []
for pf_file in d['parquet_files']:
ds = pf_file.stem
df, acols, dvol = d['pq_data'][ds] # float64, pre-computed dvol
cap_before = eng.capital
vol_ok = np.where(np.isfinite(dvol), dvol > d['vol_p60'], False)
eng.process_day(ds, df, acols, vol_regime_ok=vol_ok)
daily_caps.append(eng.capital)
tr = eng.trade_history
n = len(tr)
roi = (eng.capital - 25000.0) / 25000.0 * 100.0
peak, max_dd = 25000.0, 0.0
for cap in daily_caps:
peak = max(peak, cap)
max_dd = max(max_dd, (peak - cap) / peak * 100.0)
def _abs(t):
return t.pnl_absolute if hasattr(t, 'pnl_absolute') else t.pnl_pct * 250.0
wins = [t for t in tr if _abs(t) > 0]
losses = [t for t in tr if _abs(t) <= 0]
pf = sum(_abs(t) for t in wins) / max(abs(sum(_abs(t) for t in losses)), 1e-9)
liq_stops = getattr(eng, 'liquidation_stops', 0)
print(f" ROI={roi:+.2f}% T={n} DD={max_dd:.2f}% PF={pf:.4f} "
f"liq_stops={liq_stops} ({time.time()-t0:.0f}s)")
return roi, n, max_dd, pf
def main():
print("Loading data (gold method: float64, 2-file seg-based vol_p60)...")
d = load_data()
fw = load_forewarner()
print()
print("=== D_LIQ_GOLD with fixed set_esoteric_hazard_multiplier ===")
eng = create_d_liq_engine(**ENGINE_KWARGS)
roi, n, dd, pf = _run_gold(eng, d, fw)
print()
print(f"GOLD TARGET: ROI=181.81% T=2155 DD=17.65%")
roi_ok = abs(roi - 181.81) < 1.0
dd_ok = abs(dd - 17.65) < 0.5
t_ok = n == 2155
print(f"ROI match: {'PASS' if roi_ok else 'FAIL'} (diff={roi-181.81:+.2f}pp)")
print(f"DD match: {'PASS' if dd_ok else 'FAIL'} (diff={dd-17.65:+.2f}pp)")
print(f"T match: {'PASS' if t_ok else 'FAIL'} (got {n})")
if roi_ok and dd_ok and t_ok:
print("\n=== D_LIQ_GOLD RESTORED ===")
else:
print("\n!!! MISMATCH — investigate further !!!")
if __name__ == '__main__':
main()