84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
type Config struct {
|
|
TelegramBotToken string
|
|
TelegramChatID string
|
|
AlertCooldownSec int // seconds between alerts for same coin
|
|
ArbThreshold float64 // minimum net profit % to trigger alert
|
|
ScanIntervalMs int // how often scanner runs (milliseconds)
|
|
|
|
// Automated trading
|
|
TradeEnabled bool
|
|
TradeThreshold float64 // minimum profit % to execute trade (>0.15%)
|
|
TradeAmountUSD float64 // amount per trade in USDT
|
|
TradeCooldownMs int // ms between trades of same coin
|
|
|
|
// Test mode (no real API keys needed)
|
|
TestMode bool
|
|
MockSlippagePct float64 // simulated slippage per order (e.g. 0.01 = 0.01%)
|
|
|
|
// Bitget API
|
|
BitgetAPIKey string
|
|
BitgetAPISecret string
|
|
BitgetPassphrase string
|
|
|
|
// HyperLiquid API
|
|
HLPrivateKey string // ed25519 private key hex
|
|
HLAddress string // wallet address
|
|
}
|
|
|
|
func LoadConfig() *Config {
|
|
getEnv := func(key, def string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
getFloat := func(key string, def float64) float64 {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
f, err := strconv.ParseFloat(v, 64)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return f
|
|
}
|
|
getBool := func(key string, def bool) bool {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
return v == "1" || v == "true" || v == "yes"
|
|
}
|
|
|
|
return &Config{
|
|
TelegramBotToken: getEnv("TELEGRAM_BOT_TOKEN", ""),
|
|
TelegramChatID: getEnv("TELEGRAM_CHAT_ID", ""),
|
|
AlertCooldownSec: 300,
|
|
ArbThreshold: 0.03,
|
|
ScanIntervalMs: 500,
|
|
|
|
TradeEnabled: getBool("TRADE_ENABLED", false),
|
|
TradeThreshold: getFloat("TRADE_THRESHOLD", 0.15),
|
|
TradeAmountUSD: getFloat("TRADE_AMOUNT_USD", 10),
|
|
TradeCooldownMs: 30000,
|
|
|
|
TestMode: getBool("TEST_MODE", false),
|
|
MockSlippagePct: getFloat("MOCK_SLIPPAGE_PCT", 0.005),
|
|
|
|
BitgetAPIKey: getEnv("BITGET_API_KEY", ""),
|
|
BitgetAPISecret: getEnv("BITGET_API_SECRET", ""),
|
|
BitgetPassphrase: getEnv("BITGET_PASSPHRASE", ""),
|
|
|
|
HLPrivateKey: getEnv("HL_PRIVATE_KEY", ""),
|
|
HLAddress: getEnv("HL_ADDRESS", ""),
|
|
}
|
|
}
|