55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
|
|
"""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")}')
|