Add risk leverage basis option: actual ask vs selection leverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-01 17:01:18 +08:00
parent f1da2778ef
commit 9c515644a3
7 changed files with 201 additions and 7 deletions
+1
View File
@@ -331,6 +331,7 @@ export type StrategySettings = {
option_qty_eth?: number;
show_manual_trade_buttons?: boolean;
sizing_mode?: "manual" | "risk_based";
risk_leverage_basis?: "actual" | "selection";
risk_loss_mode?: "percent" | "absolute";
risk_loss_pct?: number;
risk_loss_usdt?: number;
+39 -1
View File
@@ -89,6 +89,9 @@ export default function SettingsPage() {
const [optQty, setOptQty] = useState(2);
const [showManualTrade, setShowManualTrade] = useState(false);
const [sizingMode, setSizingMode] = useState<"manual" | "risk_based">("manual");
const [riskLeverageBasis, setRiskLeverageBasis] = useState<
"actual" | "selection"
>("selection");
const [riskLossMode, setRiskLossMode] = useState<"percent" | "absolute">(
"percent",
);
@@ -197,6 +200,9 @@ export default function SettingsPage() {
setOptQty(s.option_qty_eth ?? 2);
setShowManualTrade(s.show_manual_trade_buttons === true);
setSizingMode(s.sizing_mode === "risk_based" ? "risk_based" : "manual");
setRiskLeverageBasis(
s.risk_leverage_basis === "actual" ? "actual" : "selection",
);
setRiskLossMode(s.risk_loss_mode === "absolute" ? "absolute" : "percent");
setRiskLossPct(s.risk_loss_pct ?? 1);
setRiskLossUsdt(s.risk_loss_usdt ?? 15);
@@ -358,6 +364,7 @@ export default function SettingsPage() {
close_bid_mark_max_pct: closeDevPct,
show_manual_trade_buttons: showManualTrade,
sizing_mode: sizingMode,
risk_leverage_basis: riskLeverageBasis,
risk_loss_mode: riskLossMode,
risk_loss_pct: riskLossPct,
risk_loss_usdt: riskLossUsdt,
@@ -679,6 +686,30 @@ export default function SettingsPage() {
</div>
{sizingMode === "risk_based" ? (
<>
<div className="field">
<label htmlFor="riskLevBasis"></label>
<select
id="riskLevBasis"
className="mono"
value={riskLeverageBasis}
onChange={(e) =>
setRiskLeverageBasis(
e.target.value === "actual"
? "actual"
: "selection",
)
}
>
<option value="selection">
</option>
<option value="actual"></option>
</select>
<p className="hint" style={{ margin: "0.35rem 0 0" }}>
÷ k便
便 k
</p>
</div>
<div className="field">
<label htmlFor="riskLossMode"></label>
<select
@@ -794,7 +825,14 @@ export default function SettingsPage() {
? bud.toFixed(2)
: "—";
const mxS = Number.isFinite(mx) ? mx.toFixed(2) : "—";
return `k=${pk ?? "—"} · 预算=${budS}U · 估亏=${mxS}U · 永续=${perp ?? "—"} · 期权=${opt ?? "—"} · 出场=${exit ?? "—"}`;
const basis =
riskPreview.leverage_basis === "actual"
? "实际杠杆"
: riskPreview.leverage_basis === "selection"
? "选约杠杆"
: "";
const basisS = basis ? ` · ${basis}` : "";
return `k=${pk ?? "—"} · 预算=${budS}U · 估亏=${mxS}U · 永续=${perp ?? "—"} · 期权=${opt ?? "—"} · 出场=${exit ?? "—"}${basisS}`;
})()}
</div>
</div>