<!DOCTYPE html>
<html lang="ru"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Order-Flow — если бы реальные сделки</title>
<style>
:root{--bg:#0a0e17;--card:rgba(255,255,255,.04);--border:rgba(255,255,255,.09);
--txt:#e6edf3;--muted:#8b98a9;--green:#21d07a;--red:#f6465d;--blue:#3b82f6;--amber:#f59e0b}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
background:radial-gradient(1200px 600px at 80% -10%,rgba(59,130,246,.10),transparent),
radial-gradient(900px 500px at 0% 0%,rgba(245,158,11,.07),transparent),var(--bg);
color:var(--txt);min-height:100vh;padding:24px 16px;line-height:1.5}
.wrap{max-width:1020px;margin:0 auto}
header{margin-bottom:14px}
h1{font-size:22px;font-weight:700;letter-spacing:-.5px}
h1 .em{background:linear-gradient(90deg,var(--amber),var(--blue));-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{color:var(--muted);font-size:12.5px;margin-top:5px}
.glass{background:var(--card);border:1px solid var(--border);border-radius:14px}
.warn{padding:13px 16px;margin-bottom:16px;border-left:3px solid var(--amber);font-size:12.5px;background:rgba(245,158,11,.06)}
.warn b{color:var(--amber)}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}
.kpi{padding:16px;text-align:center}
.kpi .lbl{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.4px}
.kpi .val{font-size:24px;font-weight:800;margin:5px 0 1px}
.kpi .sm{font-size:11px;color:var(--muted)}
.section{padding:18px}
.section h2{font-size:14px;font-weight:600;margin-bottom:4px}
.section .h{font-size:11.5px;color:var(--muted);margin-bottom:10px}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th,td{text-align:right;padding:8px 6px}
th:first-child,td:first-child{text-align:left}
th{color:var(--muted);font-weight:500;font-size:10.5px;text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--border)}
tr+tr td{border-top:1px solid rgba(255,255,255,.045)}
td{font-variant-numeric:tabular-nums}
tr.best{background:rgba(33,208,122,.12)}
tr.best td:first-child{font-weight:700;color:var(--green)}
.tag{font-size:10px;font-weight:700;padding:1px 6px;border-radius:5px;background:rgba(33,208,122,.18);color:var(--green)}
.pos{color:var(--green)}.neg{color:var(--red)}.mut{color:var(--muted)}
.verdict{padding:16px 18px;margin-top:16px;border-left:3px solid var(--amber);font-size:13px}
.verdict b{color:var(--amber)}
.foot{color:var(--muted);font-size:11px;margin-top:8px;text-align:center}
</style></head>
<body><div class="wrap">
<header>
<h1>💸 Order-Flow — <span class="em">если бы это были реальные сделки</span></h1>
<div class="sub" id="sub"></div>
</header>
<div class="warn glass" id="warn"></div>
<div class="kpis" id="kpis"></div>
<div class="section glass">
<h2>⏱ Оптимален ли тайм-стоп? — реальные сделки по фактическим сигналам</h2>
<div class="h">TP +1.5% / SL −0.5%, maker-комиссия (с кешбеком). 🟢 = лучший net/сделку. TP/SL/⏱ = чем закрылась сделка.</div>
<table id="holds"><thead><tr>
<th>Тайм-стоп</th><th>Сделок</th><th>WR</th><th>net/сделку</th><th>Σ total</th><th>TP</th><th>SL</th><th>⏱ время</th>
</tr></thead><tbody></tbody></table>
</div>
<div class="verdict glass" id="verdict"></div>
<div class="foot" id="foot"></div>
</div>
<script>
const D = {"tp": 1.5, "sl": 0.5, "fee_maker": 0.036, "n_sigs": 134, "holds": [{"hold": 3, "n": 102, "wr": 44.1, "gross_exp": 0.0642, "net_exp": 0.0282, "net_tot": 2.88, "tp": 4, "sl": 22, "timeout": 76}, {"hold": 5, "n": 102, "wr": 49.0, "gross_exp": 0.0613, "net_exp": 0.0253, "net_tot": 2.58, "tp": 5, "sl": 32, "timeout": 65}, {"hold": 10, "n": 103, "wr": 45.6, "gross_exp": 0.0594, "net_exp": 0.0234, "net_tot": 2.41, "tp": 10, "sl": 43, "timeout": 50}, {"hold": 15, "n": 104, "wr": 41.3, "gross_exp": 0.0136, "net_exp": -0.0224, "net_tot": -2.33, "tp": 10, "sl": 52, "timeout": 42}, {"hold": 30, "n": 107, "wr": 39.3, "gross_exp": 0.0624, "net_exp": 0.0264, "net_tot": 2.83, "tp": 17, "sl": 61, "timeout": 29}, {"hold": 60, "n": 113, "wr": 35.4, "gross_exp": 0.017, "net_exp": -0.019, "net_tot": -2.15, "tp": 19, "sl": 70, "timeout": 24}]};
const pct=(v,d=3)=>(v>0?'+':'')+v.toFixed(d)+'%';
const sgn=v=>v>0?'pos':v<0?'neg':'mut';
const H=D.holds;
const best=H.reduce((a,b)=>b.net_exp>a.net_exp?b:a);
document.getElementById('sub').textContent =
`${D.n_sigs} фактических сигналов · TP ${D.tp}% / SL ${D.sl}% · maker ${D.fee_maker}% round-trip · путь цены из depth.db (10с)`;
document.getElementById('warn').innerHTML =
`⚠️ <b>Выборка ~1.5ч / ~100 сделок — это ШУМ, не статистика.</b> Все net/сделку в пределах ±0.03% = по сути ноль. Ввод считаю по maker-заливу по цене сигнала (оптимистично). Один режим рынка. Цель отчёта — ответить на твой вопрос про тайм-стоп и показать механику, а не доказать прибыльность.`;
const totalTrades=best.n;
const kpis=[
{l:'Лучший net/сделку',v:pct(best.net_exp),c:best.net_exp>0?'var(--green)':'var(--red)',sm:`тайм-стоп ${best.hold} мин`},
{l:'Win-rate (лучший)',v:best.wr+'%',c:'var(--txt)',sm:`${best.n} сделок`},
{l:'Σ P&L (лучший)',v:pct(best.net_tot,1),c:best.net_tot>0?'var(--green)':'var(--red)',sm:'на всю выборку'},
];
document.getElementById('kpis').innerHTML=kpis.map(k=>
`<div class="kpi glass"><div class="lbl">${k.l}</div><div class="val" style="color:${k.c}">${k.v}</div><div class="sm">${k.sm}</div></div>`).join('');
document.querySelector('#holds tbody').innerHTML=H.map(h=>{
const isB=h===best;
return `<tr class="${isB?'best':''}">
<td>${h.hold} мин ${isB?'<span class="tag">BEST</span>':''}</td>
<td>${h.n}</td><td>${h.wr}%</td>
<td class="${sgn(h.net_exp)}" style="font-weight:700">${pct(h.net_exp)}</td>
<td class="${sgn(h.net_tot)}">${pct(h.net_tot,1)}</td>
<td class="pos">${h.tp}</td><td class="neg">${h.sl}</td><td class="mut">${h.timeout}</td>
</tr>`;
}).join('');
const h10=H.find(x=>x.hold===10);
document.getElementById('verdict').innerHTML =
`<b>Ответ про тайм-стоп:</b> на этой выборке 10 мин НЕ оптимален, но и разница с другими — в пределах шума (±0.03%). Видно главное структурное: <b>TP +1.5% почти не достаётся</b> (всего ${h10?h10.tp:'~10'} раз из ~100 за 10 мин), а SL −0.5% и выход по времени — основная масса. `+
`То есть за 10 мин цена альта редко проходит +1.5%, и сделки закрываются около нуля или по стопу. `+
`<b>Вывод:</b> либо тейк 1.5% слишком далёкий для 10-мин скальпа (тогда тейк ближе, напр. 0.6-0.8%), либо время держать дольше под широкий тейк — но тогда растёт доля стопов. Это и есть тот компромисс, который решается ТОЛЬКО на большой выборке (Фаза 1). Сейчас стратегия ≈ безубыток-шум, эдж из 4ч-бэктеста пока НЕ воспроизвёлся вживую — нормально, данных мало.`;
document.getElementById('foot').textContent='Метод: реальные сигналы signal_log × path depth.db, path-resolved TP/SL. Бендер';
</script>
</body></html>