<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Асимметрия R:R на всех сигналах</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:24px 16px;line-height:1.5}
.wrap{max-width:1000px;margin:0 auto}
header{margin-bottom:16px}
h1{font-size:24px;font-weight:700;letter-spacing:-.5px}
h1 .em{background:linear-gradient(90deg,var(--green),var(--blue));-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{color:var(--muted);font-size:13px;margin-top:6px}
.glass{background:var(--card);border:1px solid var(--border);border-radius:16px;backdrop-filter:blur(12px)}
.lead{padding:16px 18px;margin-bottom:18px;border-left:3px solid var(--green);font-size:13.5px}
.lead b{color:var(--green)}
.section{padding:20px;margin-bottom:18px}
.section h2{font-size:15px;font-weight:600;margin-bottom:6px}
.section .hint{font-size:12px;color:var(--muted);margin-bottom:12px}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:right;padding:10px 8px}
th:first-child,td:first-child{text-align:left}
th{color:var(--muted);font-weight:500;font-size:11px;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,.10)}
tr.best td:first-child{font-weight:700;color:var(--green)}
tr.sym td:first-child{color:var(--muted)}
.pos{color:var(--green)}.neg{color:var(--red)}.mut{color:var(--muted)}
.tag{font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px;background:rgba(33,208,122,.18);color:var(--green)}
.bar{display:inline-block;height:8px;border-radius:4px;vertical-align:middle;margin-left:6px}
.verdict{padding:16px 18px;margin-bottom:18px;border-left:3px solid var(--amber);font-size:13.5px}
.verdict b{color:var(--amber)}
.cap{font-size:12px;color:var(--muted);margin-top:10px;line-height:1.6}
.foot{color:var(--muted);font-size:11.5px;margin-top:8px;text-align:center}
</style>
</head>
<body>
<div class="wrap">
<header>
<h1>⚖️ Асимметрия R:R — <span class="em">по ВСЕМ сигналам</span></h1>
<div class="sub" id="sub"></div>
</header>
<div class="lead glass" id="lead"></div>
<div class="section glass">
<h2>📊 Сетка брекетов (все сигналы, net после комиссии 0.1%)</h2>
<div class="hint">net P&L на сделку, %. Сортировка по реалист. сценарию. 🟢 = лучший · серым = симметричные (R:R 1:1).</div>
<table id="grid"><thead><tr>
<th>Брекет TP/SL</th><th>R:R</th><th>WR</th>
<th>🔴 Пессим.</th><th>⚪ Реалист.</th><th>🟢 Оптим.</th>
</tr></thead><tbody></tbody></table>
<div class="cap" id="gridNote"></div>
</div>
<div class="verdict glass" id="verdict"></div>
<div class="foot" id="foot"></div>
</div>
<script>
const DATA = {"n": 6014, "grid": [{"tp": 0.5, "sl": 0.5, "rr": 1.0, "pess": -0.1979, "mid": -0.0628, "opt": 0.0723, "wr": 40.1, "tot_mid": -377.8}, {"tp": 1, "sl": 1, "rr": 1.0, "pess": -0.2219, "mid": -0.0211, "opt": 0.1798, "wr": 43.9, "tot_mid": -126.6}, {"tp": 1.5, "sl": 1.5, "rr": 1.0, "pess": -0.1995, "mid": 0.0197, "opt": 0.2389, "wr": 46.8, "tot_mid": 118.5}, {"tp": 1, "sl": 0.5, "rr": 2.0, "pess": -0.0178, "mid": 0.1005, "opt": 0.3371, "wr": 40.0, "tot_mid": 604.4}, {"tp": 1.5, "sl": 1, "rr": 1.5, "pess": -0.0464, "mid": 0.1278, "opt": 0.3892, "wr": 43.6, "tot_mid": 768.7}, {"tp": 2, "sl": 1, "rr": 2.0, "pess": 0.1138, "mid": 0.2683, "opt": 0.5773, "wr": 43.5, "tot_mid": 1613.7}, {"tp": 2, "sl": 1.5, "rr": 1.33, "pess": -0.0342, "mid": 0.1638, "opt": 0.4279, "wr": 46.5, "tot_mid": 985.1}, {"tp": 3, "sl": 1.5, "rr": 2.0, "pess": 0.2487, "mid": 0.4038, "opt": 0.7141, "wr": 45.9, "tot_mid": 2428.4}, {"tp": 2, "sl": 2, "rr": 1.0, "pess": -0.1667, "mid": 0.0657, "opt": 0.2982, "wr": 48.7, "tot_mid": 395.4}, {"tp": 3, "sl": 2, "rr": 1.5, "pess": 0.1221, "mid": 0.3037, "opt": 0.5761, "wr": 47.9, "tot_mid": 1826.5}]};
const pct = (v,d=2)=>(v>0?'+':'')+v.toFixed(d)+'%';
const sgn = v=>v>0?'pos':v<0?'neg':'mut';
document.getElementById('sub').textContent = `${DATA.n.toLocaleString('ru-RU')} сделок (все типы) · комиссия 0.1% round-trip · период тот же`;
const g=[...DATA.grid].sort((a,b)=>b.mid-a.mid);
const best=g[0];
const sym11=DATA.grid.find(r=>r.tp===1&&r.sl===1);
document.getElementById('lead').innerHTML =
`<b>Главное:</b> асимметрия спасает ДАЖE весь неотфильтрованный набор. Симметричный 1%/1% даёт ${pct(sym11.mid)}/сделку (около нуля), `+
`а <b>3% / 1.5% (R:R 2:1)</b> — <b>${pct(best.mid)}/сделку</b> реалистично и ${pct(best.pess)} даже в худшем сценарии. `+
`И тут выборка большая (${DATA.n.toLocaleString('ru-RU')}) — результату можно доверять куда больше, чем срезу по сильным типам.`;
const maxAbs=Math.max(...g.map(r=>Math.abs(r.mid)));
document.querySelector('#grid tbody').innerHTML = g.map(r=>{
const isBest = r.tp===best.tp && r.sl===best.sl;
const isSym = r.rr===1;
const w=Math.round(60*Math.abs(r.mid)/maxAbs);
const col=r.mid>0?'var(--green)':'var(--red)';
return `<tr class="${isBest?'best':''} ${isSym?'sym':''}">
<td>${r.tp}% / ${r.sl}% ${isBest?'<span class="tag">BEST</span>':''}</td>
<td class="mut">${r.rr}:1</td>
<td>${r.wr}%</td>
<td class="${sgn(r.pess)}">${pct(r.pess)}</td>
<td class="${sgn(r.mid)}" style="font-weight:700">${pct(r.mid)}<span class="bar" style="width:${w}px;background:${col}"></span></td>
<td class="${sgn(r.opt)}">${pct(r.opt)}</td>
</tr>`;
}).join('');
document.getElementById('gridNote').innerHTML =
'📈 Закономерность железная: все топовые брекеты — с <b>широким тейком и узким стопом</b>. Все симметричные (1:1) болтаются у нуля. Причина: сигналы ловят импульс — когда правы, цена идёт далеко; узкий тейк рубит этот хвост, а узкий стоп режет шумом.';
document.getElementById('verdict').innerHTML =
`<b>Что это значит для твоей идеи «брать по 1%»:</b> резать прибыль на +1% — это и есть то, что убивало стратегию. `+
`Перевес в данных есть, но снимается он НЕ частыми мелкими +1%, а <b>редкими крупными движениями</b>, которым надо дать дойти. `+
`Рабочая формула из наших цифр: <b>тейк ≥2× стопа</b>, стоп 1–1.5%, тейк 2–3%. `+
`⚠️ Оговорка метода: «пилы» (касание обоих уровней) разрешены диапазоном сценариев; точный intrabar-порядок требует минутных данных. Но направление вывода устойчиво на всех 6014 сделках.`;
document.getElementById('foot').textContent =
'Метод: TP=mfe≥X, SL=mae≤−Y (до 1д). Источник: signal_log · Бендер';
</script>
</body>
</html>