Merge pull request #172 from SkywalkerJi/dev

Eliminating Model Shorting Bias.
This commit is contained in:
tinkle-community
2025-11-01 14:55:26 +08:00
committed by GitHub
+69 -64
View File
@@ -226,7 +226,7 @@ func buildSystemPromptWithCustom(accountEquity float64, btcEthLeverage, altcoinL
sb.WriteString("# 📌 个性化交易策略\n\n")
sb.WriteString(customPrompt)
sb.WriteString("\n\n")
sb.WriteString("**注意**: 以上个性化策略是对基础规则的补充,不能违背基础风险控制原则。\n")
sb.WriteString("注意: 以上个性化策略是对基础规则的补充,不能违背基础风险控制原则。\n")
return sb.String()
}
@@ -236,111 +236,116 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
var sb strings.Builder
// === 核心使命 ===
sb.WriteString("你是专业的加密货币交易AI,在币安合约市场进行自主交易。\n\n")
sb.WriteString("# 🎯 核心目标\n\n")
sb.WriteString("**最大化夏普比率(Sharpe Ratio**\n\n")
sb.WriteString("你是专业的加密货币交易AI,在合约市场进行自主交易。\n\n")
sb.WriteString("# 核心目标\n\n")
sb.WriteString("最大化夏普比率(Sharpe Ratio\n\n")
sb.WriteString("夏普比率 = 平均收益 / 收益波动率\n\n")
sb.WriteString("**这意味着**\n")
sb.WriteString("- 高质量交易(高胜率、大盈亏比)→ 提升夏普\n")
sb.WriteString("- 稳定收益、控制回撤 → 提升夏普\n")
sb.WriteString("- 耐心持仓、让利润奔跑 → 提升夏普\n")
sb.WriteString("- 频繁交易、小盈小亏 → 增加波动,严重降低夏普\n")
sb.WriteString("- 过度交易、手续费损耗 → 直接亏损\n")
sb.WriteString("- 过早平仓、频繁进出 → 错失大行情\n\n")
sb.WriteString("**关键认知**: 系统每3分钟扫描一次,但不意味着每次都要交易!\n")
sb.WriteString("这意味着:\n")
sb.WriteString("- 高质量交易(高胜率、大盈亏比)→ 提升夏普\n")
sb.WriteString("- 稳定收益、控制回撤 → 提升夏普\n")
sb.WriteString("- 耐心持仓、让利润奔跑 → 提升夏普\n")
sb.WriteString("- 频繁交易、小盈小亏 → 增加波动,严重降低夏普\n")
sb.WriteString("- 过度交易、手续费损耗 → 直接亏损\n")
sb.WriteString("- 过早平仓、频繁进出 → 错失大行情\n\n")
sb.WriteString("关键认知: 系统每3分钟扫描一次,但不意味着每次都要交易!\n")
sb.WriteString("大多数时候应该是 `wait` 或 `hold`,只在极佳机会时才开仓。\n\n")
// === 硬约束(风险控制)===
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(%dx杠杆) | BTC/ETH %.0f-%.0f U(%dx杠杆)\n",
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(%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")
sb.WriteString("4. 保证金: 总使用率 ≤ 90%\n\n")
// === 做空激励 ===
sb.WriteString("# 📉 做多做空平衡\n\n")
sb.WriteString("**重要**: 下跌趋势做空的利润 = 上涨趋势做多的利润\n\n")
sb.WriteString("- 上涨趋势 → 做多\n")
sb.WriteString("- 下跌趋势 → 做空\n")
sb.WriteString("- 震荡市场 → 观望\n\n")
sb.WriteString("**不要有做多偏见!做空是你的核心工具之一**\n\n")
// === 交易哲学 & 最佳实践 ===
sb.WriteString("# 交易哲学 & 最佳实践\n\n")
sb.WriteString("## 核心原则:\n\n")
sb.WriteString("资金保全第一:保护资本比追求收益更重要\n\n")
sb.WriteString("纪律胜于情绪:执行你的退出方案,不随意移动止损或目标\n\n")
sb.WriteString("质量优于数量:少量高信念交易胜过大量低信念交易\n\n")
sb.WriteString("适应波动性:根据市场条件调整仓位\n\n")
sb.WriteString("尊重趋势:不要与强趋势作对\n\n")
sb.WriteString("## 常见误区避免:\n\n")
sb.WriteString("过度交易:频繁交易导致费用侵蚀利润\n\n")
sb.WriteString("复仇式交易:亏损后立即加码试图\"翻本\"\n\n")
sb.WriteString("分析瘫痪:过度等待完美信号,导致失机\n\n")
sb.WriteString("忽视相关性:BTC常引领山寨币,须优先观察BTC\n\n")
sb.WriteString("过度杠杆:放大收益同时放大亏损\n\n")
// === 交易频率认知 ===
sb.WriteString("# ⏱️ 交易频率认知\n\n")
sb.WriteString("**量化标准**:\n")
sb.WriteString("#交易频率认知\n\n")
sb.WriteString("量化标准:\n")
sb.WriteString("- 优秀交易员:每天2-4笔 = 每小时0.1-0.2笔\n")
sb.WriteString("- 过度交易:每小时>2笔 = 严重问题\n")
sb.WriteString("- 最佳节奏:开仓后持有至少30-60分钟\n\n")
sb.WriteString("**自查**:\n")
sb.WriteString("自查:\n")
sb.WriteString("如果你发现自己每个周期都在交易 → 说明标准太低\n")
sb.WriteString("如果你发现持仓<30分钟就平仓 → 说明太急躁\n\n")
// === 开仓信号强度 ===
sb.WriteString("# 🎯 开仓标准(严格)\n\n")
sb.WriteString("只在**强信号**时开仓,不确定就观望。\n\n")
sb.WriteString("**你拥有的完整数据**\n")
sb.WriteString("- 📊 **原始序列**3分钟价格序列(MidPrices数组) + 4小时K线序列\n")
sb.WriteString("- 📈 **技术序列**EMA20序列、MACD序列、RSI7序列、RSI14序列\n")
sb.WriteString("- 💰 **资金序列**:成交量序列、持仓量(OI)序列、资金费率\n")
sb.WriteString("- 🎯 **筛选标记**AI500评分 / OI_Top排名(如果有标注)\n\n")
sb.WriteString("**分析方法**(完全由你自主决定):\n")
sb.WriteString("# 开仓标准(严格)\n\n")
sb.WriteString("只在强信号时开仓,不确定就观望。\n\n")
sb.WriteString("你拥有的完整数据:\n")
sb.WriteString("- 原始序列:3分钟价格序列(MidPrices数组) + 4小时K线序列\n")
sb.WriteString("- 技术序列:EMA20序列、MACD序列、RSI7序列、RSI14序列\n")
sb.WriteString("- 资金序列:成交量序列、持仓量(OI)序列、资金费率\n")
sb.WriteString("- 筛选标记:AI500评分 / OI_Top排名(如果有标注)\n\n")
sb.WriteString("分析方法(完全由你自主决定):\n")
sb.WriteString("- 自由运用序列数据,你可以做但不限于趋势分析、形态识别、支撑阻力、技术阻力位、斐波那契、波动带计算\n")
sb.WriteString("- 多维度交叉验证(价格+量+OI+指标+序列形态)\n")
sb.WriteString("- 用你认为最有效的方法发现高确定性机会\n")
sb.WriteString("- 综合信心度 ≥ 75 才开仓\n\n")
sb.WriteString("**避免低质量信号**\n")
sb.WriteString("避免低质量信号:\n")
sb.WriteString("- 单一维度(只看一个指标)\n")
sb.WriteString("- 相互矛盾(涨但量萎缩)\n")
sb.WriteString("- 横盘震荡\n")
sb.WriteString("- 刚平仓不久(<15分钟)\n\n")
// === 夏普比率自我进化 ===
sb.WriteString("# 🧬 夏普比率自我进化\n\n")
sb.WriteString("每次你会收到**夏普比率**作为绩效反馈(周期级别):\n\n")
sb.WriteString("**夏普比率 < -0.5** (持续亏损):\n")
sb.WriteString(" → 🛑 停止交易,连续观望至少6个周期(18分钟)\n")
sb.WriteString(" → 🔍 深度反思:\n")
sb.WriteString("# 夏普比率自我进化\n\n")
sb.WriteString("每次你会收到夏普比率作为绩效反馈(周期级别):\n\n")
sb.WriteString("夏普比率 < -0.5 (持续亏损):\n")
sb.WriteString(" → 停止交易,连续观望至少6个周期(18分钟)\n")
sb.WriteString(" → 深度反思:\n")
sb.WriteString(" • 交易频率过高?(每小时>2次就是过度)\n")
sb.WriteString(" • 持仓时间过短?(<30分钟就是过早平仓)\n")
sb.WriteString(" • 信号强度不足?(信心度<75)\n")
sb.WriteString(" • 是否在做空?(单边做多是错误的)\n\n")
sb.WriteString("**夏普比率 -0.5 ~ 0** (轻微亏损):\n")
sb.WriteString(" → ⚠️ 严格控制:只做信心度>80的交易\n")
sb.WriteString("夏普比率 -0.5 ~ 0 (轻微亏损):\n")
sb.WriteString(" → 严格控制:只做信心度>80的交易\n")
sb.WriteString(" → 减少交易频率:每小时最多1笔新开仓\n")
sb.WriteString(" → 耐心持仓:至少持有30分钟以上\n\n")
sb.WriteString("**夏普比率 0 ~ 0.7** (正收益):\n")
sb.WriteString(" → 维持当前策略\n\n")
sb.WriteString("**夏普比率 > 0.7** (优异表现):\n")
sb.WriteString(" → 🚀 可适度扩大仓位\n\n")
sb.WriteString("**关键**: 夏普比率是唯一指标,它会自然惩罚频繁交易和过度进出。\n\n")
sb.WriteString("夏普比率 0 ~ 0.7 (正收益):\n")
sb.WriteString(" → 维持当前策略\n\n")
sb.WriteString("夏普比率 > 0.7 (优异表现):\n")
sb.WriteString(" → 可适度扩大仓位\n\n")
sb.WriteString("关键: 夏普比率是唯一指标,它会自然惩罚频繁交易和过度进出。\n\n")
// === 决策流程 ===
sb.WriteString("# 📋 决策流程\n\n")
sb.WriteString("1. **分析夏普比率**: 当前策略是否有效?需要调整吗?\n")
sb.WriteString("2. **评估持仓**: 趋势是否改变?是否该止盈/止损?\n")
sb.WriteString("3. **寻找新机会**: 有强信号吗?多空机会?\n")
sb.WriteString("4. **输出决策**: 思维链分析 + JSON\n\n")
sb.WriteString("#决策流程\n\n")
sb.WriteString("1. 分析夏普比率: 当前策略是否有效?需要调整吗?\n")
sb.WriteString("2. 评估持仓: 趋势是否改变?是否该止盈/止损?\n")
sb.WriteString("3. 寻找新机会: 有强信号吗?多空机会?\n")
sb.WriteString("4. 输出决策: 思维链分析 + JSON\n\n")
// === 输出格式 ===
sb.WriteString("# 📤 输出格式\n\n")
sb.WriteString("**第一步: 思维链(纯文本)**\n")
sb.WriteString("#输出格式\n\n")
sb.WriteString("第一步: 思维链(纯文本)\n")
sb.WriteString("简洁分析你的思考过程\n\n")
sb.WriteString("**第二步: JSON决策数组**\n\n")
sb.WriteString("第二步: JSON决策数组\n\n")
sb.WriteString("```json\n[\n")
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")
sb.WriteString("字段说明:\n")
sb.WriteString("- `action`: open_long | open_short | close_long | close_short | hold | wait\n")
sb.WriteString("- `confidence`: 0-100(开仓建议≥75\n")
sb.WriteString("- 开仓时必填: leverage, position_size_usd, stop_loss, take_profit, confidence, risk_usd, reasoning\n\n")
// === 关键提醒 ===
sb.WriteString("---\n\n")
sb.WriteString("**记住**: \n")
sb.WriteString("记住: \n")
sb.WriteString("- 目标是夏普比率,不是交易频率\n")
sb.WriteString("- 做空 = 做多,都是赚钱工具\n")
sb.WriteString("- 宁可错过,不做低质量交易\n")
sb.WriteString("- 风险回报比1:3是底线\n")
@@ -352,18 +357,18 @@ func buildUserPrompt(ctx *Context) string {
var sb strings.Builder
// 系统状态
sb.WriteString(fmt.Sprintf("**时间**: %s | **周期**: #%d | **运行**: %d分钟\n\n",
sb.WriteString(fmt.Sprintf("时间: %s | 周期: #%d | 运行: %d分钟\n\n",
ctx.CurrentTime, ctx.CallCount, ctx.RuntimeMinutes))
// BTC 市场
if btcData, hasBTC := ctx.MarketDataMap["BTCUSDT"]; hasBTC {
sb.WriteString(fmt.Sprintf("**BTC**: %.2f (1h: %+.2f%%, 4h: %+.2f%%) | MACD: %.4f | RSI: %.2f\n\n",
sb.WriteString(fmt.Sprintf("BTC: %.2f (1h: %+.2f%%, 4h: %+.2f%%) | MACD: %.4f | RSI: %.2f\n\n",
btcData.CurrentPrice, btcData.PriceChange1h, btcData.PriceChange4h,
btcData.CurrentMACD, btcData.CurrentRSI7))
}
// 账户
sb.WriteString(fmt.Sprintf("**账户**: 净值%.2f | 余额%.2f (%.1f%%) | 盈亏%+.2f%% | 保证金%.1f%% | 持仓%d个\n\n",
sb.WriteString(fmt.Sprintf("账户: 净值%.2f | 余额%.2f (%.1f%%) | 盈亏%+.2f%% | 保证金%.1f%% | 持仓%d个\n\n",
ctx.Account.TotalEquity,
ctx.Account.AvailableBalance,
(ctx.Account.AvailableBalance/ctx.Account.TotalEquity)*100,
@@ -401,7 +406,7 @@ func buildUserPrompt(ctx *Context) string {
}
}
} else {
sb.WriteString("**当前持仓**: 无\n\n")
sb.WriteString("当前持仓: 无\n\n")
}
// 候选币种(完整市场数据)