"""Halten die drei Ueberlebenden auch mit gemessener Exit-Slippage? `backtest_verworfene_v2.lauf` rechnet nur den Spread. Aus `analyze_slippage_holdtime.py`: E[Slippage] >= 0,0370 $ ueber alle Stunden, 0,0124 $ im Fenster 10-17. Bei ATR_M5 ~0,15 sind das 0,08-0,25 R je Trade — gegen Edges von +0,13..+0,25 ist das nicht vernachlaessigbar. """ import sys sys.path.insert(0, r"c:\Users\ah\Downloads\tradingrobot") import MetaTrader5 as mt5 from backtest_cost_gate import _atr_series, kennzahlen from core.exit_model import LIVE, simulate import backtest_verworfene_v2 as V mt5.initialize(); sym = "SpotCrude" b = mt5.copy_rates_from_pos(sym, mt5.TIMEFRAME_M5, 0, 80000) point = mt5.symbol_info(sym).point mt5.shutdown() H=[float(x["high"]) for x in b]; L=[float(x["low"]) for x in b] C=[float(x["close"]) for x in b]; T=[int(x["time"]) for x in b] SP=[float(x["spread"])*point for x in b] A=_atr_series(H,L,C); m=len(C)//2 def lauf_slip(levels, lo, hi, slip_usd): ev=[] for ab,bis,lvl,d in levels: for i in range(max(ab,1), min(bis+1, len(C)-2)): atr=A[i-1] if not atr or atr < V._ATRMIN: continue if not ((H[i]>=lvl) if d>0 else (L[i]<=lvl)): continue ev.append((i,d,lvl,atr,SP[i])); break ev.sort(); rs=[]; frei=lo for i,d,entry,atr,sp in ev: if not (lo<=i0 else 0.0225)/atr - slip_usd/atr) frei=xb+1 return rs setups=[("KONTROLLE Squeeze", V.squeeze_kontrolle(H,L,C,A)), ("PDH / PDL Bruch", V.tagesextrem(H,L,T)), ("Asian Range Bruch", V.asia(H,L,T)), ("Equal H/L Bruch", V.equal_hl(H,L,A))] print("="*92) print(" EXIT-SLIPPAGE angesetzt (gemessen: >=0,0124 $ im Tagfenster, >=0,0370 $ gesamt)") print("="*92) print(f" {'Setup':<22} {'0,000 $':>18} {'0,0124 $':>18} {'0,0370 $':>18}") for name,lv in setups: z=f" {name:<22}" for s in (0.0, 0.0124, 0.0370): k1=kennzahlen(lauf_slip(lv,0,m,s)); k2=kennzahlen(lauf_slip(lv,m,len(C),s)) z += (f" {k1['oer']:>+7.3f}/{k2['oer']:>+7.3f}" if k1 and k2 else f" {'—':^16}") print(z) print() print(" ⚠ Die Edges liegen bei +0,13..+0,25 R — eine Slippage von 0,08..0,25 R") print(" je Trade ist dagegen keine Randgroesse, sondern der entscheidende Posten.")