← 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: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>