From ccfa27b1a656f54911574336cd4bd89dcbeee8e1 Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Mon, 4 May 2026 06:39:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20scanner=20netProfit=20=E6=BC=8F=E7=AE=97?= =?UTF-8?q?exit=20fees=20+=20=E5=AD=A4=E5=84=BF=E4=BB=93=E4=BD=8D=E6=A0=87?= =?UTF-8?q?=E8=AE=B0failed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scanner.go: netProfit 扣费改为 2*(buyFee+sellFee) 匹配 calcArbPnL - trader.go: 第二腿失败时设 pos.Status=failed,避免语义混淆 --- scanner.go | 2 +- trader.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/scanner.go b/scanner.go index c2e48d6..0cfdcef 100644 --- a/scanner.go +++ b/scanner.go @@ -203,7 +203,7 @@ func netProfit(buyPrice, sellPrice, buyFee, sellFee float64) float64 { revenue := sellPrice * (1 - sellFee/100) // Exit: sell long (pay sellFee), buy back short (pay buyFee) // Total fees = 2 * (buyFee + sellFee), first round already in formula above - return (revenue/cost - 1)*100 - (buyFee + sellFee) + return (revenue/cost - 1)*100 - 2*(buyFee + sellFee) } // ScanBGHL scans coins for arbitrage ONLY between Bitget and HyperLiquid (P3-1). diff --git a/trader.go b/trader.go index ab57cfd..f95dc4a 100644 --- a/trader.go +++ b/trader.go @@ -426,6 +426,7 @@ func (t *Trader) executeEntry(opp *ArbOpportunity, store *PriceStore, notifier * time.Sleep(t.cfg.LegDelay) if err := t.placeOrder(pos.ShortLeg, "sell", store); err != "" { // Leg1 placed successfully, leg2 failed — try to close leg1 + pos.Status = "failed" if closeErr := t.closeLeg(pos.LongLeg); closeErr != "" { // CRITICAL: leg1 is still open on the exchange! // Record the orphan so we don't silently lose tracking