feat: 所有参数移至config.json, 重构退出逻辑, 清理遗留接口
- 将所有硬编码参数迁移到 config.json (手续费率、止盈/止损阈值、 超时、腿间隔、加仓步进等) - 退出条件: 净利 >= take_profit_pct 止盈, 价差 <= 0 平仓 - 删除 Binance/dYdX 遗留代码 - 更新 README 文档 - Dashboard: 双交易所价格表、黑名单UI、按币名排序持仓 - Bitget WS: 文本ping保活 - 数据库: 重置, 无历史仓位
This commit is contained in:
@@ -34,6 +34,10 @@ func main() {
|
||||
loadDotEnv()
|
||||
cfg := LoadConfig()
|
||||
|
||||
// Populate package-level taker fees from config (so scanner/dashboard/trader all use it)
|
||||
takerFees[ExBitget] = cfg.TakerFeeBitget
|
||||
takerFees[ExHyperLiquid] = cfg.TakerFeeHyperLiquid
|
||||
|
||||
store := NewPriceStore()
|
||||
notifier := NewNotifier(cfg.TelegramBotToken, cfg.TelegramChatID)
|
||||
|
||||
@@ -58,9 +62,8 @@ func main() {
|
||||
// P3-4: wire real-time trade event broadcast
|
||||
trader.OnTradeEvent = dashboard.BroadcastEvent
|
||||
if trader.IsConfigured() {
|
||||
modeLabel := trader.ModeLabel()
|
||||
log.Printf("[Trader] %s mode: automated trading ENABLED (threshold >= %.2f%%, $%.0f/trade)",
|
||||
modeLabel, cfg.TradeThreshold, cfg.TradeAmountUSD)
|
||||
log.Printf("[Trader] %s mode: automated trading ENABLED (threshold >= %.2f%%, $%.0f/leg, max %d positions, $%.0f capital)",
|
||||
trader.ModeLabel(), cfg.TradeThreshold, cfg.TradeAmountUSD, cfg.MaxPositions, cfg.InitialCapital)
|
||||
if cfg.TestMode {
|
||||
log.Printf("[Trader] Using mock orders with %.3f%% slippage per leg", cfg.MockSlippagePct)
|
||||
}
|
||||
@@ -76,24 +79,18 @@ func main() {
|
||||
sigCh := make(chan os.Signal, 1)
|
||||
signal.Notify(sigCh, os.Interrupt, syscall.SIGUSR1)
|
||||
|
||||
// Collect symbols — skip exchanges the coin isn't listed on
|
||||
var bnSymbols, bgSymbols, hlSymbols, dydxSymbols []string
|
||||
// Collect symbols — only BG and HL for now (BN, dYdX disabled)
|
||||
var bgSymbols, hlSymbols []string
|
||||
for _, c := range TrackedCoins {
|
||||
if c.BN != "" {
|
||||
bnSymbols = append(bnSymbols, c.BN)
|
||||
}
|
||||
if c.BG != "" {
|
||||
bgSymbols = append(bgSymbols, c.BG)
|
||||
}
|
||||
if c.HL != "" {
|
||||
hlSymbols = append(hlSymbols, c.HL)
|
||||
}
|
||||
if c.HL != "" {
|
||||
dydxSymbols = append(dydxSymbols, c.HL)
|
||||
}
|
||||
}
|
||||
|
||||
// Start all exchange WS connections
|
||||
// Start exchange WS connections (BG + HL only)
|
||||
startExchange := func(name string, runner func(func(string, float64, float64, float64)) error) {
|
||||
go func() {
|
||||
for {
|
||||
@@ -112,10 +109,8 @@ func main() {
|
||||
}()
|
||||
}
|
||||
|
||||
startExchange("Binance", exchange.NewBinanceWS(bnSymbols).Run)
|
||||
startExchange("HyperLiquid", exchange.NewHyperLiquidWS(hlSymbols).Run)
|
||||
startExchange("Bitget", exchange.NewBitgetWS(bgSymbols).Run)
|
||||
startExchange("dYdX", exchange.NewDydxWS(dydxSymbols).Run) // B#9: use dedicated symbol list
|
||||
|
||||
log.Println("[Monitor] Waiting for initial data...")
|
||||
time.Sleep(10 * time.Second)
|
||||
|
||||
Reference in New Issue
Block a user