fix: show expiry-filter sample stats so ops map filter effect is visible
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Vendored
+17
-1
@@ -712,7 +712,23 @@
|
||||
});
|
||||
const lev = d.leverage || {};
|
||||
document.getElementById("opsRange").textContent = (lev.start_ymd || "—") + " → " + (lev.end_ymd || "—");
|
||||
document.getElementById("opsSamples").textContent = "杠杆样本 " + (lev.sample_count ?? 0);
|
||||
const filt = d.expiry_filter || lev.expiry_filter || {};
|
||||
const rawN = filt.raw_sample_count;
|
||||
const keptN = filt.filtered_sample_count != null ? filt.filtered_sample_count : (lev.sample_count ?? 0);
|
||||
let sampleHint = "杠杆样本 " + keptN;
|
||||
if (rawN != null) {
|
||||
const hMin = filt.raw_hours_min;
|
||||
const hMax = filt.raw_hours_max;
|
||||
const span = (hMin != null && hMax != null)
|
||||
? (" · 样本距到期约 " + Math.floor(hMin) + "–" + Math.ceil(hMax) + "h")
|
||||
: "";
|
||||
if (rawN === keptN) {
|
||||
sampleHint = "杠杆样本 " + keptN + "(≥" + (state.minHours || 12) + "h 未减少)" + span;
|
||||
} else {
|
||||
sampleHint = "杠杆样本 " + keptN + "/" + rawN + "(≥" + (state.minHours || 12) + "h)" + span;
|
||||
}
|
||||
}
|
||||
document.getElementById("opsSamples").textContent = sampleHint;
|
||||
document.getElementById("opsMin").textContent = lev.min_leverage ?? "—";
|
||||
const titleMap = { day: "日", week: "近7日", month: "近30日" };
|
||||
document.getElementById("chartTitle").textContent = "上图 · 时段杠杆均值(" + (titleMap[state.range]||"") + ")";
|
||||
|
||||
@@ -229,9 +229,21 @@ export type MovePointsStats = {
|
||||
buckets: MoveBucket[];
|
||||
};
|
||||
|
||||
export type ExpiryFilterMeta = {
|
||||
min_hours_filter: number;
|
||||
raw_sample_count: number;
|
||||
filtered_sample_count: number;
|
||||
raw_hours_min: number | null;
|
||||
raw_hours_max: number | null;
|
||||
filtered_hours_min?: number | null;
|
||||
filtered_hours_max?: number | null;
|
||||
};
|
||||
|
||||
export type OpsMap = {
|
||||
leverage: LeverageStats;
|
||||
move_points: MovePointsStats;
|
||||
min_hours?: number;
|
||||
expiry_filter?: ExpiryFilterMeta;
|
||||
};
|
||||
|
||||
export async function fetchHealth(): Promise<Health> {
|
||||
|
||||
@@ -88,8 +88,25 @@ export default function OpsMapPage() {
|
||||
|
||||
const lev: LeverageStats | undefined = data?.leverage;
|
||||
const mov: MovePointsStats | undefined = data?.move_points;
|
||||
const filt = data?.expiry_filter;
|
||||
const rangeLabel = range === "day" ? "日" : range === "week" ? "近7日" : "近30日";
|
||||
|
||||
const sampleHint = (() => {
|
||||
if (!filt) return `杠杆样本 ${lev?.sample_count ?? 0}`;
|
||||
const raw = filt.raw_sample_count;
|
||||
const kept = filt.filtered_sample_count;
|
||||
const hMin = filt.raw_hours_min;
|
||||
const hMax = filt.raw_hours_max;
|
||||
const span =
|
||||
hMin != null && hMax != null
|
||||
? ` · 样本距到期约 ${Math.floor(hMin)}–${Math.ceil(hMax)}h`
|
||||
: "";
|
||||
if (raw === kept) {
|
||||
return `杠杆样本 ${kept}(≥${minHours}h 未减少)${span}`;
|
||||
}
|
||||
return `杠杆样本 ${kept}/${raw}(≥${minHours}h)${span}`;
|
||||
})();
|
||||
|
||||
return (
|
||||
<div className="layout">
|
||||
<div className="brand">比特骆驼行情采集分析</div>
|
||||
@@ -152,7 +169,7 @@ export default function OpsMapPage() {
|
||||
<div className="value" style={{ fontSize: "1.1rem" }}>
|
||||
{lev.start_ymd} → {lev.end_ymd}
|
||||
</div>
|
||||
<div className="hint">杠杆样本 {lev.sample_count}</div>
|
||||
<div className="hint">{sampleHint}</div>
|
||||
</div>
|
||||
<div className="tile">
|
||||
<div className="label">达标线</div>
|
||||
|
||||
Reference in New Issue
Block a user