Gate option closes behind 2x recycle sustained for 2 minutes.
Require bid-side recoverable premium at least 2x cost continuously before target auto-close or depth close can fire. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -374,7 +374,7 @@
|
||||
|
||||
/** 买盘深度:价格/流动性;仅展示平仓所需档位(买一不够才出买二…). */
|
||||
function fmtCloseLevels(preview, tickSz) {
|
||||
if (preview && (preview.auto_close_blocked || preview.bid_invalid)) {
|
||||
if (preview && preview.bid_invalid) {
|
||||
return "暂无有效买盘";
|
||||
}
|
||||
const levels = ((preview && preview.levels) || []).slice(0, 5);
|
||||
@@ -392,6 +392,18 @@
|
||||
}).join(" · ");
|
||||
}
|
||||
|
||||
function closeGateHint(preview) {
|
||||
if (!preview) return "";
|
||||
if (preview.bid_invalid) {
|
||||
return preview.bid_invalid_reason || "当前买一无效,禁止按买盘自动平仓";
|
||||
}
|
||||
const gate = preview.close_gate || {};
|
||||
if (preview.close_gate_blocked || gate.ready === false) {
|
||||
return preview.close_gate_msg || gate.msg || "可回收需≥2×权利金并持续2分钟后才可平仓";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function netPnlFromPos(p) {
|
||||
const preview = (p && p.close_preview) || {};
|
||||
if (preview.estimated_pnl != null && !Number.isNaN(Number(preview.estimated_pnl))) {
|
||||
@@ -888,18 +900,19 @@
|
||||
'<div class="pos-cell"><span class="pos-label">到期平衡</span><span class="pos-value">' + fmt(p.expiry_be_px, 0) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">平掉回本</span><span class="pos-value">' + fmt(p.close_be_px, 0) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">净盈亏</span><span class="pos-value ' + uplCls + '">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid || net == null ? "—" : fmt(net, 2)) + "</span></div>" +
|
||||
(closePreview.bid_invalid || net == null ? "—" : fmt(net, 2)) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">收益率</span><span class="pos-value ' + uplCls + '">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid || roi == null ? "—" : fmt(roi, 2) + "%") + "</span></div>" +
|
||||
(closePreview.bid_invalid || roi == null ? "—" : fmt(roi, 2) + "%") + "</span></div>" +
|
||||
'<div class="pos-cell opt-pos-cell--depth"><span class="pos-label">买盘深度</span><span class="pos-value opt-bid-plain">' + fmtCloseLevels(closePreview, tickSz) + "</span></div>" +
|
||||
'<div class="pos-cell opt-pos-cell--close"><span class="pos-label">按买盘回收</span><span class="pos-value">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid
|
||||
? '<span class="muted">禁用以残档自动平</span>'
|
||||
(closePreview.bid_invalid
|
||||
? '<span class="muted">暂无有效买盘</span>'
|
||||
: fmtClosePreview(closePreview, p.premium_paid)) + "</span></div>" +
|
||||
"</div>" +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid
|
||||
? '<div class="muted opt-bid-invalid-hint">' + (closePreview.bid_invalid_reason || "当前买一无效,禁止按买盘自动平仓") + "</div>"
|
||||
: "") +
|
||||
(function () {
|
||||
const hint = closeGateHint(closePreview);
|
||||
return hint ? '<div class="muted opt-bid-invalid-hint">' + hint + "</div>" : "";
|
||||
})() +
|
||||
renderTargetDelegateRow(p)
|
||||
);
|
||||
}
|
||||
@@ -1193,10 +1206,18 @@
|
||||
return;
|
||||
}
|
||||
const preview = q.close_preview || {};
|
||||
if (preview.auto_close_blocked || preview.bid_invalid) {
|
||||
if (preview.bid_invalid) {
|
||||
alert(preview.bid_invalid_reason || "当前买一为无效残档,禁止按买盘自动平仓。请到 OKX App 自行挂限价/市价。");
|
||||
return;
|
||||
}
|
||||
if (preview.close_gate_blocked || (preview.close_gate && preview.close_gate.ready === false)) {
|
||||
alert(
|
||||
preview.close_gate_msg ||
|
||||
(preview.close_gate && preview.close_gate.msg) ||
|
||||
"可回收需≥2×权利金,并持续满2分钟后才可平仓"
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!preview.covered_sheets || preview.covered_sheets <= 0) {
|
||||
alert("暂无可用买盘深度,请稍后在 OKX App 平仓或等盘口恢复");
|
||||
return;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
/** 买盘深度:价格/流动性;仅展示平仓所需档位(买一不够才出买二…). */
|
||||
function fmtCloseLevels(preview, tickSz) {
|
||||
if (preview && (preview.auto_close_blocked || preview.bid_invalid)) {
|
||||
if (preview && preview.bid_invalid) {
|
||||
return "暂无有效买盘";
|
||||
}
|
||||
const levels = ((preview && preview.levels) || []).slice(0, 5);
|
||||
@@ -64,6 +64,18 @@
|
||||
}).join(" · ");
|
||||
}
|
||||
|
||||
function closeGateHint(preview) {
|
||||
if (!preview) return "";
|
||||
if (preview.bid_invalid) {
|
||||
return preview.bid_invalid_reason || "当前买一无效,禁止按买盘自动平仓";
|
||||
}
|
||||
const gate = preview.close_gate || {};
|
||||
if (preview.close_gate_blocked || gate.ready === false) {
|
||||
return preview.close_gate_msg || gate.msg || "可回收需≥2×权利金并持续2分钟后才可平仓";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function netPnlFromPos(p) {
|
||||
const preview = (p && p.close_preview) || {};
|
||||
if (preview.estimated_pnl != null && !Number.isNaN(Number(preview.estimated_pnl))) {
|
||||
@@ -150,18 +162,19 @@
|
||||
'<div class="pos-cell"><span class="pos-label">到期平衡</span><span class="pos-value">' + fmt(p.expiry_be_px, 0) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">平掉回本</span><span class="pos-value">' + fmt(p.close_be_px, 0) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">净盈亏</span><span class="pos-value ' + uplCls + '">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid || net == null ? "—" : fmt(net, 2)) + "</span></div>" +
|
||||
(closePreview.bid_invalid || net == null ? "—" : fmt(net, 2)) + "</span></div>" +
|
||||
'<div class="pos-cell"><span class="pos-label">收益率</span><span class="pos-value ' + uplCls + '">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid || roi == null ? "—" : fmt(roi, 2) + "%") + "</span></div>" +
|
||||
(closePreview.bid_invalid || roi == null ? "—" : fmt(roi, 2) + "%") + "</span></div>" +
|
||||
'<div class="pos-cell opt-pos-cell--depth"><span class="pos-label">买盘深度</span><span class="pos-value opt-bid-plain">' + fmtCloseLevels(closePreview, tickSz) + "</span></div>" +
|
||||
'<div class="pos-cell opt-pos-cell--close"><span class="pos-label">按买盘回收</span><span class="pos-value">' +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid
|
||||
? '<span class="muted">禁用以残档自动平</span>'
|
||||
(closePreview.bid_invalid
|
||||
? '<span class="muted">暂无有效买盘</span>'
|
||||
: fmtClosePreview(closePreview, p.premium_paid, hub)) + "</span></div>" +
|
||||
"</div>" +
|
||||
(closePreview.auto_close_blocked || closePreview.bid_invalid
|
||||
? '<div class="muted opt-bid-invalid-hint">' + (closePreview.bid_invalid_reason || "当前买一无效,禁止按买盘自动平仓") + "</div>"
|
||||
: "") +
|
||||
(function () {
|
||||
const hint = closeGateHint(closePreview);
|
||||
return hint ? '<div class="muted opt-bid-invalid-hint">' + hint + "</div>" : "";
|
||||
})() +
|
||||
(p.target_index != null
|
||||
? (function () {
|
||||
const eth = p.eth_amount != null ? Number(p.eth_amount)
|
||||
|
||||
Reference in New Issue
Block a user