@@ -1076,6 +1076,25 @@
|
||||
return "约 " + Number(v).toFixed(1) + "×";
|
||||
}
|
||||
|
||||
function calcPosLeverage(p) {
|
||||
const direct = Number(p && (p.contract_leverage != null ? p.contract_leverage : p.leverage));
|
||||
if (Number.isFinite(direct) && direct > 0) return direct;
|
||||
const idx = Number(p && p.idx_px);
|
||||
const amt = Number(p && p.eth_amount);
|
||||
const prem = Number(p && p.premium_paid);
|
||||
if (!Number.isFinite(idx) || !Number.isFinite(amt) || !Number.isFinite(prem) || amt <= 0 || prem <= 0) {
|
||||
return null;
|
||||
}
|
||||
if (isCoinPos(p)) {
|
||||
return Math.round((amt / prem) * 10) / 10;
|
||||
}
|
||||
return Math.round((idx * amt) / prem * 10) / 10;
|
||||
}
|
||||
|
||||
function fmtPosLeverage(p) {
|
||||
return fmtLeverage(calcPosLeverage(p));
|
||||
}
|
||||
|
||||
/** 链上展示:USDC=指数÷卖一(美元);币本位卖一为币报价 → 1÷卖一. */
|
||||
function calcAskLeverage(indexPx, askPx) {
|
||||
if (indexPx == null || askPx == null) return null;
|
||||
@@ -1691,6 +1710,7 @@
|
||||
'<span class="pos-meta-item">持仓来源: ' + sourceText(p) + "</span>" +
|
||||
'<span class="pos-meta-item">行权价: ' + fmt(p.strike, 0) + "</span>" +
|
||||
'<span class="pos-meta-item">张数: ' + fmt(p.pos, 0) + " · 币量 " + fmt(p.eth_amount, 4) + "</span>" +
|
||||
'<span class="pos-meta-item" title="名义价值÷权利金,测算用">杠杆倍数: ' + fmtPosLeverage(p) + "</span>" +
|
||||
(expAttr
|
||||
? '<span class="pos-meta-item">到期倒计时: <span class="opt-expiry-cd" data-opt-exp-ms="' + expAttr + '">—</span></span>'
|
||||
: "") +
|
||||
|
||||
@@ -88,6 +88,38 @@
|
||||
return "";
|
||||
}
|
||||
|
||||
function isCoinPos(p) {
|
||||
const mode = String((p && p.margin_mode) || "").toLowerCase();
|
||||
if (mode === "coin") return true;
|
||||
if (mode === "usdc") return false;
|
||||
const ccy = String((p && p.premium_ccy) || "").toUpperCase();
|
||||
if (ccy === "USDC") return false;
|
||||
if (ccy === "BTC" || ccy === "ETH") return true;
|
||||
const inst = String((p && p.inst_id) || "");
|
||||
return inst.indexOf("-USD-") >= 0 && inst.indexOf("_UM") < 0;
|
||||
}
|
||||
|
||||
function calcPosLeverage(p) {
|
||||
const direct = Number(p && (p.contract_leverage != null ? p.contract_leverage : p.leverage));
|
||||
if (Number.isFinite(direct) && direct > 0) return direct;
|
||||
const idx = Number(p && p.idx_px);
|
||||
const amt = Number(p && p.eth_amount);
|
||||
const prem = Number(p && p.premium_paid);
|
||||
if (!Number.isFinite(idx) || !Number.isFinite(amt) || !Number.isFinite(prem) || amt <= 0 || prem <= 0) {
|
||||
return null;
|
||||
}
|
||||
if (isCoinPos(p)) {
|
||||
return Math.round((amt / prem) * 10) / 10;
|
||||
}
|
||||
return Math.round((idx * amt) / prem * 10) / 10;
|
||||
}
|
||||
|
||||
function fmtPosLeverage(p) {
|
||||
const lev = calcPosLeverage(p);
|
||||
if (lev == null || Number.isNaN(Number(lev))) return "—";
|
||||
return "约 " + Number(lev).toFixed(1) + "×";
|
||||
}
|
||||
|
||||
function fmtPxSz(px, sz, tickSz) {
|
||||
if (px === null || px === undefined || Number.isNaN(Number(px))) return "—";
|
||||
let price = fmtOptionPx(px, tickSz);
|
||||
@@ -224,6 +256,7 @@
|
||||
'<span class="pos-meta-item">持仓来源: ' + sourceText(p) + "</span>" +
|
||||
'<span class="pos-meta-item">行权价: ' + fmt(p.strike, 0) + "</span>" +
|
||||
'<span class="pos-meta-item">张数: ' + fmt(p.pos, 0) + " · 币量 " + fmt(p.eth_amount, 4) + "</span>" +
|
||||
'<span class="pos-meta-item" title="名义价值÷权利金,测算用">杠杆倍数: ' + fmtPosLeverage(p) + "</span>" +
|
||||
(expAttr
|
||||
? '<span class="pos-meta-item">到期倒计时: ' + expiryCdHtml(expAttr) + "</span>"
|
||||
: "") +
|
||||
|
||||
Reference in New Issue
Block a user