Hide manual trade by default, block open while running, auto-refresh auth token.

Also fix flat-side reconcile to check both long and short residuals; document in 更新说明.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-26 22:43:38 +08:00
parent 0cf3756b09
commit 16efa44ffb
13 changed files with 304 additions and 38 deletions
+28 -5
View File
@@ -73,6 +73,7 @@ export default function SettingsPage() {
const [closeDevPct, setCloseDevPct] = useState(30);
const [perpQty, setPerpQty] = useState(1);
const [optQty, setOptQty] = useState(2);
const [showManualTrade, setShowManualTrade] = useState(false);
const [initialEquity, setInitialEquity] = useState(10000);
const [exchange, setExchange] = useState<"okx" | "binance">("okx");
const [stratOk, setStratOk] = useState("");
@@ -113,6 +114,7 @@ export default function SettingsPage() {
setCloseDevPct(s.close_bid_mark_max_pct ?? 30);
setPerpQty(s.perp_qty_eth ?? 1);
setOptQty(s.option_qty_eth ?? 2);
setShowManualTrade(s.show_manual_trade_buttons === true);
setInitialEquity(s.initial_equity ?? 10000);
setExchange(s.exchange === "binance" ? "binance" : "okx");
})
@@ -139,7 +141,7 @@ export default function SettingsPage() {
new_username: newUsername.trim(),
new_password: newPassword,
});
setSession(res.token, res.username);
setSession(res.token, res.username, res.expires_in);
setCurrentPassword("");
setNewPassword("");
setConfirmPassword("");
@@ -173,6 +175,7 @@ export default function SettingsPage() {
close_bid_mark_max_pct: closeDevPct,
perp_qty_eth: perpQty,
option_qty_eth: optQty,
show_manual_trade_buttons: showManualTrade,
exchange,
};
// LIVE 不改模拟资金,避免误重置本地账本
@@ -564,6 +567,20 @@ export default function SettingsPage() {
onChange={(e) => setFee(Number(e.target.value))}
/>
</div>
<div className="field">
<label htmlFor="showManual"></label>
<select
id="showManual"
className="mono"
value={showManualTrade ? "1" : "0"}
onChange={(e) =>
setShowManualTrade(e.target.value === "1")
}
>
<option value="0"></option>
<option value="1"> / </option>
</select>
</div>
</div>
</section>
) : null}
@@ -607,10 +624,16 @@ export default function SettingsPage() {
</li>
) : null}
{stratSub === "pace" ? (
<li>
LIVE / 1s
0.230
</li>
<>
<li>
LIVE / 1s
0.230
</li>
<li>
/
</li>
</>
) : null}
</ul>
</RulesFold>