期权总览增加买一/流动性列,不足时标黄。
展示买一价与张数,深度不够或残档高亮提示。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -382,6 +382,15 @@ input.readonly {
|
|||||||
.pnl-up { color: var(--ok); font-weight: 600; }
|
.pnl-up { color: var(--ok); font-weight: 600; }
|
||||||
.pnl-down { color: var(--bad); font-weight: 600; }
|
.pnl-down { color: var(--bad); font-weight: 600; }
|
||||||
.pnl-flat { color: var(--muted); }
|
.pnl-flat { color: var(--muted); }
|
||||||
|
.liq-ok { color: var(--text); }
|
||||||
|
.liq-warn {
|
||||||
|
color: #fbbf24;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.liq-brief--warn {
|
||||||
|
border-left: 2px solid rgba(251, 191, 36, 0.7);
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 800px) {
|
@media (max-width: 800px) {
|
||||||
.desk,
|
.desk,
|
||||||
|
|||||||
+53
-1
@@ -39,6 +39,55 @@
|
|||||||
return "<ul class=\"pos-brief\">" + items.join("") + more + "</ul>";
|
return "<ul class=\"pos-brief\">" + items.join("") + more + "</ul>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fmtBidPx(v) {
|
||||||
|
if (v == null || v === "") return "—";
|
||||||
|
const n = Number(v);
|
||||||
|
if (!Number.isFinite(n)) return "—";
|
||||||
|
let s = n.toFixed(4).replace(/\.?0+$/, "");
|
||||||
|
return s || "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
function isLiquidityWeak(p) {
|
||||||
|
if (!p) return false;
|
||||||
|
if (p.liquidity_ok === false || p.bid_invalid) return true;
|
||||||
|
const uncovered = Number(p.uncovered_sheets);
|
||||||
|
return Number.isFinite(uncovered) && uncovered > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bidLiquidityLine(p) {
|
||||||
|
if (p.bid_invalid || (p.bid_px == null && (p.bid_sz == null || p.bid_sz === ""))) {
|
||||||
|
const reason = (p.bid_invalid_reason || "无买一/残档").toString();
|
||||||
|
const short = reason.length > 18 ? reason.slice(0, 18) + "…" : reason;
|
||||||
|
return { text: short, weak: true };
|
||||||
|
}
|
||||||
|
const px = fmtBidPx(p.bid_px);
|
||||||
|
const sz = p.bid_sz != null ? String(p.bid_sz) : "—";
|
||||||
|
const uncovered = Number(p.uncovered_sheets);
|
||||||
|
let text = px + " / " + sz + "张";
|
||||||
|
const weak = isLiquidityWeak(p);
|
||||||
|
if (Number.isFinite(uncovered) && uncovered > 0) {
|
||||||
|
text += "(差" + uncovered + ")";
|
||||||
|
}
|
||||||
|
return { text: text, weak: weak };
|
||||||
|
}
|
||||||
|
|
||||||
|
function bidLiquiditySummary(brief) {
|
||||||
|
const list = brief || [];
|
||||||
|
if (!list.length) return '<span class="muted">—</span>';
|
||||||
|
const items = list.slice(0, 8).map(function (p) {
|
||||||
|
const line = bidLiquidityLine(p);
|
||||||
|
const cls = line.weak ? "liq-warn" : "liq-ok";
|
||||||
|
return '<li class="' + cls + '">' + escapeHtml(line.text) + "</li>";
|
||||||
|
});
|
||||||
|
const more =
|
||||||
|
list.length > 8
|
||||||
|
? '<li class="muted">…共 ' + list.length + " 笔</li>"
|
||||||
|
: "";
|
||||||
|
const anyWeak = list.some(isLiquidityWeak);
|
||||||
|
const wrapCls = anyWeak ? "pos-brief liq-brief liq-brief--warn" : "pos-brief liq-brief";
|
||||||
|
return '<ul class="' + wrapCls + '">' + items.join("") + more + "</ul>";
|
||||||
|
}
|
||||||
|
|
||||||
function renderRow(row) {
|
function renderRow(row) {
|
||||||
const snap = row.snapshot || {};
|
const snap = row.snapshot || {};
|
||||||
const inst = snap.instance || {};
|
const inst = snap.instance || {};
|
||||||
@@ -73,6 +122,9 @@
|
|||||||
"<td>" +
|
"<td>" +
|
||||||
positionSummary(brief) +
|
positionSummary(brief) +
|
||||||
"</td>" +
|
"</td>" +
|
||||||
|
"<td>" +
|
||||||
|
bidLiquiditySummary(brief) +
|
||||||
|
"</td>" +
|
||||||
'<td class="muted">' +
|
'<td class="muted">' +
|
||||||
escapeHtml(row.pulled_at || "—") +
|
escapeHtml(row.pulled_at || "—") +
|
||||||
"</td>" +
|
"</td>" +
|
||||||
@@ -105,7 +157,7 @@
|
|||||||
grid.innerHTML =
|
grid.innerHTML =
|
||||||
'<div class="overview-table-wrap"><table class="overview-table">' +
|
'<div class="overview-table-wrap"><table class="overview-table">' +
|
||||||
"<thead><tr>" +
|
"<thead><tr>" +
|
||||||
"<th>名称</th><th>状态</th><th>模式</th><th>浮盈</th><th>持仓</th><th>拉取时间</th><th>操作</th>" +
|
"<th>名称</th><th>状态</th><th>模式</th><th>浮盈</th><th>持仓</th><th>买一/流动性</th><th>拉取时间</th><th>操作</th>" +
|
||||||
"</tr></thead><tbody>" +
|
"</tr></thead><tbody>" +
|
||||||
list.map(renderRow).join("") +
|
list.map(renderRow).join("") +
|
||||||
"</tbody></table></div>";
|
"</tbody></table></div>";
|
||||||
|
|||||||
Reference in New Issue
Block a user