Fold chain/account/PnL hints into rules; hide dust sell-coin.
Move the three noisy help lines into 规则说明, and show 手动卖回币 only when trading-coin balance meets the exchange min size. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1281,10 +1281,47 @@ def register_hedge_plan_routes(app: Flask, cfg: dict[str, Any]) -> None:
|
||||
pass
|
||||
return jsonify(result)
|
||||
|
||||
@app.route("/api/hedge-plan/sell-coin-status")
|
||||
@lr
|
||||
def api_hedge_sell_coin_status():
|
||||
"""是否显示「手动卖回币」:交易户有币且 ≥ 现货最小卖出量(粉尘隐藏)."""
|
||||
if not _hedge_enabled():
|
||||
return jsonify({"ok": False, "sellable": False, "msg": "对冲模块未启用"})
|
||||
ex = cfg.get("exchange_options") or cfg.get("exchange")
|
||||
if ex is None:
|
||||
return jsonify({"ok": False, "sellable": False, "msg": "交易所未配置"})
|
||||
underlying = str(
|
||||
request.args.get("underlying") or cfg.get("default_underly") or "ETH"
|
||||
).strip().upper()
|
||||
if underlying not in ("ETH", "BTC"):
|
||||
return jsonify({"ok": False, "sellable": False, "msg": "标的仅支持 ETH/BTC"})
|
||||
from lib.options.options_spot_bridge_lib import (
|
||||
fetch_trading_coin_available,
|
||||
is_sellable_spot_coin,
|
||||
spot_min_sell_sz,
|
||||
)
|
||||
|
||||
avail = fetch_trading_coin_available(ex, underlying)
|
||||
try:
|
||||
avail_f = float(avail) if avail is not None else 0.0
|
||||
except (TypeError, ValueError):
|
||||
avail_f = 0.0
|
||||
min_sz = float(spot_min_sell_sz(ex, underlying))
|
||||
sellable = is_sellable_spot_coin(ex, underlying, avail_f)
|
||||
return jsonify(
|
||||
{
|
||||
"ok": True,
|
||||
"underlying": underlying,
|
||||
"available": avail_f,
|
||||
"min_sz": min_sz,
|
||||
"sellable": bool(sellable),
|
||||
}
|
||||
)
|
||||
|
||||
@app.route("/api/hedge-plan/sell-coin", methods=["POST"])
|
||||
@lr
|
||||
def api_hedge_sell_coin():
|
||||
"""手动卖回币:市价卖出交易账户全部可用标的币换 USDT."""
|
||||
"""手动卖回币:市价卖出交易账户全部可用标的币换 USDT(粉尘拒绝)."""
|
||||
if not _hedge_enabled():
|
||||
return jsonify({"ok": False, "msg": "对冲模块未启用"}), 400
|
||||
ex = cfg.get("exchange_options") or cfg.get("exchange")
|
||||
@@ -1294,6 +1331,27 @@ def register_hedge_plan_routes(app: Flask, cfg: dict[str, Any]) -> None:
|
||||
underlying = str(data.get("underlying") or cfg.get("default_underly") or "ETH").strip().upper()
|
||||
if underlying not in ("ETH", "BTC"):
|
||||
return jsonify({"ok": False, "msg": "标的仅支持 ETH/BTC"}), 400
|
||||
from lib.options.options_spot_bridge_lib import (
|
||||
fetch_trading_coin_available,
|
||||
is_sellable_spot_coin,
|
||||
spot_min_sell_sz,
|
||||
)
|
||||
|
||||
avail = fetch_trading_coin_available(ex, underlying)
|
||||
try:
|
||||
avail_f = float(avail) if avail is not None else 0.0
|
||||
except (TypeError, ValueError):
|
||||
avail_f = 0.0
|
||||
if not is_sellable_spot_coin(ex, underlying, avail_f):
|
||||
min_sz = spot_min_sell_sz(ex, underlying)
|
||||
return jsonify(
|
||||
{
|
||||
"ok": False,
|
||||
"msg": f"无足够 {underlying} 可卖(可用 {avail_f:g} · 最小 {min_sz:g})",
|
||||
"available": avail_f,
|
||||
"min_sz": min_sz,
|
||||
}
|
||||
), 400
|
||||
conn = cfg["get_db"]()
|
||||
try:
|
||||
from lib.options.options_db import init_options_tables
|
||||
|
||||
@@ -50,6 +50,9 @@
|
||||
<p><strong>手动下单</strong>:开仓按<strong>卖一限价</strong>(非交易所市价)。先开期权(按张数买币并+5%滑点),再开永续。永续杠杆取 env:BTC=<code>BTC_LEVERAGE</code>/ETH=<code>ALT_LEVERAGE</code>。</p>
|
||||
<p><strong>出场</strong>:盈利金额(扣开平双边手续费后净利)或目标位点数二选一。平仓先期权(须买一流动性)再永续,再把币全部卖回 USDT。一账户同时仅一笔对冲仓。</p>
|
||||
<p><strong>开仓校验</strong>:已选合约 · 张数≥1 · 出场条件已填 · 门禁「开仓:可」· 账户有足够交易 USDT。</p>
|
||||
<p><strong>期权链</strong>:默认显示约 <strong>5</strong> 档(平值 + 实值2 + 虚值2);勾选「展开全部」查看该到期更多行权价。</p>
|
||||
<p><strong>账户</strong>:期权币本位 · 交易/资金计 USDT · 永续全仓 / 期权逐仓(余额见下方划转)。</p>
|
||||
<p><strong>组合净盈亏</strong>:扣开平双边手续费;永续按平仓方向盘口均价估值。</p>
|
||||
<p class="muted" id="hp-po-pair-hint">买 Call + 永续空 · 点「选择」弹窗下单。</p>
|
||||
</div>
|
||||
</details>
|
||||
@@ -100,7 +103,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="hp-opt-bal-line" class="muted hp-po-meta hp-opt-bal-line"></div>
|
||||
<div id="hp-opt-bal-line" class="muted hp-po-meta hp-opt-bal-line" hidden aria-hidden="true"></div>
|
||||
<div class="hp-oo-transfer hp-oo-transfer--compact" id="hp-po-transfer">
|
||||
<div class="hp-oo-transfer-bals muted">
|
||||
<span>资金 <strong id="hp-po-funding-usdt">—</strong></span>
|
||||
@@ -234,11 +237,11 @@
|
||||
<div class="options-pos-head">
|
||||
<h2>持仓</h2>
|
||||
<div class="options-pos-head-actions">
|
||||
<button type="button" class="btn-secondary" id="hp-sell-coin-btn" title="市价卖出交易账户全部可用标的币(当前选中 ETH/BTC)换回 USDT">手动卖回币</button>
|
||||
<button type="button" class="btn-secondary" id="hp-sell-coin-btn" hidden title="市价卖出交易账户全部可用标的币(当前选中 ETH/BTC)换回 USDT">手动卖回币</button>
|
||||
<button type="button" class="btn-secondary" id="hp-pos-refresh" title="刷新持仓与历史">刷新</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="muted" id="hp-sell-coin-msg" style="font-size:.72rem;margin:0 0 6px"></div>
|
||||
<div class="muted" id="hp-sell-coin-msg" hidden style="font-size:.72rem;margin:0 0 6px"></div>
|
||||
<div class="options-pos-tabs" role="tablist" aria-label="永期持仓面板">
|
||||
<button type="button" class="btn-secondary opt-pos-tab hp-pos-tab active" data-hp-pos-tab="live" role="tab" aria-selected="true">当前持仓</button>
|
||||
<button type="button" class="btn-secondary opt-pos-tab hp-pos-tab" data-hp-pos-tab="plans" role="tab" aria-selected="false">对冲计划</button>
|
||||
@@ -494,4 +497,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/hedge_plan.js?v=61"></script>
|
||||
<script src="/static/hedge_plan.js?v=62"></script>
|
||||
|
||||
Reference in New Issue
Block a user