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:
54
prod/smoke_native_backtest.py
Executable file
54
prod/smoke_native_backtest.py
Executable file
@@ -0,0 +1,54 @@
|
||||
"""Quick 1-day smoke test for nautilus_native_backtest harness."""
|
||||
import sys, time
|
||||
sys.path.insert(0, '.')
|
||||
sys.path.insert(0, 'nautilus_dolphin')
|
||||
|
||||
from prod.nautilus_native_backtest import run_one_day_native, get_parquet_files, _make_instrument
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from nautilus_trader.model.identifiers import Venue
|
||||
|
||||
files = get_parquet_files()
|
||||
df0 = pd.read_parquet(files[0])
|
||||
SKIP_COLS = {
|
||||
'timestamp', 'scan_number', 'v50_lambda_max_velocity', 'v150_lambda_max_velocity',
|
||||
'v300_lambda_max_velocity', 'v750_lambda_max_velocity', 'vel_div',
|
||||
'instability_50', 'instability_150'
|
||||
}
|
||||
asset_cols = [c for c in df0.columns if c not in SKIP_COLS]
|
||||
|
||||
NV = Venue('BINANCE')
|
||||
print(f'Building {len(asset_cols)} instruments...')
|
||||
instruments = {}
|
||||
for sym in asset_cols:
|
||||
try:
|
||||
instruments[sym] = _make_instrument(sym, NV)
|
||||
except Exception as e:
|
||||
print(f' skip {sym}: {e}')
|
||||
print(f'Built {len(instruments)} instruments OK')
|
||||
|
||||
# Quick vol_p60 from day 1
|
||||
btc = df0['BTCUSDT'].values
|
||||
vols = []
|
||||
for i in range(50, len(btc)):
|
||||
seg = btc[max(0, i-50):i]
|
||||
if len(seg) >= 10 and (seg > 0).all():
|
||||
v = float(np.std(np.diff(seg) / seg[:-1]))
|
||||
if np.isfinite(v) and v > 0:
|
||||
vols.append(v)
|
||||
vol_p60 = float(np.percentile(vols, 60)) if vols else 0.0002
|
||||
print(f'vol_p60 = {vol_p60:.8f}')
|
||||
|
||||
all_dates = [f.stem for f in files]
|
||||
t0 = time.time()
|
||||
print(f'Running Day 1 ({files[0].stem}) in native mode...')
|
||||
r = run_one_day_native(files[0].stem, 25000.0, vol_p60, all_dates, asset_cols, instruments)
|
||||
elapsed = time.time() - t0
|
||||
|
||||
print(f'Elapsed: {elapsed:.1f}s')
|
||||
print(f' naut_capital = {r["naut_capital"]:,.2f}')
|
||||
print(f' shadow_capital = {r["shadow_capital"]:,.2f}')
|
||||
print(f' pnl = {r["pnl"]:+,.2f}')
|
||||
print(f' trades = {r["trades"]}')
|
||||
print(f' recon = {r["recon"]}')
|
||||
print(f' error = {r.get("error", "none")}')
|
||||
Reference in New Issue
Block a user