Merge branch 'main' of github.com:Icyoung/nofx

# Conflicts:
#	config.json.example
#	config/config.go
#	main.go
#	trader/auto_trader.go
#	web/src/App.tsx
#	web/src/components/CompetitionPage.tsx
This commit is contained in:
icy
2025-10-31 03:59:58 +08:00
10 changed files with 347 additions and 70 deletions

View File

@@ -2,6 +2,7 @@ package trader
import (
"context"
"encoding/json"
"fmt"
"log"
"strconv"
@@ -83,9 +84,13 @@ func (t *HyperliquidTrader) GetBalance() (map[string]interface{}, error) {
// 解析余额信息MarginSummary字段都是string
result := make(map[string]interface{})
accountValue, _ := strconv.ParseFloat(accountState.CrossMarginSummary.AccountValue, 64)
totalMarginUsed, _ := strconv.ParseFloat(accountState.CrossMarginSummary.TotalMarginUsed, 64)
availableBalance, _ := strconv.ParseFloat(accountState.CrossMarginSummary.AccountValue, 64)
// 🔍 调试打印API返回的完整CrossMarginSummary结构
summaryJSON, _ := json.MarshalIndent(accountState.MarginSummary, " ", " ")
log.Printf("🔍 [DEBUG] Hyperliquid API CrossMarginSummary完整数据:")
log.Printf("%s", string(summaryJSON))
accountValue, _ := strconv.ParseFloat(accountState.MarginSummary.AccountValue, 64)
totalMarginUsed, _ := strconv.ParseFloat(accountState.MarginSummary.TotalMarginUsed, 64)
// ⚠️ 关键修复:从所有持仓中累加真正的未实现盈亏
totalUnrealizedPnl := 0.0
@@ -95,19 +100,23 @@ func (t *HyperliquidTrader) GetBalance() (map[string]interface{}, error) {
}
// ✅ 正确理解Hyperliquid字段
// AccountValue = 账户净值(包含未实现盈亏)= 这是真正的总资产
// 钱包余额(已实现)= AccountValue - 未实现盈亏
walletBalance := accountValue - totalUnrealizedPnl
// AccountValue = 账户净值(包含空闲资金+持仓价值+未实现盈亏)
// TotalMarginUsed = 持仓占用的保证金(已包含在AccountValue中,仅用于显示)
//
// 为了兼容auto_trader.go的计算逻辑totalEquity = totalWalletBalance + totalUnrealizedProfit
// 需要返回"不包含未实现盈亏的钱包余额"
walletBalanceWithoutUnrealized := accountValue - totalUnrealizedPnl
result["totalWalletBalance"] = walletBalance // 钱包余额(已实现部分
result["availableBalance"] = availableBalance - totalMarginUsed // 可用余额
result["totalUnrealizedProfit"] = totalUnrealizedPnl // 未实现盈亏
result["totalWalletBalance"] = walletBalanceWithoutUnrealized // 钱包余额(不含未实现盈亏
result["availableBalance"] = accountValue - totalMarginUsed // 可用余额(总净值 - 占用保证金)
result["totalUnrealizedProfit"] = totalUnrealizedPnl // 未实现盈亏
log.Printf("✓ Hyperliquid API返回: 账户净值=%.2f, 钱包余额=%.2f, 可用=%.2f, 未实现盈亏=%.2f",
log.Printf("✓ Hyperliquid 账户: 总净值=%.2f (钱包%.2f+未实现%.2f), 可用=%.2f, 保证金占用=%.2f",
accountValue,
result["totalWalletBalance"],
walletBalanceWithoutUnrealized,
totalUnrealizedPnl,
result["availableBalance"],
result["totalUnrealizedProfit"])
totalMarginUsed)
return result, nil
}