import kit, numpy as np, sys, datetime as dt sys.stdout.reconfigure(encoding='utf-8',errors='replace') from sklearn.ensemble import HistGradientBoostingClassifier def run(sym,tf,sl,tp,H,label,min_year=None): t,o,h,l,c,v,sp=kit.load_rates(sym,tf) if min_year: k=np.array([dt.datetime.fromtimestamp(x,dt.UTC).year for x in t])>=min_year t,o,h,l,c,v,sp=[a[k] for a in (t,o,h,l,c,v,sp)] X,names,a=kit.features(t,o,h,l,c,v) diffs=np.abs(np.diff(np.unique(np.round(c,6)))); tick=np.median(diffs[diffs>0]) spread=np.median(sp)*tick y,valid=kit.barrier_vec(h,l,c,a,sl,tp,H,spread) n=len(y); idx=np.arange(n) be=100*sl/(sl+tp) prob=np.full((n,3),np.nan); fold=np.full(n,-1) bounds=np.linspace(int(n*0.35),n,6).astype(int) for f in range(5): te0,te1=bounds[f],bounds[f+1] te=(idx>=te0)&(idx=15] pos=sum(1 for x in pf if x>be) if best is None or sig>best[0]: best=(sig,thr,nT,wr,be,pf,pos,len(pf)) if best is None: print(f" {label:<26} too few trades"); return sig,thr,nT,wr,be,pf,pos,nf=best exp=(wr/100)*tp-(1-wr/100)*sl print(f" {label:<26} thr{thr:.2f} {nT:5d} trades win {wr:5.2f}% vs {be:5.2f}% " f"edge {wr-be:+5.2f}pp ({sig:+.2f}s) exp {exp:+.3f} ATR folds+{pos}/{nf}") print("=== PURGED WALK-FORWARD, SEQUENTIAL NON-OVERLAPPING TRADES ===") print("(best-of-4 confidence thresholds shown; 'folds+' = test folds above break-even)\n") for sym,tf,mn in (("EURUSD","16385",1999),("USDJPY","16385",1999), ("XAUUSD","16385",None),("SP500","16385",None)): print(f"{sym} H1:") for sl,tp,H in ((2,2,32),(2,3,48),(2,6,128)): run(sym,tf,sl,tp,H,f"{sl}:{tp} h{H}",mn) print()