Add Binance live trading, anti-stuck open/close recovery, and configurable rate limits.
OKX/Binance LIVE share half_open and option_closed_perp_pending repair paths; private REST throttles default to 1s and are tunable in settings. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -203,6 +203,7 @@ export type StrategySettings = {
|
||||
net_profit_target: number;
|
||||
premium_exit_multiple: number;
|
||||
rest_seconds: number;
|
||||
live_order_interval_sec?: number;
|
||||
skip_weekends: boolean;
|
||||
initial_equity: number;
|
||||
leverage: number;
|
||||
|
||||
@@ -28,6 +28,7 @@ export default function SettingsPage() {
|
||||
const [netTarget, setNetTarget] = useState(15);
|
||||
const [premMult, setPremMult] = useState(1);
|
||||
const [rest, setRest] = useState(300);
|
||||
const [orderInterval, setOrderInterval] = useState(1);
|
||||
const [skipWeekends, setSkipWeekends] = useState(true);
|
||||
const [leverage, setLeverage] = useState(3);
|
||||
const [minHours, setMinHours] = useState(12);
|
||||
@@ -67,6 +68,7 @@ export default function SettingsPage() {
|
||||
setNetTarget(s.net_profit_target ?? 15);
|
||||
setPremMult(s.premium_exit_multiple ?? 1);
|
||||
setRest(s.rest_seconds);
|
||||
setOrderInterval(s.live_order_interval_sec ?? 1);
|
||||
setSkipWeekends(s.skip_weekends !== false);
|
||||
setLeverage(s.leverage ?? 3);
|
||||
setMinHours(s.min_option_hours ?? 12);
|
||||
@@ -127,6 +129,7 @@ export default function SettingsPage() {
|
||||
net_profit_target: netTarget,
|
||||
premium_exit_multiple: premMult,
|
||||
rest_seconds: rest,
|
||||
live_order_interval_sec: orderInterval,
|
||||
skip_weekends: skipWeekends,
|
||||
leverage,
|
||||
min_option_hours: minHours,
|
||||
@@ -446,6 +449,23 @@ export default function SettingsPage() {
|
||||
onChange={(e) => setRest(Number(e.target.value))}
|
||||
/>
|
||||
</div>
|
||||
<div className="field">
|
||||
<label htmlFor="orderInterval">实盘下单最小间隔(秒)</label>
|
||||
<input
|
||||
id="orderInterval"
|
||||
className="mono"
|
||||
type="number"
|
||||
step="0.1"
|
||||
min="0.2"
|
||||
max="30"
|
||||
value={orderInterval}
|
||||
onChange={(e) => setOrderInterval(Number(e.target.value))}
|
||||
/>
|
||||
<p className="settings-hint">
|
||||
LIVE 私有下单/查单间隔,默认 1s(非高频建议 ≥1)。范围
|
||||
0.2–30。保存后立即生效。
|
||||
</p>
|
||||
</div>
|
||||
<div className="field">
|
||||
<label htmlFor="skipWe">周六日跳过开仓(上海时区)</label>
|
||||
<select
|
||||
@@ -484,8 +504,8 @@ export default function SettingsPage() {
|
||||
{tab === "runtime" ? (
|
||||
<div className="card settings-card">
|
||||
<p className="settings-lead">
|
||||
SIM = 本地撮合;LIVE = 交易所真下单(当前 OKX 已接,币安仅存密钥)。密钥只写入服务器{" "}
|
||||
<span className="mono">.env</span>,接口不回传明文。
|
||||
SIM = 本地撮合;LIVE = 当前所选交易所真下单(OKX / 币安均已接入)。密钥只写入服务器{" "}
|
||||
<span className="mono">.env</span>,接口不回传明文。OKX 期权常需账户有 USDC;币安多为 USDT。
|
||||
</p>
|
||||
{runtimeOk ? <div className="settings-ok">{runtimeOk}</div> : null}
|
||||
{err && tab === "runtime" ? <div className="err">{err}</div> : null}
|
||||
@@ -574,7 +594,7 @@ export default function SettingsPage() {
|
||||
</section>
|
||||
|
||||
<section className="settings-section">
|
||||
<h3>币安 API(仅落盘)</h3>
|
||||
<h3>币安 API</h3>
|
||||
<div className="settings-fields">
|
||||
<div className="field">
|
||||
<label htmlFor="bnKey">API Key</label>
|
||||
@@ -608,7 +628,10 @@ export default function SettingsPage() {
|
||||
onChange={(e) => setBnSecret(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
<p className="settings-hint">留空保存=不覆盖已有密钥。币安真下单后续接入。</p>
|
||||
<p className="settings-hint">
|
||||
留空保存=不覆盖已有密钥。交易所选币安且 LIVE 时用此密钥真下单(无
|
||||
Passphrase)。
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user