feat: Implement copytrading analytics and update WebUI
- Add v4 Tape-based CopytradingEstimator (Clustering, MAE, Tape Fills) - Add CopytradingBacktestHarness (Walk-Forward testing, Shrinkage, LCB ranking) - Add EF Core Migrations for FollowerFillPrice and Scoring fields - Update WebUI: Fix Trader Detail tab layout blowout - Update WebUI: Redesign Trader Detail menubar - Update WebUI: Display separate Quality and Copyability metric cards - Update WebUI: Add 'Highly Copyable' filter to Trader List
This commit is contained in:
@@ -127,7 +127,12 @@
|
||||
<!-- Traders Page -->
|
||||
<section class="page" id="page-traders">
|
||||
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:24px;">
|
||||
<h1 class="page-title" style="margin-bottom:0">Traders</h1>
|
||||
<div style="display:flex; align-items:center; gap:24px;">
|
||||
<h1 class="page-title" style="margin-bottom:0">Traders</h1>
|
||||
<label style="display:flex; align-items:center; gap:8px; font-weight:600; cursor:pointer; background:var(--bg-surface); padding:8px 12px; border-radius:6px; border:1px solid var(--border);">
|
||||
<input type="checkbox" id="chk-highly-copyable" onchange="loadTraders()"> Highly Copyable
|
||||
</label>
|
||||
</div>
|
||||
<div class="card" style="margin-bottom:0; padding:12px 20px; display:flex; gap:12px; align-items:center;">
|
||||
<span style="font-size:13px; font-weight:600">Add Trader:</span>
|
||||
<select id="addPlatform" class="platform-select">
|
||||
@@ -140,7 +145,7 @@
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="table-wrap">
|
||||
<table class="data-table"><thead><tr><th>#</th><th>Name</th><th>Platform</th><th>Score</th><th>Win Rate</th><th>PnL</th><th>Tier</th><th>Strategy</th><th>Actions</th></tr></thead>
|
||||
<table class="data-table"><thead><tr><th>#</th><th>Name</th><th>Platform</th><th>Combined Score</th><th>Quality</th><th>Copyability</th><th>Win Rate</th><th>PnL</th><th>Tier</th><th>Strategy</th><th>Actions</th></tr></thead>
|
||||
<tbody id="allTradersBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -181,20 +186,20 @@
|
||||
<!-- Trader Detail Page -->
|
||||
<section class="page" id="page-trader-detail">
|
||||
<!-- Trader Detail Menu Bar -->
|
||||
<div class="detail-header" style="justify-content:space-between; background:var(--bg-surface); padding:16px; border-radius:8px; border:1px solid var(--border); margin-bottom:24px; box-shadow:0 4px 12px rgba(0,0,0,0.1);">
|
||||
<div style="display:flex; align-items:center; gap:16px">
|
||||
<button class="btn-back" onclick="navigateBack()" style="background:transparent; border:none; color:var(--text-muted); cursor:pointer; font-weight:bold; font-size:16px;">← Back</button>
|
||||
<div style="width:1px; height:24px; background:var(--border);"></div>
|
||||
<h1 class="page-title" id="td-name" style="margin-bottom:0; font-size:24px;">Trader Name</h1>
|
||||
<div class="trader-menubar">
|
||||
<div class="trader-menubar-left">
|
||||
<button class="btn-back" onclick="navigateBack()">← Back</button>
|
||||
<div class="menubar-divider"></div>
|
||||
<h1 class="page-title" id="td-name" style="margin-bottom:0;">Trader Name</h1>
|
||||
</div>
|
||||
<div style="display:flex; gap:12px;">
|
||||
<button class="btn-sm" id="btn-toggle-watchlist" style="padding:8px 16px; background:var(--bg-input); color:var(--text); border:1px solid var(--border); border-radius:6px; cursor:pointer; font-weight:500; transition:all 0.2s;">
|
||||
<div class="trader-menubar-right">
|
||||
<button class="btn-sm btn-outline" id="btn-toggle-watchlist">
|
||||
☆ Watchlist
|
||||
</button>
|
||||
<button class="btn-sm" id="btn-open-platform" style="padding:8px 16px; background:var(--bg-input); color:var(--text); border:1px solid var(--border); border-radius:6px; cursor:pointer; font-weight:500; transition:all 0.2s; display:none;">
|
||||
<button class="btn-sm btn-outline" id="btn-open-platform" style="display:none;">
|
||||
🌐 Open Platform
|
||||
</button>
|
||||
<button class="btn-sm" id="btn-refresh-trader" style="padding:8px 16px; background:var(--primary); color:#000; border:none; border-radius:6px; cursor:pointer; font-weight:bold; transition:all 0.2s;">
|
||||
<button class="btn-sm btn-primary" id="btn-refresh-trader">
|
||||
⟱ Sync History
|
||||
</button>
|
||||
</div>
|
||||
@@ -222,10 +227,10 @@
|
||||
</div>
|
||||
<div class="detail-main">
|
||||
<!-- Tabs Navigation -->
|
||||
<div class="tabs-nav" style="display:flex; gap:16px; margin-bottom:16px; border-bottom:1px solid var(--border); padding-bottom:8px;">
|
||||
<button class="btn-tab active" data-tab="td-tab-analytics" onclick="switchTraderTab('td-tab-analytics')" style="background:transparent; border:none; color:var(--text); font-weight:bold; cursor:pointer;">Analytics & AI</button>
|
||||
<button class="btn-tab" data-tab="td-tab-recent" onclick="switchTraderTab('td-tab-recent')" style="background:transparent; border:none; color:var(--text-muted); cursor:pointer;">Recent Trades</button>
|
||||
<button class="btn-tab" data-tab="td-tab-positions" onclick="switchTraderTab('td-tab-positions')" style="background:transparent; border:none; color:var(--text-muted); cursor:pointer;">Positions</button>
|
||||
<div class="tabs-nav">
|
||||
<button class="btn-tab active" data-tab="td-tab-analytics" onclick="switchTraderTab('td-tab-analytics')">Analytics & AI</button>
|
||||
<button class="btn-tab" data-tab="td-tab-recent" onclick="switchTraderTab('td-tab-recent')">Recent Trades</button>
|
||||
<button class="btn-tab" data-tab="td-tab-positions" onclick="switchTraderTab('td-tab-positions')">Positions</button>
|
||||
</div>
|
||||
|
||||
<!-- Tab Content: Analytics -->
|
||||
@@ -234,10 +239,12 @@
|
||||
<div class="metric-card"><div class="metric-label">Win Rate</div><div class="metric-value" id="td-winrate">---</div></div>
|
||||
<div class="metric-card"><div class="metric-label">Total PnL</div><div class="metric-value" id="td-pnl">---</div></div>
|
||||
<div class="metric-card"><div class="metric-label">Total Trades</div><div class="metric-value" id="td-trades">---</div></div>
|
||||
<div class="metric-card"><div class="metric-label">Quality Edge</div><div class="metric-value" id="td-quality-score">---</div></div>
|
||||
<div class="metric-card"><div class="metric-label">Copyability</div><div class="metric-value" id="td-copyability-score">---</div></div>
|
||||
<div class="metric-card accent">
|
||||
<div class="metric-label">Score</div>
|
||||
<div class="metric-label">Combined Score</div>
|
||||
<div class="metric-value" id="td-score">---</div>
|
||||
<button class="btn-sm" id="btn-force-analyze" style="margin-top:8px; padding:4px 8px; width:100%; background:var(--bg-input);">Recalculate</button>
|
||||
<button class="btn-sm btn-outline" id="btn-force-analyze" style="margin-top:8px; padding:4px 8px; width:100%; border-color:rgba(255,255,255,0.2);">Recalculate</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user