"""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")}')