币本位顶栏资金显示USDT+ETH,单笔期权本位改为下拉选择
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -103,9 +103,38 @@ def profit_loss_ratio_from_trades(trades: list[dict[str, Any]] | None) -> float
|
||||
def options_funding_label(
|
||||
funding_usdc: float | None,
|
||||
funding_usdt: float | None = None,
|
||||
funding_eth: float | None = None,
|
||||
margin_mode: str | None = None,
|
||||
underly: str = "ETH",
|
||||
) -> str:
|
||||
"""期权侧顶栏仅展示 USDC(USDT 归永续资金/交易账户).funding_usdt 参数保留兼容,忽略."""
|
||||
_ = funding_usdt
|
||||
"""期权侧顶栏文案.
|
||||
|
||||
USDC 模式:仅 USDC.
|
||||
币本位:USDT + 标的币(ETH/BTC).
|
||||
"""
|
||||
try:
|
||||
from lib.options.options_margin_mode_lib import normalize_options_margin_mode
|
||||
|
||||
mode = normalize_options_margin_mode(margin_mode)
|
||||
except Exception:
|
||||
mode = str(margin_mode or "usdc").strip().lower() or "usdc"
|
||||
if mode == "coin":
|
||||
parts: list[str] = []
|
||||
if funding_usdt is not None:
|
||||
try:
|
||||
parts.append(f"{float(funding_usdt):.2f} USDT")
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
coin = funding_eth
|
||||
ccy = (underly or "ETH").strip().upper() or "ETH"
|
||||
if coin is not None:
|
||||
try:
|
||||
n = float(coin)
|
||||
txt = f"{n:.6f}".rstrip("0").rstrip(".")
|
||||
parts.append(f"{txt or '0'} {ccy}")
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
return " / ".join(parts) if parts else "—"
|
||||
if funding_usdc is None:
|
||||
return "—"
|
||||
try:
|
||||
|
||||
@@ -1136,8 +1136,23 @@ function paintRealtimePnlFromSnapshot(data){
|
||||
}
|
||||
}
|
||||
|
||||
function formatOptionsFundingLabel(usdc, usdt) {
|
||||
// 期权侧顶栏仅 USDC;usdt 参数忽略(USDT 在永续资金/交易账户)
|
||||
function formatOptionsFundingLabel(usdc, usdt, eth, marginMode, underly) {
|
||||
const mode = String(marginMode || "usdc").toLowerCase();
|
||||
if (mode === "coin") {
|
||||
const parts = [];
|
||||
if (usdt !== null && usdt !== undefined && usdt !== "") {
|
||||
const n = Number(usdt);
|
||||
if (!Number.isNaN(n)) parts.push(`${n.toFixed(2)} USDT`);
|
||||
}
|
||||
if (eth !== null && eth !== undefined && eth !== "") {
|
||||
const n = Number(eth);
|
||||
if (!Number.isNaN(n)) {
|
||||
const txt = String(n.toFixed(6)).replace(/\.?0+$/, "");
|
||||
parts.push(`${txt || "0"} ${String(underly || "ETH").toUpperCase()}`);
|
||||
}
|
||||
}
|
||||
return parts.length ? parts.join(" / ") : "—";
|
||||
}
|
||||
if (usdc === null || usdc === undefined || usdc === "") return "—";
|
||||
const n = Number(usdc);
|
||||
if (Number.isNaN(n)) return "—";
|
||||
@@ -1187,12 +1202,24 @@ function applyAccountSnapshot(data){
|
||||
if(data.current_capital != null && data.current_capital !== "" && !Number.isNaN(Number(data.current_capital))){
|
||||
setFundsFieldText("current-capital", `${Number(data.current_capital).toFixed(2)}U`);
|
||||
}
|
||||
if(data.options_funding_usdc != null || data.options_funding_usdt != null){
|
||||
const optFunding = formatOptionsFundingLabel(data.options_funding_usdc, data.options_funding_usdt);
|
||||
if(data.options_funding_usdc != null || data.options_funding_usdt != null || data.options_funding_eth != null){
|
||||
const optFunding = formatOptionsFundingLabel(
|
||||
data.options_funding_usdc,
|
||||
data.options_funding_usdt,
|
||||
data.options_funding_eth,
|
||||
data.options_margin_mode,
|
||||
data.options_underly
|
||||
);
|
||||
setFundsFieldText("options-funding-usdc", optFunding);
|
||||
}
|
||||
if(data.options_trading_usdc != null || data.options_trading_usdt != null){
|
||||
const optTrading = formatOptionsFundingLabel(data.options_trading_usdc, data.options_trading_usdt);
|
||||
if(data.options_trading_usdc != null || data.options_trading_usdt != null || data.options_trading_eth != null){
|
||||
const optTrading = formatOptionsFundingLabel(
|
||||
data.options_trading_usdc,
|
||||
data.options_trading_usdt,
|
||||
data.options_trading_eth,
|
||||
data.options_margin_mode,
|
||||
data.options_underly
|
||||
);
|
||||
setFundsFieldText("options-trading-usdc", optTrading);
|
||||
}
|
||||
if(typeof data.unrealized_pnl !== "undefined"){
|
||||
|
||||
@@ -1617,8 +1617,23 @@ function paintRealtimePnlFromSnapshot(data){
|
||||
}
|
||||
}
|
||||
|
||||
function formatOptionsFundingLabel(usdc, usdt) {
|
||||
// 期权侧顶栏仅 USDC;usdt 参数忽略(USDT 在永续资金/交易账户)
|
||||
function formatOptionsFundingLabel(usdc, usdt, eth, marginMode, underly) {
|
||||
const mode = String(marginMode || "usdc").toLowerCase();
|
||||
if (mode === "coin") {
|
||||
const parts = [];
|
||||
if (usdt != null && usdt !== "") {
|
||||
const n = Number(usdt);
|
||||
if (!Number.isNaN(n)) parts.push(`${n.toFixed(2)} USDT`);
|
||||
}
|
||||
if (eth != null && eth !== "") {
|
||||
const n = Number(eth);
|
||||
if (!Number.isNaN(n)) {
|
||||
const txt = String(n.toFixed(6)).replace(/\.?0+$/, "");
|
||||
parts.push(`${txt || "0"} ${String(underly || "ETH").toUpperCase()}`);
|
||||
}
|
||||
}
|
||||
return parts.length ? parts.join(" / ") : "—";
|
||||
}
|
||||
if(usdc == null || usdc === "") return "—";
|
||||
const n = Number(usdc);
|
||||
if(Number.isNaN(n)) return "—";
|
||||
@@ -1668,12 +1683,24 @@ function applyAccountSnapshot(data){
|
||||
if(data.current_capital != null && data.current_capital !== "" && !Number.isNaN(Number(data.current_capital))){
|
||||
setFundsFieldText("current-capital", `${Number(data.current_capital).toFixed(2)}U`);
|
||||
}
|
||||
if(data.options_funding_usdc != null || data.options_funding_usdt != null){
|
||||
const optFunding = formatOptionsFundingLabel(data.options_funding_usdc, data.options_funding_usdt);
|
||||
if(data.options_funding_usdc != null || data.options_funding_usdt != null || data.options_funding_eth != null){
|
||||
const optFunding = formatOptionsFundingLabel(
|
||||
data.options_funding_usdc,
|
||||
data.options_funding_usdt,
|
||||
data.options_funding_eth,
|
||||
data.options_margin_mode,
|
||||
data.options_underly
|
||||
);
|
||||
setFundsFieldText("options-funding-usdc", optFunding);
|
||||
}
|
||||
if(data.options_trading_usdc != null || data.options_trading_usdt != null){
|
||||
const optTrading = formatOptionsFundingLabel(data.options_trading_usdc, data.options_trading_usdt);
|
||||
if(data.options_trading_usdc != null || data.options_trading_usdt != null || data.options_trading_eth != null){
|
||||
const optTrading = formatOptionsFundingLabel(
|
||||
data.options_trading_usdc,
|
||||
data.options_trading_usdt,
|
||||
data.options_trading_eth,
|
||||
data.options_margin_mode,
|
||||
data.options_underly
|
||||
);
|
||||
setFundsFieldText("options-trading-usdc", optTrading);
|
||||
}
|
||||
if(typeof data.unrealized_pnl !== "undefined"){
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
{% if options_enabled %}
|
||||
<div class="stat-strip-item">
|
||||
<div class="label">期权资金账户</div>
|
||||
<div class="value" id="options-funding-usdc" data-funds-field="options-funding-usdc">{{ options_funding_label(options_funding_usdc) }}</div>
|
||||
<div class="value" id="options-funding-usdc" data-funds-field="options-funding-usdc">{{ options_funding_label(options_funding_usdc, options_funding_usdt, options_funding_eth, options_margin_mode, options_underly|default('ETH')) }}</div>
|
||||
</div>
|
||||
<div class="stat-strip-item">
|
||||
<div class="label">期权交易账户</div>
|
||||
<div class="value" id="options-trading-usdc" data-funds-field="options-trading-usdc">{{ options_funding_label(options_trading_usdc) }}</div>
|
||||
<div class="value" id="options-trading-usdc" data-funds-field="options-trading-usdc">{{ options_funding_label(options_trading_usdc, options_trading_usdt, options_trading_eth, options_margin_mode, options_underly|default('ETH')) }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="stat-strip-item stat-strip-item--pnl">
|
||||
|
||||
Reference in New Issue
Block a user