Add options stats holding time metrics and lightweight charts.

Show average hold duration for wins and losses, open positions, and CSS ring/bar visualizations in the stats tab.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-10 11:32:45 +08:00
parent 9f255f13dd
commit d1ab2d5172
7 changed files with 455 additions and 88 deletions
+78 -19
View File
@@ -93,26 +93,85 @@
</div>
</div>
<div class="options-pos-pane" data-opt-pos-pane="stats" role="tabpanel" aria-labelledby="opt-pos-tab-stats" hidden>
<div class="options-stats-grid">
<div class="options-stat-item">
<span class="k">胜率</span>
<span class="v" id="opt-stats-winrate"></span>
<div class="options-stats-panel">
<div class="options-stats-charts">
<div class="opt-stats-chart opt-stats-chart--ring">
<div class="opt-stats-ring" id="opt-stats-ring" style="--win-pct: 0">
<span class="opt-stats-ring-label" id="opt-stats-ring-label"></span>
</div>
<span class="opt-stats-chart-caption">胜率</span>
</div>
<div class="opt-stats-chart opt-stats-chart--pnl">
<div class="opt-stats-bar-row">
<span class="k">盈利</span>
<div class="opt-stats-bar-track">
<div class="opt-stats-bar-fill opt-stats-bar-fill--profit" id="opt-stats-bar-profit"></div>
</div>
<span class="v pos-pnl-profit" id="opt-stats-bar-profit-label"></span>
</div>
<div class="opt-stats-bar-row">
<span class="k">亏损</span>
<div class="opt-stats-bar-track">
<div class="opt-stats-bar-fill opt-stats-bar-fill--loss" id="opt-stats-bar-loss"></div>
</div>
<span class="v pos-pnl-loss" id="opt-stats-bar-loss-label"></span>
</div>
</div>
</div>
<div class="options-stat-item">
<span class="k">盈亏</span>
<span class="v" id="opt-stats-plr"></span>
<div class="opt-stats-chart opt-stats-chart--hold">
<div class="opt-stats-chart-title">持仓时长对</div>
<div class="opt-stats-bar-row">
<span class="k">盈单</span>
<div class="opt-stats-bar-track">
<div class="opt-stats-bar-fill opt-stats-bar-fill--profit" id="opt-stats-bar-win-hold"></div>
</div>
<span class="v" id="opt-stats-win-hold-label"></span>
</div>
<div class="opt-stats-bar-row">
<span class="k">亏单</span>
<div class="opt-stats-bar-track">
<div class="opt-stats-bar-fill opt-stats-bar-fill--loss" id="opt-stats-bar-loss-hold"></div>
</div>
<span class="v" id="opt-stats-loss-hold-label"></span>
</div>
</div>
<div class="options-stat-item">
<span class="k">已平笔数</span>
<span class="v" id="opt-stats-closed"></span>
</div>
<div class="options-stat-item">
<span class="k">盈利</span>
<span class="v pos-pnl-profit" id="opt-stats-profit"></span>
</div>
<div class="options-stat-item">
<span class="k">亏损</span>
<span class="v pos-pnl-loss" id="opt-stats-loss"></span>
<div class="options-stats-grid">
<div class="options-stat-item">
<span class="k">胜率</span>
<span class="v" id="opt-stats-winrate"></span>
</div>
<div class="options-stat-item">
<span class="k">盈亏比</span>
<span class="v" id="opt-stats-plr"></span>
</div>
<div class="options-stat-item">
<span class="k">已平笔数</span>
<span class="v" id="opt-stats-closed"></span>
</div>
<div class="options-stat-item">
<span class="k">盈利</span>
<span class="v pos-pnl-profit" id="opt-stats-profit"></span>
</div>
<div class="options-stat-item">
<span class="k">亏损</span>
<span class="v pos-pnl-loss" id="opt-stats-loss"></span>
</div>
<div class="options-stat-item">
<span class="k">均持仓</span>
<span class="v" id="opt-stats-avg-hold"></span>
</div>
<div class="options-stat-item">
<span class="k">盈单持仓</span>
<span class="v" id="opt-stats-win-hold"></span>
</div>
<div class="options-stat-item">
<span class="k">亏单持仓</span>
<span class="v" id="opt-stats-loss-hold"></span>
</div>
<div class="options-stat-item">
<span class="k">持仓中</span>
<span class="v" id="opt-stats-open-hold"></span>
</div>
</div>
</div>
</div>
@@ -141,4 +200,4 @@
</div>
</div>
<script src="/static/options_expiry_countdown.js?v=1"></script>
<script src="/static/options_panel.js?v=19"></script>
<script src="/static/options_panel.js?v=20"></script>