mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-05 12:00:59 +08:00
fix: 修正盈亏百分比计算错误(未考虑杠杆)
问题:
- 旧算法只计算价格变化百分比,未考虑杠杆倍数
- 例:10倍杠杆,价格涨1% → 显示+1%(错误),实际应该是+10%
- 导致 AI 收到错误的盈亏数据,影响决策
修复:
- 使用实际盈亏除以保证金计算百分比
- 公式:pnlPct = (unrealizedPnl / marginUsed) * 100
- 优点:
✓ 考虑杠杆倍数
✓ 使用 API 提供的实际盈亏(含手续费、资金费率)
✓ 更准确反映真实盈亏百分比
示例对比:
- 入场:100,000,当前:101,000(+1%),10倍杠杆
- 旧算法:显示 +1%(错误)
- 新算法:显示 +10%(正确)
感谢用户反馈 @1711z
🤖 Generated with Claude Code
This commit is contained in:
@@ -484,20 +484,18 @@ func (at *AutoTrader) buildTradingContext() (*decision.Context, error) {
|
||||
unrealizedPnl := pos["unRealizedProfit"].(float64)
|
||||
liquidationPrice := pos["liquidationPrice"].(float64)
|
||||
|
||||
// 计算盈亏百分比
|
||||
pnlPct := 0.0
|
||||
if side == "long" {
|
||||
pnlPct = ((markPrice - entryPrice) / entryPrice) * 100
|
||||
} else {
|
||||
pnlPct = ((entryPrice - markPrice) / entryPrice) * 100
|
||||
}
|
||||
|
||||
// 计算占用保证金(估算)
|
||||
leverage := 10 // 默认值,实际应该从持仓信息获取
|
||||
if lev, ok := pos["leverage"].(float64); ok {
|
||||
leverage = int(lev)
|
||||
}
|
||||
marginUsed := (quantity * markPrice) / float64(leverage)
|
||||
|
||||
// 计算盈亏百分比(基于实际盈亏和保证金)
|
||||
pnlPct := 0.0
|
||||
if marginUsed > 0 {
|
||||
pnlPct = (unrealizedPnl / marginUsed) * 100
|
||||
}
|
||||
totalMarginUsed += marginUsed
|
||||
|
||||
// 跟踪持仓首次出现时间
|
||||
|
||||
Reference in New Issue
Block a user