diff --git a/decision/engine.go b/decision/engine.go index f6676196..a25f3644 100644 --- a/decision/engine.go +++ b/decision/engine.go @@ -97,7 +97,7 @@ func GetFullDecision(ctx *Context) (*FullDecision, error) { } // 2. 构建 System Prompt(固定规则)和 User Prompt(动态数据) - systemPrompt := buildSystemPrompt(ctx.Account.TotalEquity) + systemPrompt := buildSystemPrompt(ctx.Account.TotalEquity, ctx.BTCETHLeverage, ctx.AltcoinLeverage) userPrompt := buildUserPrompt(ctx) // 3. 调用AI API(使用 system + user prompt) @@ -200,7 +200,7 @@ func calculateMaxCandidates(ctx *Context) int { } // buildSystemPrompt 构建 System Prompt(固定规则,可缓存) -func buildSystemPrompt(accountEquity float64) string { +func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage int) string { var sb strings.Builder // === 核心使命 === @@ -222,8 +222,8 @@ func buildSystemPrompt(accountEquity float64) string { sb.WriteString("# ⚖️ 硬约束(风险控制)\n\n") sb.WriteString("1. **风险回报比**: 必须 ≥ 1:3(冒1%风险,赚3%+收益)\n") sb.WriteString("2. **最多持仓**: 3个币种(质量>数量)\n") - sb.WriteString(fmt.Sprintf("3. **单币仓位**: 山寨%.0f-%.0f U(20x杠杆) | BTC/ETH %.0f-%.0f U(50x杠杆)\n", - accountEquity*0.8, accountEquity*1.5, accountEquity*5, accountEquity*10)) + sb.WriteString(fmt.Sprintf("3. **单币仓位**: 山寨%.0f-%.0f U(%dx杠杆) | BTC/ETH %.0f-%.0f U(%dx杠杆)\n", + accountEquity*0.8, accountEquity*1.5, altcoinLeverage, accountEquity*5, accountEquity*10, btcEthLeverage)) sb.WriteString("4. **保证金**: 总使用率 ≤ 90%\n\n") // === 做空激励 === @@ -296,7 +296,7 @@ func buildSystemPrompt(accountEquity float64) string { sb.WriteString("简洁分析你的思考过程\n\n") sb.WriteString("**第二步: JSON决策数组**\n\n") sb.WriteString("```json\n[\n") - sb.WriteString(fmt.Sprintf(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_short\", \"leverage\": 50, \"position_size_usd\": %.0f, \"stop_loss\": 97000, \"take_profit\": 91000, \"confidence\": 85, \"risk_usd\": 300, \"reasoning\": \"下跌趋势+MACD死叉\"},\n", accountEquity*5)) + sb.WriteString(fmt.Sprintf(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_short\", \"leverage\": %d, \"position_size_usd\": %.0f, \"stop_loss\": 97000, \"take_profit\": 91000, \"confidence\": 85, \"risk_usd\": 300, \"reasoning\": \"下跌趋势+MACD死叉\"},\n", btcEthLeverage, accountEquity*5)) sb.WriteString(" {\"symbol\": \"ETHUSDT\", \"action\": \"close_long\", \"reasoning\": \"止盈离场\"}\n") sb.WriteString("]\n```\n\n") sb.WriteString("**字段说明**:\n") diff --git a/web/src/components/EquityChart.tsx b/web/src/components/EquityChart.tsx index 505069b9..36f58342 100644 --- a/web/src/components/EquityChart.tsx +++ b/web/src/components/EquityChart.tsx @@ -80,8 +80,10 @@ export function EquityChart({ traderId }: EquityChartProps) { ? history.slice(-MAX_DISPLAY_POINTS) : history; - // 计算初始余额(使用第一个数据点) - const initialBalance = history[0]?.total_equity || 1000; + // 计算初始余额(使用第一个数据点,如果无数据则从account获取,最后才用默认值) + const initialBalance = history[0]?.total_equity + || account?.total_equity + || 100; // 默认值改为100,与常见配置一致 // 转换数据格式 const chartData = displayHistory.map((point) => { diff --git a/常见问题.md b/常见问题.md new file mode 100644 index 00000000..5d823205 --- /dev/null +++ b/常见问题.md @@ -0,0 +1,25 @@ +# 常见问题 + +## 币安持仓模式错误 (code=-4061) + +**错误信息**:`Order's position side does not match user's setting` + +**原因**:系统需要使用双向持仓模式,但您的币安账户设置为单向持仓。 + +### 解决方法 + +1. 登录 [币安合约交易平台](https://www.binance.com/zh-CN/futures/BTCUSDT) + +2. 点击右上角的 **⚙️ 偏好设置** + +3. 选择 **持仓模式** + +4. 切换为 **双向持仓** (Hedge Mode) + +5. 确认切换 + +**注意**:切换前必须先平掉所有持仓。 + +--- + +更多问题请查看 [GitHub Issues](https://github.com/tinkle-community/nofx/issues)