Add risk leverage basis option: actual ask vs selection leverage.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user