@@ -706,11 +706,17 @@
|
||||
return null;
|
||||
}
|
||||
|
||||
function resolveTrendSizingFooter(mo, trendPlan, isTrend) {
|
||||
function resolveTrendSizingFooter(mo, trendPlan, isTrend, pos) {
|
||||
const m = mo || {};
|
||||
const p = pos || {};
|
||||
if (!isTrend || !trendPlan || !trendPlan.id) {
|
||||
return {
|
||||
margin: m.exchange_initial_margin ?? m.plan_margin ?? null,
|
||||
margin:
|
||||
m.exchange_initial_margin ??
|
||||
p.exchange_initial_margin ??
|
||||
m.plan_margin ??
|
||||
p.plan_margin ??
|
||||
null,
|
||||
leverage: m.leverage,
|
||||
planBase: m.margin_capital,
|
||||
positionRatio: m.position_ratio,
|
||||
@@ -788,15 +794,59 @@
|
||||
hubHoldDurationTimer = setInterval(tickHubHoldDurations, 1000);
|
||||
}
|
||||
|
||||
function formatLatestRiskMeta(mo, trendPlan) {
|
||||
function estimateLatestRiskUsdt(side, entry, sl, pos, mo) {
|
||||
const e = Number(entry);
|
||||
const s = Number(sl);
|
||||
if (!Number.isFinite(e) || !Number.isFinite(s) || e <= 0) return null;
|
||||
const sd = (side || "long").toLowerCase();
|
||||
const rf = sd === "short" ? (s - e) / e : (e - s) / e;
|
||||
if (!Number.isFinite(rf)) return null;
|
||||
if (rf <= 0) return 0;
|
||||
const m = mo || {};
|
||||
const p = pos || {};
|
||||
let notional = Number(p.notional_usdt);
|
||||
if (!Number.isFinite(notional) || notional <= 0) {
|
||||
notional = Number(m.exchange_notional);
|
||||
}
|
||||
if (!Number.isFinite(notional) || notional <= 0) {
|
||||
const mc = Number(m.margin_capital);
|
||||
const lev = Number(m.leverage);
|
||||
if (Number.isFinite(mc) && mc > 0 && Number.isFinite(lev) && lev > 0) {
|
||||
notional = mc * lev;
|
||||
}
|
||||
}
|
||||
if (!Number.isFinite(notional) || notional <= 0) {
|
||||
const c = Math.abs(Number(p.contracts));
|
||||
const cs = Number(p.contract_size);
|
||||
const mult = Number.isFinite(cs) && cs > 0 ? cs : 1;
|
||||
const px = Number(p.mark_price);
|
||||
const mark = Number.isFinite(px) && px > 0 ? px : e;
|
||||
if (Number.isFinite(c) && c > 0) notional = c * mult * mark;
|
||||
}
|
||||
if (!Number.isFinite(notional) || notional <= 0) return null;
|
||||
return Math.round(notional * rf * 100) / 100;
|
||||
}
|
||||
|
||||
function formatLatestRiskMeta(mo, trendPlan, pos, tpsl) {
|
||||
const m = mo || {};
|
||||
const t = trendPlan || {};
|
||||
const v =
|
||||
let v =
|
||||
m.latest_risk_amount != null && m.latest_risk_amount !== ""
|
||||
? Number(m.latest_risk_amount)
|
||||
: t.latest_risk_amount != null && t.latest_risk_amount !== ""
|
||||
? Number(t.latest_risk_amount)
|
||||
: null;
|
||||
: pos && pos.latest_risk_amount != null && pos.latest_risk_amount !== ""
|
||||
? Number(pos.latest_risk_amount)
|
||||
: t.latest_risk_amount != null && t.latest_risk_amount !== ""
|
||||
? Number(t.latest_risk_amount)
|
||||
: null;
|
||||
if ((v == null || !Number.isFinite(v)) && tpsl && pos) {
|
||||
v = estimateLatestRiskUsdt(
|
||||
pos.side || m.direction,
|
||||
tpsl.entry,
|
||||
tpsl.sl,
|
||||
pos,
|
||||
m
|
||||
);
|
||||
}
|
||||
if (v != null && Number.isFinite(v)) {
|
||||
return `最新风险: ${fmt(v, 2)}U`;
|
||||
}
|
||||
@@ -2837,7 +2887,7 @@
|
||||
const upnl = resolveTrendFloatingPnl(pos, trendPlan);
|
||||
const pnlFmt = formatFloatingPnlText(upnl, pos.notional_usdt);
|
||||
const pnlText = pnlFmt.text;
|
||||
const sizingFoot = resolveTrendSizingFooter(mo, trendPlan, isTrend);
|
||||
const sizingFoot = resolveTrendSizingFooter(mo, trendPlan, isTrend, pos);
|
||||
const openMeta = resolvePositionOpenMeta(mo, trendPlan, isTrend);
|
||||
const marginText =
|
||||
sizingFoot.margin != null && sizingFoot.margin !== "" && Number.isFinite(Number(sizingFoot.margin))
|
||||
@@ -2855,7 +2905,7 @@
|
||||
meta.push(monitorOrderSourceHtml(mo, trendPlan));
|
||||
const riskLine = formatMonitorRiskMeta(mo, trendPlan);
|
||||
if (riskLine) meta.push(riskLine);
|
||||
const latestRiskLine = formatLatestRiskMeta(mo, trendPlan);
|
||||
const latestRiskLine = formatLatestRiskMeta(mo, trendPlan, pos, tpsl);
|
||||
if (latestRiskLine) meta.push(latestRiskLine);
|
||||
if (trendPlan && trendPlan.id) {
|
||||
const zone =
|
||||
@@ -2875,7 +2925,7 @@
|
||||
else meta.push("风格: —");
|
||||
const riskLine = formatMonitorRiskMeta(mo, trendPlan);
|
||||
if (riskLine) meta.push(riskLine);
|
||||
const latestRiskLine = formatLatestRiskMeta(mo, trendPlan);
|
||||
const latestRiskLine = formatLatestRiskMeta(mo, trendPlan, pos, tpsl);
|
||||
if (latestRiskLine) meta.push(latestRiskLine);
|
||||
const beOn = mo.breakeven_enabled === 1 || mo.breakeven_enabled === true;
|
||||
meta.push(
|
||||
|
||||
Reference in New Issue
Block a user