Add 期期 close mode (全平/到期平) with scheme-C env toggle.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-19 08:06:27 +08:00
parent b3548240cc
commit 3119486105
13 changed files with 272 additions and 15 deletions
+34
View File
@@ -29,6 +29,8 @@
legB: null,
market: null,
ooSheetsMode: "same_sheets",
ooCloseModeEnabled: root.getAttribute("data-oo-close-mode-enabled") !== "0",
ooCloseMode: "close_all",
tradingUsdc: null,
tradeBudgetUsdc: null,
budgetBuffer: 0.95,
@@ -295,6 +297,19 @@
});
}
function syncOoCloseModeUI() {
const enabled = !!state.ooCloseModeEnabled;
const row = $("hp-oo-close-mode-row");
const hint = $("hp-oo-close-mode-hint");
if (row) row.classList.toggle("hidden", !enabled);
if (hint) hint.classList.toggle("hidden", !enabled);
if (!enabled) state.ooCloseMode = "hold_expiry";
document.querySelectorAll(".hp-oo-close-mode").forEach(function (b) {
const on = b.getAttribute("data-oo-close") === state.ooCloseMode;
b.classList.toggle("active", on);
});
}
function updateOoBudgetLine(extra) {
const line = $("hp-oo-budget-line");
if (!line) return;
@@ -331,6 +346,15 @@
async function loadGates() {
try {
const d = await apiJson("/api/hedge-plan/gates?plan_type=" + encodeURIComponent(state.mode));
if (d.oo_close_mode_enabled != null) {
state.ooCloseModeEnabled = !!d.oo_close_mode_enabled;
}
if (!state.ooCloseModeEnabled) {
state.ooCloseMode = "hold_expiry";
} else if (d.oo_close_mode_default && !state._ooCloseModeTouched) {
state.ooCloseMode = d.oo_close_mode_default === "hold_expiry" ? "hold_expiry" : "close_all";
}
syncOoCloseModeUI();
setGateLine(d);
} catch (e) {
setGateLine({ can_preview: false, can_start: false, reasons: [e.message], is_full_margin: false });
@@ -953,6 +977,14 @@
autoFillOoSheets();
});
});
document.querySelectorAll(".hp-oo-close-mode").forEach(function (b) {
b.addEventListener("click", function () {
if (!state.ooCloseModeEnabled) return;
state.ooCloseMode = b.getAttribute("data-oo-close") || "close_all";
state._ooCloseModeTouched = true;
syncOoCloseModeUI();
});
});
if ($("hp-preview-btn"))
$("hp-preview-btn").addEventListener("click", function () {
state.mode = "perp_options";
@@ -1346,6 +1378,7 @@
target_price_up: up,
target_price_down: down,
target_price: up,
oo_close_mode: state.ooCloseModeEnabled ? state.ooCloseMode : "hold_expiry",
leg_a: legPayload(state.legA, ooSheets("hp-oo-sheets-a")),
leg_b: legPayload(state.legB, ooSheets("hp-oo-sheets-b")),
};
@@ -1410,6 +1443,7 @@
syncUnderlyingUI();
syncMoneyUI();
syncOoSizeModeUI();
syncOoCloseModeUI();
updateOoBudgetLine(null);
bind();
void refreshAll();
+6 -1
View File
@@ -3265,11 +3265,16 @@ html[data-theme="light"] .opt-be-dist-down {
gap: 8px;
margin: 6px 0 2px;
}
.hedge-plan-page-wrap .hp-oo-size-mode.active {
.hedge-plan-page-wrap .hp-oo-size-mode.active,
.hedge-plan-page-wrap .hp-oo-close-mode.active {
border-color: var(--accent, #00d4ff);
color: var(--text, #fff);
background: rgba(0, 212, 255, 0.12);
}
.hedge-plan-page-wrap #hp-oo-close-mode-row.hidden,
.hedge-plan-page-wrap #hp-oo-close-mode-hint.hidden {
display: none !important;
}
.hedge-plan-page-wrap #hp-oo-budget-line.hp-oo-budget-warn {
color: #ff8a8a;
}