永期手动下单:修币本位杠杆显示,张数定仓与双出场模式.

右侧以张数+比例算永续,杠杆取 env(BTC10/ETH5);开仓买币+5%滑点;出场可选盈利金额(扣双边费)或目标位;平仓后卖光币回 U.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-14 15:43:44 +08:00
parent e474c89c35
commit d68e9c3946
8 changed files with 392 additions and 63 deletions
@@ -350,18 +350,19 @@ def validate_option_primary_watch(body: dict[str, Any]) -> Optional[str]:
def validate_option_primary_start(body: dict[str, Any]) -> Optional[str]:
market = body.get("market_order") in (True, 1, "1", "true", "yes", "on")
exit_mode = str(body.get("exit_mode") or ("target" if not market else "profit")).strip().lower()
if exit_mode not in ("profit", "target"):
exit_mode = "profit" if market else "target"
need = (
"direction",
"contracts",
"opt_inst_id",
"sheets",
"exchange_symbol",
"option_target_points",
"perp_target_points",
"option_perp_ratio",
)
if not market:
need = need + ("premium_budget",)
need = need + ("premium_budget", "option_target_points", "perp_target_points")
for k in need:
if body.get(k) in (None, ""):
return f"缺少字段: {k}"
@@ -371,8 +372,13 @@ def validate_option_primary_start(body: dict[str, Any]) -> Optional[str]:
prem = _sf(body.get("premium_budget"))
if not market and (prem is None or prem <= 0):
return "权利金须大于 0"
if float(body["option_target_points"]) <= 0 or float(body["perp_target_points"]) <= 0:
return "目标位点数须大于 0"
if exit_mode == "profit":
pt = _sf(body.get("profit_target_usdt"))
if pt is None or pt <= 0:
return "盈利金额出场须填写目标盈利(USDT)"
else:
if float(body.get("option_target_points") or 0) <= 0 or float(body.get("perp_target_points") or 0) <= 0:
return "目标位点数须大于 0"
if float(body["option_perp_ratio"]) <= 0:
return "期权永续比例须大于 0"
except (TypeError, ValueError):