fix: use taker fees (BG 0.06%, HL 0.045%) + threshold 0.25%

All IOC market orders incur taker fees, not maker fees. Previous
makerFees (BG 0.02%, HL 0.015%) caused 0.10% threshold trades to
actually lose 0.11% per round trip.

Changes:
- scanner.go: makerFees → takerFees (BG 0.060, HL 0.045)
- dashboard.go: makerFees → takerFees
- types.go: makerFees → takerFees
- trader.go: makerFees → takerFees
- config.json: trade_threshold 0.1 → 0.25
This commit is contained in:
jackyu66git
2026-05-03 23:34:01 +08:00
parent 68c0a342a6
commit 5d6d9352f3
5 changed files with 11 additions and 11 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
"trade_enabled": true,
"arb_threshold": 0.03,
"scan_interval_ms": 200,
"trade_threshold": 0.1,
"trade_threshold": 0.25,
"trade_amount_usd": 5,
"trade_cooldown_ms": 30000,
"alert_cooldown_sec": 300,
+1 -1
View File
@@ -379,7 +379,7 @@ func (d *Dashboard) broadcastLoop() {
shortAvg := weightedAvgPrice(pos.ShortEntryPrices, pos.AmountUSD/float64(max(1, len(pos.ShortEntryPrices))))
longPnl := (longCurrent - longAvg) / longAvg * 100
shortPnl := (shortAvg - shortCurrent) / shortAvg * 100
totalFees := 2 * (makerFees[ExBitget] + makerFees[ExHyperLiquid])
totalFees := 2 * (takerFees[ExBitget] + takerFees[ExHyperLiquid])
netPnl := longPnl + shortPnl - totalFees
currentSpread := (hlP - bgP) / bgP * 100
+6 -6
View File
@@ -10,10 +10,10 @@ const (
ExBitget = "Bitget"
)
// Maker fee rates (%) — for limit orders on trading exchanges
var makerFees = map[string]float64{
ExHyperLiquid: 0.015,
ExBitget: 0.020, // standard maker
// Taker fee rates (%) — for IOC market orders on trading exchanges
var takerFees = map[string]float64{
ExHyperLiquid: 0.045,
ExBitget: 0.060,
}
// TickerCoins defines all coins we monitor.
@@ -59,9 +59,9 @@ func ScanBGHL(store *PriceStore) []*ArbOpportunity {
}
// BG->HL: buy cheap at Bitget, sell expensive at HyperLiquid
profitBG := netProfit(bgP, hlP, makerFees[ExBitget], makerFees[ExHyperLiquid])
profitBG := netProfit(bgP, hlP, takerFees[ExBitget], takerFees[ExHyperLiquid])
// HL->BG: buy cheap at HyperLiquid, sell expensive at Bitget
profitHL := netProfit(hlP, bgP, makerFees[ExHyperLiquid], makerFees[ExBitget])
profitHL := netProfit(hlP, bgP, takerFees[ExHyperLiquid], takerFees[ExBitget])
grossBG := (hlP - bgP) / bgP * 100
grossHL := (bgP - hlP) / hlP * 100
+1 -1
View File
@@ -524,7 +524,7 @@ func (t *Trader) checkExit(pos *ArbPosition, bgP, hlP, diffPct float64, notifier
longPnl := (longCurrent - longAvg) / longAvg * 100
shortPnl := (shortAvg - shortCurrent) / shortAvg * 100
totalFees := 2 * (makerFees[ExBitget] + makerFees[ExHyperLiquid]) // 开仓 + 平仓手续费
totalFees := 2 * (takerFees[ExBitget] + takerFees[ExHyperLiquid]) // 开仓 + 平仓手续费
netPnl := longPnl + shortPnl - totalFees
// Convergence analysis
+2 -2
View File
@@ -163,8 +163,8 @@ func (swt *SpreadWindowTracker) Tick(snap map[string]map[string]float64, thresho
sellFee float64
}
for _, dir := range []dirCheck{
{"BG->HL", bgP, hlP, makerFees[ExBitget], makerFees[ExHyperLiquid]},
{"HL->BG", hlP, bgP, makerFees[ExHyperLiquid], makerFees[ExBitget]},
{"BG->HL", bgP, hlP, takerFees[ExBitget], takerFees[ExHyperLiquid]},
{"HL->BG", hlP, bgP, takerFees[ExHyperLiquid], takerFees[ExBitget]},
} {
key := coin.Name + ":" + dir.name
netSpr := netProfit(dir.buyPrice, dir.sellPrice, dir.buyFee, dir.sellFee)