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

@@ -1,84 +0,0 @@
package main
import (
"nofx/trader"
"time"
)
// 配置示例 - 复制到 main.go 中使用
func exampleConfig() trader.AutoTraderConfig {
return trader.AutoTraderConfig{
// ========== API密钥配置 ==========
// 在币安官网申请: https://www.binance.com/zh-CN/my/settings/api-management
BinanceAPIKey: "YOUR_BINANCE_API_KEY", // 必填
BinanceSecretKey: "YOUR_BINANCE_SECRET_KEY", // 必填
// 币种池API可选不填则使用默认池
CoinPoolAPIURL: "", // 留空将从config.json读取
// ========== AI配置 ==========
// 选择一个AI服务商二选一
UseQwen: true, // true=使用阿里云Qwen, false=使用DeepSeek
// DeepSeek配置
// 申请地址: https://platform.deepseek.com/
DeepSeekKey: "sk-your-deepseek-api-key",
// 阿里云Qwen配置
// 申请地址: https://dashscope.aliyun.com/
QwenKey: "sk-your-qwen-api-key",
// ========== 交易周期 ==========
// AI决策频率建议3-5分钟
ScanInterval: 3 * time.Minute,
// ========== 风险控制 ==========
// 注意这些仅作为提示AI可以自主决定实际参数
MaxDailyLoss: 5.0, // 最大日亏损5%(触发后暂停)
MaxDrawdown: 10.0, // 最大回撤10%(触发后暂停)
StopTradingTime: 30 * time.Minute, // 触发风控后暂停30分钟
}
}
// ========== AI决策原则内置在系统中 ==========
//
// 以下参数由AI根据市场情况自主决定无需配置
//
// 1. 杠杆倍数: 1-20倍
// - AI会根据波动率和信心度选择
// - 高波动 → 低杠杆
// - 低波动 → 高杠杆
//
// 2. 仓位大小: USD金额
// - AI会根据账户净值和风险评估决定
// - 建议单笔风险2-5%
//
// 3. 止损止盈价格:
// - AI会根据技术指标动态设置
// - 风险回报比建议 ≥ 1:2
//
// 4. 开仓时机:
// - 趋势明确、技术指标一致
// - RSI、MACD、EMA多重确认
//
// 5. 平仓时机:
// - 到达止损/止盈
// - 趋势反转信号
// - 大额亏损保护
//
// ========== 快速开始 ==========
//
// 1. 配置API密钥main.go中
// 2. 选择AI服务商DeepSeek或Qwen
// 3. 编译: go build -o nofx-auto
// 4. 运行: ./nofx-auto
// 5. 观察AI的思维链分析和决策
//
// ========== 风险提示 ==========
//
// ⚠️ 建议先用小额资金100-1000 USDT测试
// ⚠️ 密切监控系统运行,特别是初期
// ⚠️ 设置币安API的IP白名单
// ⚠️ 定期检查持仓和盈亏
// ⚠️ 加密货币交易有风险,投资需谨慎

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")