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:
+1
-1
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user