← 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(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:1040px;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:12px 16px;margin-bottom:14px;border-left:3px solid var(--amber);font-size:12px;background:rgba(245,158,11,.06)}
  .warn b{color:var(--amber)}
  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:14px}
  .kpi{padding:14px;text-align:center}
  .kpi .lbl{color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.4px}
  .kpi .val{font-size:23px;font-weight:800;margin:4px 0 1px}
  .kpi .sm{font-size:10.5px;color:var(--muted)}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
  .panel{padding:15px 17px}
  .panel h2{font-size:13.5px;font-weight:600;margin-bottom:9px}
  table{width:100%;border-collapse:collapse;font-size:12px}
  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:10px;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)}
  .exit{display:flex;height:26px;border-radius:7px;overflow:hidden;font-size:11px;font-weight:700;margin-bottom:6px}
  .exit>div{display:flex;align-items:center;justify-content:center}
  .verdict{padding:15px 17px;border-left:3px solid var(--amber);font-size:12.5px}
  .verdict b{color:var(--amber)}
  .foot{color:var(--muted);font-size:10.5px;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="panel glass" style="margin-bottom:14px">
    <h2>🚪 Чем закрывались сделки</h2>
    <div class="exit" id="exit"></div>
    <div class="sub" id="exitCap"></div>
  </div>

  <div class="grid2">
    <div class="panel glass"><h2>📈 По направлению</h2><table id="t_dir"></table></div>
    <div class="panel glass"><h2>🎚 По confidence</h2><table id="t_conf"></table></div>
  </div>

  <div class="grid2">
    <div class="panel glass"><h2>🔥 По символам</h2><table id="t_sym"></table></div>
    <div class="panel glass"><h2>⏱ По часам (UTC)</h2><table id="t_hour"></table></div>
  </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": 0.036, "hold": 10, "overall": {"n": 108, "wr": 43.5, "net_exp": 0.0554, "net_tot": 5.98}, "exit": {"tp": 13, "sl": 47, "time": 48}, "dir": [{"k": "LONG", "n": 69, "wr": 43.5, "net_exp": 0.0427, "net_tot": 2.94}, {"k": "SHORT", "n": 39, "wr": 43.6, "net_exp": 0.078, "net_tot": 3.04}], "conf": [{"k": "50-59", "n": 88, "wr": 45.5, "net_exp": 0.063, "net_tot": 5.54}, {"k": "60-69", "n": 13, "wr": 30.8, "net_exp": -0.0639, "net_tot": -0.83}, {"k": "70+", "n": 7, "wr": 42.9, "net_exp": 0.1815, "net_tot": 1.27}], "sym": [{"k": "LAB", "n": 12, "wr": 16.7, "net_exp": -0.2027, "net_tot": -2.43}, {"k": "FET", "n": 10, "wr": 50.0, "net_exp": 0.1015, "net_tot": 1.02}, {"k": "PORTAL", "n": 10, "wr": 40.0, "net_exp": 0.2369, "net_tot": 2.37}, {"k": "HOME", "n": 9, "wr": 44.4, "net_exp": 0.0802, "net_tot": 0.72}, {"k": "BCH", "n": 7, "wr": 28.6, "net_exp": -0.1394, "net_tot": -0.98}, {"k": "H", "n": 6, "wr": 33.3, "net_exp": -0.0237, "net_tot": -0.14}, {"k": "HYPE", "n": 6, "wr": 83.3, "net_exp": 0.3321, "net_tot": 1.99}, {"k": "LIT", "n": 5, "wr": 100.0, "net_exp": 0.6392, "net_tot": 3.2}, {"k": "EPIC", "n": 5, "wr": 20.0, "net_exp": -0.136, "net_tot": -0.68}, {"k": "UB", "n": 5, "wr": 60.0, "net_exp": 0.1192, "net_tot": 0.6}, {"k": "XLM", "n": 4, "wr": 50.0, "net_exp": 0.1365, "net_tot": 0.55}, {"k": "ICP", "n": 4, "wr": 25.0, "net_exp": -0.2618, "net_tot": -1.05}], "hour": [{"k": "06:00", "n": 10, "wr": 30.0, "net_exp": 0.1182, "net_tot": 1.18}, {"k": "07:00", "n": 65, "wr": 43.1, "net_exp": 0.0087, "net_tot": 0.57}, {"k": "08:00", "n": 33, "wr": 48.5, "net_exp": 0.1283, "net_tot": 4.24}]};
const pct=(v,d=3)=>(v>0?'+':'')+v.toFixed(d)+'%';
const sgn=v=>v>0?'pos':v<0?'neg':'mut';
const O=D.overall;

document.getElementById('sub').textContent =
  `${O.n} реальных сделок · TP ${D.tp}% / SL ${D.sl}% · тайм-стоп ${D.hold} мин · maker ${D.fee}% · path из depth.db (10с)`;

document.getElementById('warn').innerHTML =
  `⚠️ <b>~1.5ч / ${O.n} сделок = ШУМ, не статистика.</b> Все цифры в пределах ±0.1%/сделку, символы по 4-12 сделок — разброс случайный. Это «как выглядели бы реальные сделки» + механика, НЕ доказательство эджа. Maker-залив по цене сигнала (оптимистично). Честная картина — на Фазе 1 (недели).`;

const kpis=[
  {l:'Сделок',v:O.n,c:'var(--txt)',sm:''},
  {l:'Win-rate',v:O.wr+'%',c:'var(--txt)',sm:''},
  {l:'net / сделку',v:pct(O.net_exp),c:O.net_exp>0?'var(--green)':'var(--red)',sm:'после maker-комиссии'},
  {l:'Σ P&L',v:pct(O.net_tot,1),c:O.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('');

// exit bar
const e=D.exit, et=e.tp+e.sl+e.time;
document.getElementById('exit').innerHTML=
  `<div style="width:${100*e.tp/et}%;background:rgba(33,208,122,.55)">TP ${e.tp}</div>`+
  `<div style="width:${100*e.sl/et}%;background:rgba(246,70,93,.55)">SL ${e.sl}</div>`+
  `<div style="width:${100*e.time/et}%;background:rgba(139,152,169,.4)">⏱ ${e.time}</div>`;
document.getElementById('exitCap').innerHTML=
  `TP +1.5% достигнут лишь <b>${e.tp}</b> раз (${(100*e.tp/et).toFixed(0)}%) — за 10 мин цена редко проходит +1.5%. Стоп −0.5% и выход по времени — основная масса.`;

function tbl(id,rows,head){
  document.getElementById(id).innerHTML=
    `<thead><tr><th>${head}</th><th>n</th><th>WR</th><th>net/сд.</th><th>Σ</th></tr></thead><tbody>`+
    rows.map(r=>`<tr><td>${r.k}</td><td class="mut">${r.n}</td><td>${r.wr}%</td>
      <td class="${sgn(r.net_exp)}" style="font-weight:600">${pct(r.net_exp)}</td>
      <td class="${sgn(r.net_tot)}">${pct(r.net_tot,1)}</td></tr>`).join('')+`</tbody>`;
}
tbl('t_dir',D.dir,'Сторона');
tbl('t_conf',D.conf,'Confidence');
tbl('t_sym',D.sym,'Символ');
tbl('t_hour',D.hour,'Час');

document.getElementById('verdict').innerHTML =
  `<b>Что видно (с поправкой на шум):</b> overall ${pct(O.net_exp)}/сделку — около нуля. `+
  `LONG/SHORT симметричны (~равны). По символам разброс огромный (LIT +0.64%, HYPE +0.33% vs LAB −0.20%, ICP −0.26%) — это <b>чистая случайность на 4-12 сделках</b>, не «хорошие/плохие монеты». `+
  `Confidence: бакет 70+ выглядит лучше, но там <b>7 сделок</b> — верить нельзя. `+
  `<b>Структурный вывод (он надёжнее цифр):</b> TP +1.5% почти не достаётся за 10 мин (${e.tp}/${O.n}) → тейк, похоже, слишком далёкий для скальпа. Кандидат на Фазу 1: тестить тейк 0.6–0.8%. Но решаем — на неделях данных, не на 1.5 часах.`;

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