Support LIVE exchange funds and perp margin mode.

Hide sim equity when LIVE is selected; OKX funds bar uses exchange balances; add cross/isolated for perp only (options stay cash).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-29 19:57:09 +08:00
parent 50a4540aaf
commit c6e8f6fe1e
12 changed files with 134 additions and 24 deletions
+15 -4
View File
@@ -37,6 +37,16 @@ class OkxLiveExecutor(Matcher):
self._trade = OkxTradeClient()
return self._trade
def _perp_margin_mode(self) -> str:
"""永续全仓/逐仓;期权始终 cash,不受此设置影响。"""
s = get_settings()
raw = str(
self.ledger.get_setting_str("perp_margin_mode", s.perp_margin_mode)
or s.perp_margin_mode
or "cross"
).strip().lower()
return "isolated" if raw == "isolated" else "cross"
def _guard_live(self) -> str | None:
ok, reason = live_ready()
if not ok:
@@ -145,9 +155,10 @@ class OkxLiveExecutor(Matcher):
else:
side, pos_side = "sell", "short"
leverage = self.ledger.get_setting_float("leverage", s.leverage)
mgn = self._perp_margin_mode()
try:
client.set_leverage(
perp_inst, leverage, mgn_mode="cross", pos_side=pos_side
perp_inst, leverage, mgn_mode=mgn, pos_side=pos_side
)
except Exception as e_lev:
logger.warning("okx set_leverage failed: %s", e_lev)
@@ -155,7 +166,7 @@ class OkxLiveExecutor(Matcher):
inst_id=perp_inst,
side=side,
sz=str(perp_sz),
td_mode="cross",
td_mode=mgn,
pos_side=pos_side,
)
except Exception as e:
@@ -642,7 +653,7 @@ class OkxLiveExecutor(Matcher):
inst_id=perp_inst,
side=side,
sz=str(perp_sz),
td_mode="cross",
td_mode=self._perp_margin_mode(),
pos_side=pos_side,
reduce_only=True,
)
@@ -927,7 +938,7 @@ class OkxLiveExecutor(Matcher):
inst_id=perp_inst,
side=side,
sz=str(perp_sz),
td_mode="cross",
td_mode=self._perp_margin_mode(),
pos_side=pos_side,
reduce_only=True,
)