Files
DOLPHIN/prod/smoke_native_backtest.py

55 lines
1.9 KiB
Python
Raw Normal View History

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