diff --git a/.env.bak b/.env.bak new file mode 100644 index 0000000..2fcae2a --- /dev/null +++ b/.env.bak @@ -0,0 +1,14 @@ +# Telegram 推送 +TELEGRAM_BOT_TOKEN=*** TELEGRAM_CHAT_ID=580807463 + +# API 密钥 (测试模式不需要) +BITGET_API_KEY=bg_0e6bd5f5f082f9e77c56a4402471ece7 +BITGET_API_SECRET=e914e1486e2db82866ffe5e2fabbb1d25d380e281d9ed8599b09c82d50c8d620 +BITGET_PASSPHRASE=Yoyousoft007 + +# HyperLiquid testnet API (EVM wallet) +# Private key = API钱包私钥 +# Address = 主账号地址(有999 USDC现货) +HL_PRIVATE_KEY=0xcb4e58b6c0921fd4aa8e49cd8a9f06b98b4e6b9cdf7c60c63ba1416856bb0b2a +HL_ADDRESS=0xA834b6d3Fa1D8A55ea8e502685ef5cbD2b2D3343 +HL_API_ADDRESS=0x601B09803A46F640C9416C124A7DB858a615F5fF diff --git a/config.json b/config.json index c49965c..ff2a860 100644 --- a/config.json +++ b/config.json @@ -8,7 +8,7 @@ "trade_cooldown_ms": 30000, "alert_cooldown_sec": 300, "mock_slippage_pct": 0.05, - "max_positions": 5, + "max_positions": 1, "blacklist_duration_sec": 3600, "initial_capital": 1000, "taker_fee_bitget": 0.060, diff --git a/scanner.go b/scanner.go index b1998c2..71862ca 100644 --- a/scanner.go +++ b/scanner.go @@ -51,13 +51,13 @@ var TrackedCoins = []TrackedCoin{ {Name: "BIO", BN: "", BG: "BIOUSDT", HL: "BIO"}, {Name: "BLUR", BN: "", BG: "BLURUSDT", HL: "BLUR"}, {Name: "BNB", BN: "", BG: "BNBUSDT", HL: "BNB"}, - {Name: "BNT", BN: "", BG: "BNTUSDT", HL: "BNT"}, + {Name: "BNT", BN: "", BG: "BNTUSDT", HL: ""}, {Name: "BOME", BN: "", BG: "BOMEUSDT", HL: "BOME"}, {Name: "BRETT", BN: "", BG: "BRETTUSDT", HL: "BRETT"}, {Name: "BSV", BN: "", BG: "BSVUSDT", HL: "BSV"}, {Name: "BTC", BN: "", BG: "BTCUSDT", HL: "BTC"}, {Name: "CAKE", BN: "", BG: "CAKEUSDT", HL: "CAKE"}, - {Name: "CATI", BN: "", BG: "CATIUSDT", HL: "CATI"}, + {Name: "CATI", BN: "", BG: "CATIUSDT", HL: ""}, {Name: "CC", BN: "", BG: "CCUSDT", HL: "CC"}, {Name: "CELO", BN: "", BG: "CELOUSDT", HL: "CELO"}, {Name: "CFX", BN: "", BG: "CFXUSDT", HL: "CFX"}, @@ -65,7 +65,7 @@ var TrackedCoins = []TrackedCoin{ {Name: "CHIP", BN: "", BG: "CHIPUSDT", HL: "CHIP"}, {Name: "COMP", BN: "", BG: "COMPUSDT", HL: "COMP"}, {Name: "CRV", BN: "", BG: "CRVUSDT", HL: "CRV"}, - {Name: "CYBER", BN: "", BG: "CYBERUSDT", HL: "CYBER"}, + {Name: "CYBER", BN: "", BG: "CYBERUSDT", HL: ""}, {Name: "DASH", BN: "", BG: "DASHUSDT", HL: "DASH"}, {Name: "DOOD", BN: "", BG: "DOODUSDT", HL: "DOOD"}, {Name: "DOT", BN: "", BG: "DOTUSDT", HL: "DOT"}, @@ -92,7 +92,7 @@ var TrackedCoins = []TrackedCoin{ {Name: "HYPE", BN: "", BG: "HYPEUSDT", HL: "HYPE"}, {Name: "HYPER", BN: "", BG: "HYPERUSDT", HL: "HYPER"}, {Name: "ICP", BN: "", BG: "ICPUSDT", HL: "ICP"}, - {Name: "ILV", BN: "", BG: "ILVUSDT", HL: "ILV"}, + {Name: "ILV", BN: "", BG: "ILVUSDT", HL: ""}, {Name: "IMX", BN: "", BG: "IMXUSDT", HL: "IMX"}, {Name: "INIT", BN: "", BG: "INITUSDT", HL: "INIT"}, {Name: "INJ", BN: "", BG: "INJUSDT", HL: "INJ"}, @@ -106,7 +106,7 @@ var TrackedCoins = []TrackedCoin{ {Name: "LAYER", BN: "", BG: "LAYERUSDT", HL: "LAYER"}, {Name: "LDO", BN: "", BG: "LDOUSDT", HL: "LDO"}, {Name: "LINEA", BN: "", BG: "LINEAUSDT", HL: "LINEA"}, - {Name: "LISTA", BN: "", BG: "LISTAUSDT", HL: "LISTA"}, + {Name: "LISTA", BN: "", BG: "LISTAUSDT", HL: ""}, {Name: "LIT", BN: "", BG: "LITUSDT", HL: "LIT"}, {Name: "LTC", BN: "", BG: "LTCUSDT", HL: "LTC"}, {Name: "MANTA", BN: "", BG: "MANTAUSDT", HL: "MANTA"}, @@ -128,13 +128,13 @@ var TrackedCoins = []TrackedCoin{ {Name: "NIL", BN: "", BG: "NILUSDT", HL: "NIL"}, {Name: "NOT", BN: "", BG: "NOTUSDT", HL: "NOT"}, {Name: "NXPC", BN: "", BG: "NXPCUSDT", HL: "NXPC"}, - {Name: "OGN", BN: "", BG: "OGNUSDT", HL: "OGN"}, + {Name: "OGN", BN: "", BG: "OGNUSDT", HL: ""}, {Name: "ORDI", BN: "", BG: "ORDIUSDT", HL: "ORDI"}, {Name: "PAXG", BN: "", BG: "PAXGUSDT", HL: "PAXG"}, {Name: "PENDLE", BN: "", BG: "PENDLEUSDT", HL: "PENDLE"}, {Name: "PENGU", BN: "", BG: "PENGUUSDT", HL: "PENGU"}, {Name: "PEOPLE", BN: "", BG: "PEOPLEUSDT", HL: "PEOPLE"}, - {Name: "PIXEL", BN: "", BG: "PIXELUSDT", HL: "PIXEL"}, + {Name: "PIXEL", BN: "", BG: "PIXELUSDT", HL: ""}, {Name: "PNUT", BN: "", BG: "PNUTUSDT", HL: "PNUT"}, {Name: "POL", BN: "", BG: "POLUSDT", HL: "POL"}, {Name: "POLYX", BN: "", BG: "POLYXUSDT", HL: "POLYX"}, @@ -159,7 +159,7 @@ var TrackedCoins = []TrackedCoin{ {Name: "SPX", BN: "", BG: "SPXUSDT", HL: "SPX"}, {Name: "STABLE", BN: "", BG: "STABLEUSDT", HL: "STABLE"}, {Name: "STBL", BN: "", BG: "STBLUSDT", HL: "STBL"}, - {Name: "STG", BN: "", BG: "STGUSDT", HL: "STG"}, + {Name: "STG", BN: "", BG: "STGUSDT", HL: ""}, {Name: "STRK", BN: "", BG: "STRKUSDT", HL: "STRK"}, {Name: "STX", BN: "", BG: "STXUSDT", HL: "STX"}, {Name: "SUI", BN: "", BG: "SUIUSDT", HL: "SUI"}, @@ -219,6 +219,9 @@ func ScanBGHL(snap map[string]map[string]float64) []*ArbOpportunity { var results []*ArbOpportunity for _, coin := range TrackedCoins { + if coin.BG == "" || coin.HL == "" { + continue // skip coins not available on both exchanges + } exMap := snap[coin.Name] if exMap == nil { continue diff --git a/test_bg.go b/test_bg.go new file mode 100644 index 0000000..01b2379 --- /dev/null +++ b/test_bg.go @@ -0,0 +1,33 @@ +//go:build ignore + +package main + +import ( + "fmt" + "os" + "strings" + + "exchange-monitor/exchange" +) + +func main() { + b, _ := os.ReadFile(".env") + m := map[string]string{} + for _, l := range strings.Split(string(b), "\n") { + l = strings.TrimSpace(l) + if l == "" || l[0] == '#' { continue } + if i := strings.Index(l, "="); i > 0 { + m[strings.TrimSpace(l[:i])] = strings.TrimSpace(l[i+1:]) + } + } + + bg := exchange.NewBitgetTrade(m["BITGET_API_KEY"], m["BITGET_API_SECRET"], m["BITGET_PASSPHRASE"]) + bal, err := bg.GetBalance() + if err != nil { + fmt.Printf("BG balance error: %v\n", err) + } else { + fmt.Printf("BG balance: $%.2f\n", bal) + } + + fmt.Println("\nKey prefix:", string(m["BITGET_API_KEY"][:5])) +} diff --git a/types.go b/types.go index 1f90ba5..3d214c4 100644 --- a/types.go +++ b/types.go @@ -142,6 +142,9 @@ func NewSpreadWindowTracker() *SpreadWindowTracker { func (swt *SpreadWindowTracker) Tick(snap map[string]map[string]float64, threshold float64) { now := time.Now() for _, coin := range TrackedCoins { + if coin.BG == "" || coin.HL == "" { + continue + } exMap := snap[coin.Name] if exMap == nil { continue