Improve: Optimize AI decision engine and position management

- Add focused position strategy (max 3 concurrent positions)
- Increase position sizes for better capital efficiency
- Add historical reflection prompts for AI learning
- Fix JSON parsing with missing quotes in reasoning field
- Update position limits and leverage recommendations
- Enhance risk management with concentrated positions
This commit is contained in:
tinkle-community
2025-10-28 22:40:34 +08:00
parent 8a26b8161b
commit da3662cabc
2 changed files with 40 additions and 106 deletions

View File

@@ -310,49 +310,67 @@ func buildFullDecisionPrompt(ctx *TradingContext) string {
sb.WriteString(fmt.Sprintf("3. 从%d个候选币种中找交易机会\n", len(ctx.MarketDataMap)))
sb.WriteString("4. 开新仓(如果有机会)\n\n")
sb.WriteString("## 📋 规则\n\n")
sb.WriteString(fmt.Sprintf("1. **单币种仓位上限**: 山寨币≤%.0f USDT | BTC/ETH≤%.0f USDT\n", ctx.Account.TotalEquity*1.5, ctx.Account.TotalEquity*10))
sb.WriteString("2. **杠杆**: 山寨币=20倍 | BTC/ETH=50倍\n")
sb.WriteString("3. **保证金上限**: 总使用率≤90%%\n")
sb.WriteString("4. **风险回报比**: ≥1:2\n\n")
sb.WriteString("## 📋 规则 - **重要:集中资金,精选标的**\n\n")
sb.WriteString("### 🎯 仓位管理(核心规则)\n")
sb.WriteString("1. **最大持仓数量**: 同时最多持有 **3个币种**(质量 > 数量)\n")
sb.WriteString("2. **单个仓位大小**: \n")
sb.WriteString(fmt.Sprintf(" - 山寨币: %.0f-%.0f USDT推荐%.0f USDT\n",
ctx.Account.TotalEquity*0.8, ctx.Account.TotalEquity*1.5, ctx.Account.TotalEquity*1.2))
sb.WriteString(fmt.Sprintf(" - BTC/ETH: %.0f-%.0f USDT推荐%.0f USDT\n",
ctx.Account.TotalEquity*3, ctx.Account.TotalEquity*10, ctx.Account.TotalEquity*5))
sb.WriteString("3. **杠杆**: 山寨币=20倍 | BTC/ETH=50倍\n")
sb.WriteString("4. **保证金上限**: 总使用率≤90%%\n")
sb.WriteString("5. **风险回报比**: ≥1:2\n\n")
sb.WriteString("### ⚠️ 仓位策略\n")
sb.WriteString("- **集中火力**: 宁可持有1-2个大仓位也不要持有5-6个小仓位\n")
sb.WriteString("- **严格筛选**: 只做最有把握的机会,不确定的机会宁可不做\n")
sb.WriteString("- **快速止损**: 亏损超过2%%立即止损,不要让小亏变大亏\n")
sb.WriteString("- **及时止盈**: 盈利达到目标立即止盈,落袋为安\n\n")
sb.WriteString("### 📤 输出格式\n\n")
sb.WriteString("**重要严格按照JSON格式输出所有字符串值必须用双引号包裹**\n\n")
sb.WriteString("先输出思维链分析(纯文本)然后输出JSON数组\n\n")
sb.WriteString("**思维链分析**:\n")
sb.WriteString("1. **历史经验反思**(如有历史数据): 回顾表现,总结教训\n")
sb.WriteString("1. **历史经验反思**(如有历史数据): 回顾表现,总结教训,是否仓位太分散?\n")
sb.WriteString("2. **市场分析**: 分析BTC趋势和当前持仓\n")
sb.WriteString("3. **机会识别**: 从候选币种中找交易机会\n")
sb.WriteString("4. **风险控制**: 检查账户保证金和仓位限制\n")
sb.WriteString("5. **最终决策摘要**: 列出所有决策\n\n")
sb.WriteString("3. **仓位检查**: 当前持仓数量是否>3个如果是平掉表现差的集中资金\n")
sb.WriteString("4. **机会识别**: 从候选币种中找1-2个最好的机会不是3-5个\n")
sb.WriteString("5. **仓位大小**: 确保单个仓位足够大山寨币1200+ USDTBTC 5000+ USDT\n")
sb.WriteString("6. **风险控制**: 检查账户保证金和仓位限制\n")
sb.WriteString("7. **最终决策摘要**: 列出所有决策最多3个币种持仓\n\n")
sb.WriteString("---\n\n")
sb.WriteString("**JSON决策数组** (不要加```标记,所有字符串必须用双引号):\n")
sb.WriteString("[\n")
sb.WriteString(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_long\", \"leverage\": 50, \"position_size_usd\": 15000, \"stop_loss\": 92000, \"take_profit\": 98000, \"reasoning\": \"突破做多\"},\n")
sb.WriteString(" {\"symbol\": \"ETHUSDT\", \"action\": \"hold\", \"reasoning\": \"持续观察\"}\n")
sb.WriteString(fmt.Sprintf(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_long\", \"leverage\": 50, \"position_size_usd\": %.0f, \"stop_loss\": 92000, \"take_profit\": 98000, \"reasoning\": \"强势突破,集中资金\"},\n", ctx.Account.TotalEquity*5))
sb.WriteString(fmt.Sprintf(" {\"symbol\": \"SOLUSDT\", \"action\": \"open_long\", \"leverage\": 20, \"position_size_usd\": %.0f, \"stop_loss\": 180, \"take_profit\": 200, \"reasoning\": \"技术面强势\"}\n", ctx.Account.TotalEquity*1.2))
sb.WriteString("]\n\n")
sb.WriteString("**action类型**: open_long | open_short | close_long | close_short | hold | wait\n")
sb.WriteString("**开仓必填**: leverage, position_size_usd, stop_loss, take_profit\n")
sb.WriteString("**注意**: reasoning字段必须用双引号包裹例如\"reasoning\": \"这里是理由\"\n\n")
sb.WriteString("### 📝 完整示例\n\n")
sb.WriteString("### 📝 完整示例(集中资金策略)\n\n")
// 简化示例仓位(使用新的仓位上限)
btcSize := ctx.Account.TotalEquity * 8 // BTC示例8倍净值不超过10倍上限
// 示例仓位:集中资金策略
btcSize := ctx.Account.TotalEquity * 5 // BTC5倍净值推荐值
sb.WriteString("【历史经验反思】\n")
sb.WriteString("回顾最近10笔交易胜率40%盈亏比0.8:1表现欠佳。\n")
sb.WriteString("SOLUSDT做多3次全部止损,该币种波动大,暂时避开。\n")
sb.WriteString("BTCUSDT做多2次1胜1负可继续关注。\n\n")
sb.WriteString("回顾最近10笔交易仓位太分散同时持有5个币种但单个仓位太小赚不到钱。\n")
sb.WriteString("SOLUSDT做多3次2次小盈1次止损净盈利很少。决策应该用更大仓位做确定性高的机会。\n")
sb.WriteString("BTCUSDT做多2次1胜1负但因为仓位太小,盈利不明显。\n")
sb.WriteString("**改进策略**: 集中资金在1-2个最有把握的币种加大仓位。\n\n")
sb.WriteString("【市场分析】\n")
sb.WriteString("BTC突破上涨MACD金叉趋势向上。\n")
sb.WriteString("当前持仓:ETHUSDT多头盈利+2.3%,继续持有。\n\n")
sb.WriteString("【最终决策】持有ETHUSDT开多BTCUSDT。\n\n")
sb.WriteString("BTC突破95000MACD金叉RSI 65趋势强势。\n")
sb.WriteString("当前持ETHUSDT(小仓位+0.8%、SOLUSDT小仓位-0.3%、LINKUSDT小仓位+0.2%)→ 太分散!\n")
sb.WriteString("决定平掉所有小仓位集中资金做BTC大仓位。\n\n")
sb.WriteString("【最终决策】平掉3个小仓位集中5000 USDT做BTC多头仓位是之前的3倍+)。\n\n")
sb.WriteString("---\n\n")
sb.WriteString("[\n")
sb.WriteString(" {\"symbol\": \"ETHUSDT\", \"action\": \"hold\", \"reasoning\": \"盈利良好,趋势延续\"},\n")
sb.WriteString(fmt.Sprintf(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_long\", \"leverage\": 50, \"position_size_usd\": %.0f, \"stop_loss\": 92000, \"take_profit\": 98000, \"reasoning\": \"突破确认,历史表现佳\"}\n", btcSize))
sb.WriteString(" {\"symbol\": \"ETHUSDT\", \"action\": \"close_long\", \"reasoning\": \"小仓位盈利太少,释放资金\"},\n")
sb.WriteString(" {\"symbol\": \"SOLUSDT\", \"action\": \"close_long\", \"reasoning\": \"小亏损,释放资金\"},\n")
sb.WriteString(" {\"symbol\": \"LINKUSDT\", \"action\": \"close_long\", \"reasoning\": \"小仓位盈利太少,释放资金\"},\n")
sb.WriteString(fmt.Sprintf(" {\"symbol\": \"BTCUSDT\", \"action\": \"open_long\", \"leverage\": 50, \"position_size_usd\": %.0f, \"stop_loss\": 92000, \"take_profit\": 98000, \"reasoning\": \"强势突破,集中资金做大仓位\"}\n", btcSize))
sb.WriteString("]\n\n")
sb.WriteString("**说明**: 这样只持有1个BTC大仓位盈利空间是之前的3倍+,止损也更清晰。\n\n")
sb.WriteString("现在请开始分析并给出你的决策!\n")