← Back
<!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(33,208,122,.10),transparent),
               radial-gradient(900px 500px at 0% 0%,rgba(59,130,246,.08),transparent),var(--bg);
    color:var(--txt);min-height:100vh;padding:22px 14px;line-height:1.45}
  .wrap{max-width:1080px;margin:0 auto}
  header{margin-bottom:12px}
  h1{font-size:21px;font-weight:700;letter-spacing:-.5px}
  h1 .em{background:linear-gradient(90deg,#10b981,var(--blue));-webkit-background-clip:text;background-clip:text;color:transparent}
  .sub{color:var(--muted);font-size:12px;margin-top:5px}
  .glass{background:var(--card);border:1px solid var(--border);border-radius:13px}
  .warn{padding:11px 15px;margin-bottom:12px;border-left:3px solid var(--amber);font-size:11.5px;background:rgba(245,158,11,.06)}
  .warn b{color:var(--amber)}
  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
  .kpi{padding:13px;text-align:center}
  .kpi .lbl{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.4px}
  .kpi .val{font-size:22px;font-weight:800;margin:4px 0 1px}
  .kpi .sm{font-size:10px;color:var(--muted)}
  .section{padding:14px 16px;margin-bottom:12px}
  .section h2{font-size:13px;font-weight:600;margin-bottom:3px}
  .section .h{font-size:10.5px;color:var(--muted);margin-bottom:9px}
  table{width:100%;border-collapse:collapse;font-size:11.5px}
  th,td{text-align:right;padding:6px 5px}
  th:first-child,td:first-child{text-align:left}
  th{color:var(--muted);font-weight:500;font-size:9.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}
  .pos{color:var(--green)}.neg{color:var(--red)}.mut{color:var(--muted)}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
  /* heatmap */
  .hm{width:100%;border-collapse:separate;border-spacing:4px;font-size:11.5px}
  .hm th{color:var(--muted);font-size:10px;font-weight:500}
  .hm td{text-align:center;padding:9px 4px;border-radius:7px;font-weight:700;font-variant-numeric:tabular-nums}
  .hm td.lbl{background:none;color:var(--muted);font-weight:500;text-align:right;font-size:10px}
  .bars{display:flex;flex-direction:column;gap:5px}
  .bar{display:flex;align-items:center;gap:8px;font-size:11px}
  .bar .k{width:42px;color:var(--muted);text-align:right}
  .bar .t{flex:1;height:16px;border-radius:4px;background:rgba(255,255,255,.05);overflow:hidden}
  .bar .t>div{height:100%;border-radius:4px}
  .bar .v{width:42px;font-weight:600;font-variant-numeric:tabular-nums}
  .verdict{padding:14px 16px;border-left:3px solid var(--green);font-size:12px}
  .verdict b{color:var(--green)}
  .foot{color:var(--muted);font-size:10px;margin-top:7px;text-align:center}
  @media(max-width:720px){.kpis{grid-template-columns:repeat(2,1fr)}.grid2{grid-template-columns:1fr}}
</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>🎯 Сетка TP × SL (net P&L/сделку, тайм-стоп 10 мин, maker)</h2>
    <div class="h">Зелёное = выше. Видно направление: шире тейк + уже стоп = выше net.</div>
    <table class="hm" id="hm"></table>
  </div>

  <div class="grid2">
    <div class="section glass" style="margin:0">
      <h2>📏 Куда доходит цена за 10 мин</h2>
      <div class="h">% сделок, достигших хода (для выбора TP/SL)</div>
      <div class="bars" id="reach"></div>
    </div>
    <div class="section glass" style="margin:0">
      <h2>⏱ Тайм-стоп <span class="mut" style="font-weight:400" id="bb"></span></h2>
      <table id="sweep"><thead><tr><th>Hold</th><th>n</th><th>WR</th><th>net/сд.</th><th>Σ</th></tr></thead><tbody></tbody></table>
    </div>
  </div>

  <div class="section glass">
    <h2>🎚 По Confidence — впервые виден тренд!</h2>
    <div class="h">сила дисбаланса. Бракет TP/SL = лучший из сетки, hold 10м.</div>
    <table id="conf"><thead><tr><th>Confidence</th><th>n</th><th>WR</th><th>net/сд.</th><th>Σ</th></tr></thead><tbody></tbody></table>
  </div>

  <div class="grid2">
    <div class="section glass" style="margin:0"><h2>📈 Направление</h2><table id="dir"><thead><tr><th>Сторона</th><th>n</th><th>WR</th><th>net/сд.</th></tr></thead><tbody></tbody></table>
      <div class="h" style="margin-top:8px">🚪 выход: <span id="exit"></span></div></div>
    <div class="section glass" style="margin:0"><h2>🕐 По часам UTC</h2><table id="hour"><thead><tr><th>Час</th><th>n</th><th>WR</th><th>net/сд.</th></tr></thead><tbody></tbody></table></div>
  </div>

  <div class="section glass">
    <h2>🔥 По символам (топ-12)</h2>
    <table id="sym"><thead><tr><th>Символ</th><th>n</th><th>WR</th><th>net/сд.</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 = {"fee": 0.036, "n": 210, "grid": [{"tp": 0.5, "cells": [{"sl": 0.3, "net": 0.0411, "wr": 47.3}, {"sl": 0.5, "net": -0.0042, "wr": 51.2}, {"sl": 0.8, "net": -0.0615, "wr": 54.7}]}, {"tp": 0.8, "cells": [{"sl": 0.3, "net": 0.1102, "wr": 43.3}, {"sl": 0.5, "net": 0.074, "wr": 47.8}, {"sl": 0.8, "net": 0.0292, "wr": 52.2}]}, {"tp": 1.0, "cells": [{"sl": 0.3, "net": 0.1371, "wr": 41.3}, {"sl": 0.5, "net": 0.1039, "wr": 45.8}, {"sl": 0.8, "net": 0.0569, "wr": 50.2}]}, {"tp": 1.5, "cells": [{"sl": 0.3, "net": 0.1762, "wr": 39.3}, {"sl": 0.5, "net": 0.1469, "wr": 43.3}, {"sl": 0.8, "net": 0.1019, "wr": 47.8}]}, {"tp": 2.0, "cells": [{"sl": 0.3, "net": 0.2206, "wr": 39.3}, {"sl": 0.5, "net": 0.1714, "wr": 42.3}, {"sl": 0.8, "net": 0.1248, "wr": 46.8}]}], "best": {"tp": 2.0, "sl": 0.3, "net": 0.2206, "wr": 39.3}, "sweep": [{"hold": 3, "n": 197, "wr": 39.6, "net_exp": 0.1298, "net_tot": 25.56, "tp": 7, "sl": 67, "to": 123}, {"hold": 5, "n": 197, "wr": 45.2, "net_exp": 0.1938, "net_tot": 38.18, "tp": 15, "sl": 79, "to": 103}, {"hold": 10, "n": 201, "wr": 39.3, "net_exp": 0.2206, "net_tot": 44.35, "tp": 21, "sl": 100, "to": 80}, {"hold": 15, "n": 203, "wr": 36.9, "net_exp": 0.2245, "net_tot": 45.57, "tp": 25, "sl": 114, "to": 64}, {"hold": 30, "n": 210, "wr": 34.3, "net_exp": 0.2455, "net_tot": 51.56, "tp": 36, "sl": 132, "to": 42}], "dir": [{"k": "LONG", "n": 108, "wr": 42.6, "net_exp": 0.201, "net_tot": 21.71, "tp": 9, "sl": 51, "to": 48}, {"k": "SHORT", "n": 93, "wr": 35.5, "net_exp": 0.2435, "net_tot": 22.64, "tp": 12, "sl": 49, "to": 32}], "conf": [{"k": "50-59", "n": 132, "wr": 34.8, "net_exp": 0.1093, "net_tot": 14.43, "tp": 10, "sl": 70, "to": 52}, {"k": "60-69", "n": 45, "wr": 46.7, "net_exp": 0.3633, "net_tot": 16.35, "tp": 5, "sl": 22, "to": 18}, {"k": "70+", "n": 24, "wr": 50.0, "net_exp": 0.5655, "net_tot": 13.57, "tp": 6, "sl": 8, "to": 10}], "sym": [{"k": "PORTAL", "n": 27, "wr": 29.6, "net_exp": 0.095, "net_tot": 2.57, "tp": 2, "sl": 18, "to": 7}, {"k": "LAB", "n": 24, "wr": 25.0, "net_exp": 0.1525, "net_tot": 3.66, "tp": 3, "sl": 18, "to": 3}, {"k": "HOME", "n": 23, "wr": 47.8, "net_exp": 0.5735, "net_tot": 13.19, "tp": 5, "sl": 10, "to": 8}, {"k": "APR", "n": 14, "wr": 35.7, "net_exp": 0.2843, "net_tot": 3.98, "tp": 3, "sl": 6, "to": 5}, {"k": "H", "n": 13, "wr": 30.8, "net_exp": 0.188, "net_tot": 2.44, "tp": 2, "sl": 8, "to": 3}, {"k": "ZEC", "n": 12, "wr": 50.0, "net_exp": 0.1146, "net_tot": 1.38, "tp": 0, "sl": 4, "to": 8}, {"k": "HYPE", "n": 12, "wr": 33.3, "net_exp": 0.0694, "net_tot": 0.83, "tp": 0, "sl": 4, "to": 8}, {"k": "UB", "n": 12, "wr": 25.0, "net_exp": 0.0026, "net_tot": 0.03, "tp": 1, "sl": 9, "to": 2}, {"k": "BCH", "n": 11, "wr": 63.6, "net_exp": 0.2474, "net_tot": 2.72, "tp": 0, "sl": 1, "to": 10}, {"k": "FET", "n": 10, "wr": 60.0, "net_exp": 0.2093, "net_tot": 2.09, "tp": 0, "sl": 2, "to": 8}, {"k": "CLO", "n": 7, "wr": 14.3, "net_exp": -0.0074, "net_tot": -0.05, "tp": 1, "sl": 6, "to": 0}, {"k": "LIT", "n": 5, "wr": 40.0, "net_exp": 0.2707, "net_tot": 1.35, "tp": 0, "sl": 3, "to": 2}], "hour": [{"k": "09:00", "n": 37, "wr": 37.8, "net_exp": 0.1738, "net_tot": 6.43, "tp": 4, "sl": 22, "to": 11}, {"k": "10:00", "n": 46, "wr": 39.1, "net_exp": 0.2463, "net_tot": 11.33, "tp": 5, "sl": 23, "to": 18}, {"k": "11:00", "n": 52, "wr": 44.2, "net_exp": 0.2507, "net_tot": 13.03, "tp": 4, "sl": 23, "to": 25}, {"k": "12:00", "n": 41, "wr": 43.9, "net_exp": 0.3125, "net_tot": 12.81, "tp": 7, "sl": 18, "to": 16}, {"k": "13:00", "n": 25, "wr": 24.0, "net_exp": 0.0297, "net_tot": 0.74, "tp": 1, "sl": 14, "to": 10}], "exit": {"tp": 21, "sl": 100, "time": 80}, "reach": {"n": 201, "mfe": {"0.3": 58.2, "0.5": 47.8, "0.8": 38.8, "1.0": 30.8, "1.5": 16.9, "2.0": 10.9}, "mae": {"0.3": 50.2, "0.5": 42.3, "0.8": 32.3, "1.0": 27.4}}};
const pct=(v,d=3)=>(v>0?'+':'')+v.toFixed(d)+'%';
const sgn=v=>v>0?'pos':v<0?'neg':'mut';
const B=D.best;

document.getElementById('sub').textContent =
  `${D.n} реальных сделок (path из depth.db 10с) · ~5ч окно · maker ${D.fee}% · 374 сигнала всего, 210 в 4ч-окне`;

document.getElementById('warn').innerHTML =
  `⚠️ <b>~5ч / ${D.n} сделок.</b> Уже не полный шум, но <b>1 режим рынка</b> — на медвежьем/боковом может развалиться. Лучший TP2/SL0.3 — <b>in-sample оптимум, хрупкий</b>: стоп 0.3% нереален вживую (спред+слиппедж съедят), держится на 11% сделок что дошли до +2%. Maker-залив по цене сигнала (оптимистично). Не торговать по этим цифрам — это для анализа.`;

const kpis=[
  {l:'Сделок (path)',v:D.n,c:'var(--txt)',sm:'в 4ч-окне'},
  {l:'Лучший net/сд.',v:pct(B.net),c:'var(--green)',sm:`TP${B.tp}/SL${B.sl}`},
  {l:'Conf 70+ net',v:pct(D.conf.find(c=>c.k==='70+').net_exp),c:'var(--green)',sm:'сильный дисбаланс'},
  {l:'Доходят до +1%',v:D.reach.mfe['1.0']+'%',c:'var(--txt)',sm:'за 10 мин'},
];
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('');

// heatmap
const allnet=D.grid.flatMap(r=>r.cells.map(c=>c.net));
const mn=Math.min(...allnet),mx=Math.max(...allnet);
const col=v=>{const t=(v-mn)/(mx-mn||1);const g=Math.round(33+t*120),r=Math.round(120-t*90);return `rgba(${r},${g},90,${0.25+t*0.5})`};
const sls=D.grid[0].cells.map(c=>c.sl);
let hm='<tr><th class="lbl">TP \\ SL</th>'+sls.map(s=>`<th>SL ${s}%</th>`).join('')+'</tr>';
D.grid.forEach(r=>{
  hm+=`<tr><td class="lbl">TP ${r.tp}%</td>`+r.cells.map(c=>`<td style="background:${col(c.net)}">${pct(c.net,2)}<br><span style="font-size:9px;font-weight:400;opacity:.7">WR ${c.wr}%</span></td>`).join('')+'</tr>';
});
document.getElementById('hm').innerHTML=hm;

// reach bars
const rm=D.reach.mfe, rmae=D.reach.mae;
const order=['0.3','0.5','0.8','1.0','1.5','2.0'];
document.getElementById('reach').innerHTML=
  order.map(k=>`<div class="bar"><div class="k pos">+${k}%</div><div class="t"><div style="width:${rm[k]}%;background:var(--green)"></div></div><div class="v">${rm[k]}%</div></div>`).join('')+
  '<div class="h" style="margin:6px 0 2px">против (MAE):</div>'+
  ['0.3','0.5','0.8','1.0'].map(k=>`<div class="bar"><div class="k neg">−${k}%</div><div class="t"><div style="width:${rmae[k]}%;background:var(--red)"></div></div><div class="v">${rmae[k]}%</div></div>`).join('');

document.getElementById('bb').textContent=`TP${B.tp}/SL${B.sl}`;
document.querySelector('#sweep tbody').innerHTML=D.sweep.map(s=>
  `<tr><td>${s.hold}м</td><td class="mut">${s.n}</td><td>${s.wr}%</td><td class="${sgn(s.net_exp)}" style="font-weight:600">${pct(s.net_exp)}</td><td class="${sgn(s.net_tot)}">${pct(s.net_tot,1)}</td></tr>`).join('');

document.querySelector('#conf tbody').innerHTML=D.conf.map(c=>
  `<tr><td>${c.k}</td><td class="mut">${c.n}</td><td>${c.wr}%</td><td class="${sgn(c.net_exp)}" style="font-weight:700">${pct(c.net_exp)}</td><td class="${sgn(c.net_tot)}">${pct(c.net_tot,1)}</td></tr>`).join('');

document.querySelector('#dir tbody').innerHTML=D.dir.map(c=>
  `<tr><td>${c.k}</td><td class="mut">${c.n}</td><td>${c.wr}%</td><td class="${sgn(c.net_exp)}" style="font-weight:600">${pct(c.net_exp)}</td></tr>`).join('');
const e=D.exit;document.getElementById('exit').innerHTML=`<span class="pos">TP ${e.tp}</span> / <span class="neg">SL ${e.sl}</span> / <span class="mut">⏱ ${e.time}</span>`;

document.querySelector('#hour tbody').innerHTML=D.hour.map(c=>
  `<tr><td>${c.k}</td><td class="mut">${c.n}</td><td>${c.wr}%</td><td class="${sgn(c.net_exp)}" style="font-weight:600">${pct(c.net_exp)}</td></tr>`).join('');

document.querySelector('#sym tbody').innerHTML=D.sym.map(c=>
  `<tr><td>${c.k}</td><td class="mut">${c.n}</td><td>${c.wr}%</td><td class="${sgn(c.net_exp)}" style="font-weight:600">${pct(c.net_exp)}</td><td class="${sgn(c.net_tot)}">${pct(c.net_tot,1)}</td></tr>`).join('');

document.getElementById('verdict').innerHTML =
  `<b>Главное (n=${D.n}, осторожно — 5ч):</b><br>`+
  `• 🔑 <b>Confidence ВПЕРВЫЕ работает монотонно:</b> 50-59 +0.11% → 60-69 +0.36% → 70+ <b>+0.57%/сделку</b> (WR 35→47→50%). Сильный дисбаланс реально предсказывает — это первый намёк на эдж. Вывод: <b>гейтить по confidence ≥60-70</b>.<br>`+
  `• 📈 Сетка монотонна: шире TP + уже SL = выше net (классика асимметрии). Но TP2/SL0.3 — хрупкий in-sample оптимум, стоп 0.3% нереален. Разумный компромисс: <b>TP 1-1.5% / SL 0.5%</b>.<br>`+
  `• 📏 Цена доходит +1% в 31%, +2% в 11% случаев за 10м → широкий тейк ловит хвост, но редко.<br>`+
  `• Направление симметрично, по часам стабильно (кроме 13:00).<br>`+
  `<b>Действие:</b> наблюдаем дальше; кандидат на тюнинг порога эмита (поднять с 0.35 к ~0.5) + гейт пушей по conf. Финально — на нескольких днях/режимах.`;

document.getElementById('foot').textContent='Реальные сигналы signal_log × path depth.db · path-resolved TP/SL/тайм-стоп · maker 0.036% · Бендер';
</script>
</body></html>