mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-16 09:11:03 +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)
|
unrealizedPnl := pos["unRealizedProfit"].(float64)
|
||||||
liquidationPrice := pos["liquidationPrice"].(float64)
|
liquidationPrice := pos["liquidationPrice"].(float64)
|
||||||
|
|
||||||
// 计算盈亏百分比
|
|
||||||
pnlPct := 0.0
|
|
||||||
if side == "long" {
|
|
||||||
pnlPct = ((markPrice - entryPrice) / entryPrice) * 100
|
|
||||||
} else {
|
|
||||||
pnlPct = ((entryPrice - markPrice) / entryPrice) * 100
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算占用保证金(估算)
|
// 计算占用保证金(估算)
|
||||||
leverage := 10 // 默认值,实际应该从持仓信息获取
|
leverage := 10 // 默认值,实际应该从持仓信息获取
|
||||||
if lev, ok := pos["leverage"].(float64); ok {
|
if lev, ok := pos["leverage"].(float64); ok {
|
||||||
leverage = int(lev)
|
leverage = int(lev)
|
||||||
}
|
}
|
||||||
marginUsed := (quantity * markPrice) / float64(leverage)
|
marginUsed := (quantity * markPrice) / float64(leverage)
|
||||||
|
|
||||||
|
// 计算盈亏百分比(基于实际盈亏和保证金)
|
||||||
|
pnlPct := 0.0
|
||||||
|
if marginUsed > 0 {
|
||||||
|
pnlPct = (unrealizedPnl / marginUsed) * 100
|
||||||
|
}
|
||||||
totalMarginUsed += marginUsed
|
totalMarginUsed += marginUsed
|
||||||
|
|
||||||
// 跟踪持仓首次出现时间
|
// 跟踪持仓首次出现时间
|
||||||
|
|||||||
Reference in New Issue
Block a user